802.1x WPA2 FreeRadius con control de acceso con OpenLdap

De LuniWiki

Contenido

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

--Daniel Simao 02:13 30 may 2009 (UTC)

Herramientas personales