802.1x WPA2 FreeRadius con control de acceso con OpenLdap

From Luniwiki
Jump to: navigation, search

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)