802.1x WPA2 FreeRadius con control de acceso con OpenLdap
Contents
Resumen
En este articulo se describe como montar un entorno Wifi seguro por certificado digital, pero controlando los usuarios que admitimos por wifi mediante nuestro Ldap.
OpenLdap
A nuestro Ldap tenemos que añadir el esquema de Radius que encontramos dentro de la documentación, y lo copiamos en la carpeta '/etc/openldap/schemas/radius.schema'. Editamos el fichero '/etc/openldap/slapd.conf' y se añade el siguiente include
include /etc/openldap/schema/radius.schema /etc/init.d/slapd restart
A nuestro usuario le añadimos el 'ObjectClass' radiusprofile, y le asignamos dos atributos
dialupAccess: usuario@luniel.com (Tiene que coincidir con el Distinguish Name del Certificado que generaremos.) radiusGroupName: WPA2Enterprise (Los usuarios de este grupo tendran acceso al Red Wifi
Certificados
Mediante 'Openssl' tenemos que crear varios certificados:
ca.crt (clave publica de nuestra CA) radius.luniel.com.key (Clave privada del servidor radius) radius.luniel.com.crt (Clave publica del servidor) dh1024.pem (fichero Hoffman) random (fichero aleatorio, necesario para el radius) usuario@luniel.com.p12 (Contenedor PKCS#12 para instalar en Windows XP)
No nos extendemos sobre el uso de openssl.
FreeRadius
La configuración de Free Radius tiene multitud de ficheros de configuración, no vamos a realizar accounting. compilamos freeradius con las opciones USE snmp ldap edirectory.
radiusd.conf
Comentamos la parte de Listen del accounting
# This second "listen" section is for listening on the accounting # port, too. # #listen { # ipaddr = * # ipv6addr = :: # port = 0 # type = acct # interface = eth0 # clients = per_socket_clients #}
En la sección de log, le decimos que 'loggue' las autenticaciones
auth = yes
En la sección de proxy, le indicamos que no realizamos proxy (es nuestro unico servidor radius
proxy_requests = no #$INCLUDE proxy.conf
Habilitamos el snmp
snmp = yes
En la sección de modules deshabiliamos el modulo SQL, ya que no vamos a realizar acceso a BD
#$INCLUDE sql.conf #$INCLUDE sql/mysql/counter.conf
client.conf
Editamos el fichero 'clients.conf', y le damos el acceso a nuestro router wifi con la contraseña.
client 192.168.1.10 { secret = testing123 (esta es la contraseña de acceso del router al servidor radius shortname = LunielEnterprise }
eap.conf
Windows XP se autentica mediante EAP-TLS y PEAP.
eap { default_eap_type = peap #md5 { Quitamos md5 #} #leap { Quitamos el protocolo leap de cisco #} #gtc { Quitamos el GTC # auth_type = PAP #} tls{ certdir = ${confdir}/certificados cadir = ${confdir}/certificados private_key_file = ${certdir}/radius.luniel.com.key certificate_file = ${certdir}/radius.luniel.com.crt CA_file = ${cadir}/ca.crt dh_file = ${certdir}/dh1024.pem random_file = ${certdir}/random cipher_list = "DEFAULT" } #ttls{ Quitamos ttls #} EAP-TLS-Require-Client-Cert = Yes peap { default_eap_type = mschapv2 copy_request_to_tunnel = no use_tunneled_reply = no } mschapv2 { } }
modules/ldap
Este fichero nos permite configurar el acceso al Ldap, realizamos la siguientes modificaciones.
ldap { server = "altair.luniel.com" basedn = "ou=Users,dc=luniel,dc=com" filter = "dialupAccess=%u" (El nombre del usuario está en el campo dialupAccess) groupname_attribute = radiusGroupName (Campo donde le indicamos el grupo de acceso) groupmembership_filter = (dialupAccess=%u) groupmembership_attribute = radiusGroupName edir_account_policy_check = yes access_attr_used_for_allow = yes }
users
En este fichero damos acceso a los usuario que tienen el atributo de grupo correcto. Comentamos todas la lineas del fichero e insertamos las siguientes:
DEFAULT Ldap-Group == WPA2Enterprise Fall-Through = no DEFAULT Auth-Type := Reject Reply-Message = "Please call the helpdesk."
Dejamos pasar los usuarios que pertencen al grupo WPA2Enterprise (del Ldap), y descartamos todos los demás.
Directorio sites-available
Realizamos una copia del fichero default
cp default luniel
Directorio sites-enabled
Borramos los links y realizamos un link a nuestro fichero de configuración.
rm * ln -s ../sites-available/luniel luniel
Editamos el fichero y le dejamos unicamente con el siguiente contenido
authorize { preprocess auth_log files (Estable las reglas del fichero users) ldap (Permite el Ldap para los grupo del fichero users) eap (Permite realmente la autenficación) } authenticate { Auth-Type MS-CHAP { mschap } eap (Realiza la autenticación) } post-auth { Post-Auth-Type REJECT { attr_filter.access_reject (Rechaza los usuario no validos del fichero users } }
Router
Configuramos el router para que acceda a nuestro servidor radius y con encriptación WPA2.
Referencias
- FreeRADIUS + 802.1x/WPA + OpenLDAP HOWTO
- HowTo:OpenLDAP+FreeRADIUS
- OpenWrtDocs/KamikazeConfiguration
- Freeradius
- 802.1X Port-Based Authentication HOWTO
- FreeRadius Wiki
--Daniel Simao 02:13 30 may 2009 (UTC)