802.1X – Configuración de Freeradius

Después de la introducción, vamos a configurar un servidor Freeradius en una Raspberry Pi con linux Raspbian y lo vamos a usar como autenticador de 802.1X

En esencia: un server radius 802.1X sobre Debian.

Usaremos EAP-TLS como método de autenticación, esto es, el cliente inalámbrico y el servidor usarán un certificado respectivamente creado a partir de una entidad cerficadora que instalaremos. Con estos certificados, el punto de acceso y el servidor radius transportarán esta información dentro del tráfico radius y encapsulados por un túnel TLS.

  • Requisitos mínimos:
Un equipo que hará de servidor para instalar freeradius
Un punto de acceso inalámbrico que soporte radius y métodos EAP. 
 (Casi cualquier router inalámbrico doméstico es compatible)
Un cliente con suplicante 802.1X:
 (windows XP SP2 o superior, linux, mac os X, iphone, android ...)
  • Equipos usados en este ejemplo para crear una red doméstica segura:
Punto de Acceso inalámbrico Cisco AIR-AP1121G-E-K9 :
 (software c1100-k9w7-mx.123-8.JEE para WPA2)
Servidor Freeradius instalado en un linux con Raspberry Pi
Un switch PoE Cisco WS-C3750-24PS-S que usaremos para 802.1X cableado
Un cliente Windows 7 con tarjeta de red inalámbrica
  • Requisitos del servidor:

Como hay diferentes compilaciones disponibles de Freeradius, el sistema operativo del servidor no debería ser un handycap.

El servidor deberá tener ip fija o reserva del dhcp para que el punto de acceso envíe inequívocamente las peticiones radius. Así evitamos sorpresas al reiniciar.
Necesitaremos instalar openssl para crear la Autoridad Certificadora ( CA ).
Freeradius también necesitará las librerías de openssl para poder usar los certificados.

En versiones de Freeradius antiguas, era necesario descargar el código fuente y compilarlo con soporte openssl para poder autenticar con EAP-TLS. Además era necesario modificar algunos ficheros del código fuente para adaptar la compilación al sistema operativo del servidor.
Actualmente no es necesario al menos en las versiones para Debian y Ubuntu. En el caso de Raspbian, distribución linux para Raspberry Pi basada en Debian, realizaremos una instalación de paquetes y será totalmente operativa y rápida de instalar para EAP-TLS. Más información en http://wiki.freeradius.org/building/Build

  • Direccionamiento IP de la red doméstica:
punto de acceso inalámbrico = 192.168.5.139
servidor freeradius  = 192.168.5.6
  • Configuración de ip fija en raspberry:
Editamos el fichero /etc/network/interfaces
Comentamos la línea de obtener la ip por dhcp
Añadimos la ip manualmente
pi@raspberrypi ~ $ sudo vi /etc/network/interfaces
auto lo
iface lo inet loopback
#iface eth0 inet dhcp
auto eth0
iface eth0 inet static
address 192.168.5.6
netmask 255.255.255.0
gateway 192.168.5.1
  • Instalación de Freeradius:
Actualizamos el sistema:
pi@raspberrypi ~ $ sudo apt-get update
Instalamos vim, openssl y librerías:
pi@raspberrypi ~ $ sudo apt-get install vim openssl libssl-dev -y
Instalamos Freeradius y utilidades:
pi@raspberrypi ~ $ sudo apt-get install freeradius freeradius-utils freeradius-common -y

Durante la instalación se generarán los parámetros Diffie-Helman (DH) y se incia el servicio freeradius.
Si todo ha ído bien, veremos que durante el arranque del servicio, muestra por pantalla la configuración y carga de los módulos por defecto y finalmente en las últimas líneas vemos que se pone a la escucha:

 ... adding new socket proxy address * port 58543
Listening on authentication address * port 1812
Listening on accounting address * port 1813
Listening on authentication address 127.0.0.1 port 18120 as server inner-tunnel
Listening on proxy address * port 1814
Ready to process requests.

Pararemos de momento el servicio:

pi@raspy ~ $ sudo /etc/init.d/freeradius stop 

Creamos el fichero xpextensions que permite autenticar con EAP-TLS las estaciones Windows, ya que necesitan unas OID’s que deben cumplir los certificados de servidor y cliente.
Si no realizamos este paso, cuando creemos la Entidad Certificadora y generemos los certificados, éstos no servirán para autenticar en estaciones Windows.

Cambiamos a root:
pi@raspy ~ $ sudo su -
root@raspy:~#
Entramos en el directorio /etc/freeradius/certs
root@raspy:~# cd /etc/freeradius/certs
Creamos el fichero xpextensions con el siguiente contenido:
root@raspy:/etc/freeradius/certs# vim xpextensions
[ xpclient_ext]
extendedKeyUsage = 1.3.6.1.5.5.7.3.2
[ xpserver_ext ]
extendedKeyUsage = 1.3.6.1.5.5.7.3.1

Generamos el fichero random y serial:

root@raspy:/etc/freeradius/certs# dd if=/dev/urandom of=random count=2

root@raspy:/etc/freeradius/certs# echo '01' > /etc/freeradius/certs/demoCA/serial 
  • Creamos los certificados de raíz, de servidor y de cliente.

Podemos realizarlo de diferentes formas. En el site de Freeradius encontraremos un script que realiza la tarea al completo. En el site de Nantes-Wireless colgaron tres scripts que realizan la misma tarea por partes (Certificado Raíz, Certificado de Servidor y Certificados de Cliente). Esta idea me parece muy buena porque nos permitirá crear los certificados de cada cliente rápidamente. En esencia se trata usar los comandos openssl pero automatizado es más rápido.
Para poder hacerlos funcionar correctamente sobre la Raspberry con Raspbian he tenido que modificar alguna ruta, así que es bastante probable que este manual pueda servirte paso a paso también para Debian y Ubuntu.
Un aporte adicional que he realizado sobre los scripts se basa en pasar como parámetro la contraseña de los certificados en los casos que es posible. Por defecto, en ambos sitios el password de los certificados era “whatever”.
Las contraseñas que usaremos en el ejemplo serán:

Certificado Raíz (contraseña-CA)= eFca8zvQKH8ZnsGFUNr
Certificado Servidor (contraseña-SRV)= 66fGbGGf95sYh1QwbfIy
Certificado Cliente Xavi (contraseña-CLT)= s3cl3t0d3l4tl0mpl3t4

Los scripts generan los certificados en formato pem, p12 y der, este último útil para Windows.

Script del Certificado raíz:

Si en tu distribución de linux te fallan los scripts, puedes ejecutar línea a línea los comandos openssl del script y encontrar dónde falla.

#!/bin/sh
# Uso : ./CA.root contraseña-CA
SSL=/usr/lib/ssl
export PATH=${SSL}/bin/:${SSL}/misc:${PATH}
export LD_LIBRARY_PATH=${SSL}/lib
rm -rf demoCA
openssl req -new -days 730 -x509 -keyout newreq.pem -out newreq.pem -passin pass:$1 -passout pass:$1
echo "newreq.pem" | /usr/lib/ssl/misc/CA.pl -newca >/dev/null
openssl pkcs12 -export -in newreq.pem -inkey newreq.pem -out root.p12 -cacerts -passin pass:$1 -passout pass:$1
openssl pkcs12 -in root.p12 -out root.pem -passin pass:$1 -passout pass:$1
openssl x509 -inform PEM -outform DER -in root.pem -out root.der
rm -rf newreq.pem
Uso : ./CA.root contraseña-CA
root@raspy:/etc/freeradius/certs# chmod +x CA.root
root@raspy:/etc/freeradius/certs# ./CA.root eFca8zvQKH8ZnsGFUNr
Generating a 2048 bit RSA private key
..............+++
.....+++
writing new private key to 'newreq.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:ES
State or Province Name (full name) [Some-State]:Barcelona
Locality Name (eg, city) []:Barcelona
Organization Name (eg, company) [Internet Widgits Pty Ltd]:capa3.es
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:raspy.capa3.es
Email Address []:xxx@capa3.es
MAC verified OK

Script del Certificado de Servidor CA.srv:

#!/bin/sh
# Uso : ./CA.srv contraseña-CA nombre-servidor
openssl req -new -keyout newreq.pem -out newreq.pem -passin pass:$1 -passout pass:$1
openssl ca -policy policy_anything -out newcert.pem -passin pass:$1 -key $1 -extensions xpserver_ext -extfile xpextensions -infiles newreq.pem
openssl pkcs12 -export -in newcert.pem -inkey newreq.pem -out $2.p12 -clcerts -passin pass:$1 -passout pass:$1
openssl pkcs12 -in $2.p12 -out $2.pem -passin pass:$1 -passout pass:$1
openssl x509 -inform PEM -outform DER -in $2.pem -out $2.der
rm -rf newert.pem newreq.pem

En un determinado punto de la ejecución del script, openssl nos solicitará una contraseña para el Certificado de Servidor.
Usaremos una contraseña diferente a la del Certificado Raíz ya especificada más arriba.

Uso : ./CA.srv contraseña-CA nombre-servidor
root@raspy:/etc/freeradius/certs# chmod +x CA.srv
root@raspy:/etc/freeradius/certs# ./CA.srv eFca8zvQKH8ZnsGFUNr raspy.capa3.es
Generating a 2048 bit RSA private key
.................................+++
.................................................................+++
writing new private key to 'newreq.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:ES
State or Province Name (full name) [Some-State]:Barcelona
Locality Name (eg, city) []:Barcelona
Organization Name (eg, company) [Internet Widgits Pty Ltd]:capa3.es
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:rootca.capa3.es
Email Address []:xxx@capa3.es

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:66fGbGGf95sYh1QwbfIy
An optional company name []:capa3.es
Using configuration from /usr/lib/ssl/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 1 (0x1)
        Validity
            Not Before: May 13 22:02:02 2013 GMT
            Not After : May 13 22:02:02 2014 GMT
        Subject:
            countryName               = ES
            stateOrProvinceName       = Barcelona
            localityName              = Barcelona
            organizationName          = capa3.es
            commonName                = raspy.capa3.es
            emailAddress              = admin@capa3.es
        X509v3 extensions:
            X509v3 Extended Key Usage: 
                TLS Web Server Authentication
Certificate is to be certified until May 13 22:02:02 2014 GMT (365 days)
Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
MAC verified OK

Certificado de Cliente:

#!/bin/sh
# Uso : ./CA.clt usuario contraseña-CLT contraseña-CA
openssl req -new -keyout newreq.pem -out newreq.pem -passin pass:$2 -passout pass:$2
openssl ca -policy policy_anything -out newcert.pem -passin pass:$2 -key $3 -extensions xpclient_ext -extfile xpextensions -infiles newreq.pem
openssl pkcs12 -export -in newcert.pem -inkey newreq.pem -out $1.p12 -clcerts -passin pass:$2 -passout pass:$2
openssl pkcs12 -in $1.p12 -out $1.pem -passin pass:$2 -passout pass:$2
openssl x509 -inform PEM -outform DER -in $1.pem -out $1.der
rm -rf newcert newreq.pem
Uso : ./CA.clt usuario contraseña-CLT contraseña-CA
root@raspy:/etc/freeradius/certs# chmod +x CA.clt 
root@raspy:/etc/freeradius/certs# ./CA.clt xavi s3cl3t0d3l4tl0mpl3t4 eFca8zvQKH8ZnsGFUNr  
Generating a 2048 bit RSA private key
....................+++
..........................................+++
writing new private key to 'newreq.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:ES
State or Province Name (full name) [Some-State]:Barcelona
Locality Name (eg, city) []:Barcelona
Organization Name (eg, company) [Internet Widgits Pty Ltd]:capa3.es
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:xavi
Email Address []:xavi@capa3.es

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:s3cl3t0d3l4tl0mpl3t4
An optional company name []:capa3.es
Using configuration from /usr/lib/ssl/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 2 (0x2)
        Validity
            Not Before: May 13 22:36:10 2013 GMT
            Not After : May 13 22:36:10 2014 GMT
        Subject:
            countryName               = ES
            stateOrProvinceName       = Barcelona
            localityName              = Barcelona
            organizationName          = capa3.es
            commonName                = xavi
            emailAddress              = xavi@capa3.es
        X509v3 extensions:
            X509v3 Extended Key Usage: 
                TLS Web Client Authentication
Certificate is to be certified until May 13 22:36:10 2014 GMT (365 days)
Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
MAC verified OK

Finalmente veremos en el directorio /etc/freeradius/certs los certificados de raíz, servidor y cliente en los tres formatos diferentes ( root, raspy.capa3.es y xavi en el ejemplo):

root@raspy:/etc/freeradius/certs# ls -al *.der *.pem *.p12
lrwxrwxrwx 1 root freerad   34 May 13 18:51 ca.pem -> /etc/ssl/certs/ca-certificates.crt
-rw-r--r-- 1 root freerad 4142 May 13 22:36 newcert.pem
-rw-r--r-- 1 root freerad  920 May 13 22:02 raspy.capa3.es.der
-rw-r--r-- 1 root freerad 2525 May 13 22:02 raspy.capa3.es.p12
-rw-r--r-- 1 root freerad 3543 May 13 22:02 raspy.capa3.es.pem
-rw-r--r-- 1 root freerad  985 May 13 21:42 root.der
-rw-r--r-- 1 root freerad 2589 May 13 21:42 root.p12
-rw-r--r-- 1 root freerad 3632 May 13 21:42 root.pem
lrwxrwxrwx 1 root freerad   36 May 13 18:51 server.pem -> /etc/ssl/certs/ssl-cert-snakeoil.pem
-rw-r--r-- 1 root freerad  908 May 13 22:36 xavi.der
-rw-r--r-- 1 root freerad 2509 May 13 22:36 xavi.p12
-rw-r--r-- 1 root freerad 3515 May 13 22:36 xavi.pem
  •  Ficheros de configuración

Para EAP-TLS necesitaremos modificar tres ficheros:
eap.conf nos proveerá la configuración del método EAP-TLS
users especificará los CN o Nombre Común de los usuarios y coincidirá con el CN del certificado de cada cliente
clients.conf será la lista de ip’s de los puntos de acceso y switches con su secreto compartido radius
Estos ficheros se encuentran en el directorio /etc/freeradius

clients.conf ( configuramos un AP con ip 192.168.5.139 y secreto radius = shhh ):

cd /etc/freeradius
root@raspy:/etc/freeradius# cp clients.conf clients.conf.old
root@raspy:/etc/freeradius# echo ' ' > clients.conf
root@raspy:/etc/freeradius# vim clients.conf
client localhost {
        ipaddr = 127.0.0.1
        secret          = testing123
        require_message_authenticator = no
}
client 192.168.5.139 {
secret = shhh
shortname = AP
nastype = other
}

eap.conf
En este fichero, se especifican entre otros, la contraseña de la Root CA y las rutas a los certificados.

root@raspy:/etc/freeradius# cp eap.conf eap.conf.old
root@raspy:/etc/freeradius# echo ' ' > eap.conf
root@raspy:/etc/freeradius# vi eap.conf
        eap {
                default_eap_type = tls
                timer_expire     = 60
                ignore_unknown_eap_types = no
                cisco_accounting_username_bug = no
                tls {
                        private_key_password = eFca8zvQKH8ZnsGFUNr
                        private_key_file = ${raddbdir}/certs/raspy.capa3.es.pem
                        certificate_file = ${raddbdir}/certs/raspy.capa3.es.pem
                        CA_file = ${raddbdir}/certs/root.pem
                        dh_file = ${raddbdir}/certs/dh
                        random_file = ${raddbdir}/certs/random
                        fragment_size = 1024
                        include_length = yes
                        cipher_list = "DEFAULT"
                              max_entries = 255
                }
        }

users (pondremos un usuario por cada certificado de cliente)

root@raspy:/etc/freeradius# cp users users.old
root@raspy:/etc/freeradius# echo ' ' > users
root@raspy:/etc/freeradius# vi users
"xavi" Auth-Type := EAP
  •  Permisos:
cd /etc/freeradius/certs
root@raspy:/etc/freeradius# chmod 750 *
root@raspy:/etc/freeradius# chmod g-s *
root@raspy:/etc/freeradius# cd /etc/freeradius/
root@raspy:/etc/freeradius# chown root:freerad users eap.conf clients.conf
root@raspy:/etc/freeradius# chmod 640 users eap.conf clients.conf

Ya podemos arrancar el freeradius en modo debug con freeradius -X
Si todo va bien, veremos el arranque cargando los módulos, configuraciones y al final se pondrá a la escucha:

 ... adding new socket proxy address * port 57555
Listening on authentication address * port 1812
Listening on accounting address * port 1813
Listening on authentication address 127.0.0.1 port 18120 as server inner-tunnel
Listening on proxy address * port 1814
Ready to process requests.

Una vez verificado podemos arrancarlo como servicio con:

pi@raspy ~ $ sudo /etc/init.d/freeradius start
[ ok ] Starting FreeRADIUS daemon: freeradius.
  •  Revocación de Certificados

Un aspecto importante de la seguridad es mantener la lista de certificados.
Si deseamos anular un certificado porque se ha comprometido o el usuario ya no existe, podemos revocar un certificado.
Para tal motivo he creado un usuario y certificado llamado “borrable”.
Verificamos la lista de certificados emitidos.
Si sale una V al principio de la línea, el certificado es Válido:

root@raspy:/# cat /etc/freeradius/certs/demoCA/index.txt
V       140513220202Z           01      unknown /C=ES/ST=Barcelona/L=Barcelona/O=capa3.es/CN=raspy.capa3.es/emailAddress=xxx@capa3.es
V       140513223610Z           02      unknown /C=ES/ST=Barcelona/L=Barcelona/O=capa3.es/CN=xavi/emailAddress=xxx@capa3.es
V       140514000202Z           03      unknown /C=ES/ST=Barcelona/L=Barcelona/O=capa3.es/CN=borrable/emailAddress=borrable@capa3.es

Revocamos el certificado del usuario “borrable”.
Usaremos la contraseña de la root CA:

root@raspy:/etc/freeradius/certs# openssl ca -revoke borrable.pem 
Using configuration from /usr/lib/ssl/openssl.cnf
Enter pass phrase for ./demoCA/private/cakey.pem:
Revoking Certificate 03.
Data Base Updated

Verificamos que el certificado está revocado.
Si sale una R al princio de la linea, el certificado ha sido revocado:

root@raspy:/etc/freeradius/certs# grep borrable /etc/freeradius/certs/demoCA/index.txt    
R       140514000202Z   130514001935Z   03      unknown /C=ES/ST=Barcelona/L=Barcelona/O=capa3.es/CN=borrable/emailAddress=borrable@capa3.es
  •  Logs

Cuando ya tengamos un AP o switch configurados con 802.1x, en el directorio /var/log/freeradius/radacct/ se generarán logs por cada NAS y día del tipo:

cat /var/log/freeradius/radacct/192.168.5.139/detail-20130404
Wed Apr 24 20:26:44 2013
        Acct-Session-Id = "00000039"
        Called-Station-Id = "001e.eeee.ffff"
        Calling-Station-Id = "0024.aaaa.bbbb"
        Cisco-AVPair = "ssid=capa3.es"
        Cisco-AVPair = "vlan-id=1"
        Cisco-AVPair = "nas-location=unspecified"
        Cisco-AVPair = "auth-algo-type=eap-tls"
        User-Name = "xavi"
        Acct-Authentic = RADIUS
        Cisco-AVPair = "connect-progress=Call Up"
        Acct-Session-Time = 104
        Acct-Input-Octets = 25466
        Acct-Output-Octets = 1357
        Acct-Input-Packets = 300
        Acct-Output-Packets = 12
        Acct-Terminate-Cause = Lost-Carrier
        Cisco-AVPair = "disc-cause-ext=No Reason"
        Acct-Status-Type = Stop
        NAS-Port-Type = Wireless-802.11
        Cisco-NAS-Port = "300"
        NAS-Port = 300
        Service-Type = Framed-User
        NAS-IP-Address = 192.168.5.139
        Acct-Delay-Time = 0
        Acct-Unique-Session-Id = "b9d6b426065adde2"
        Timestamp = 1366835204

Wed Apr 24 20:27:05 2013
        Acct-Session-Id = "0000003C"
        Called-Station-Id = "001e.eeee.ffff"
        Calling-Station-Id = "0024.aaaa.bbbb"
        Cisco-AVPair = "ssid=capa3.es"
        Cisco-AVPair = "vlan-id=1"
        Cisco-AVPair = "nas-location=unspecified"
        User-Name = "xavi"
        Cisco-AVPair = "connect-progress=Call Up"
        Acct-Authentic = RADIUS
        Acct-Status-Type = Start
        NAS-Port-Type = Wireless-802.11
        Cisco-NAS-Port = "301"
        NAS-Port = 301
        Service-Type = Framed-User
        NAS-IP-Address = 192.168.5.139
        Acct-Delay-Time = 0
        Acct-Unique-Session-Id = "b89c30055a6a1cb6"
        Timestamp = 1366835225

Los logs del propio servidor se hallan en /var/log/freeradius/radiusd.log
Si existiera algún error en la configuración, permisos etc, a parte de arrancar el servicio en modo debug como antes hemos explicado podemos revisar los logs del radiusd. En el siguiente ejemplo vemos que carga mal por pemisos y por el módulo eap.conf y al final ya arranca bien después de la corrección:

root@raspy:~# cat /var/log/freeradius/radius.log 
Wed Apr  3 22:44:24 2013 : Info: Loaded virtual server 
Wed Apr  3 22:44:24 2013 : Info: Loaded virtual server inner-tunnel
Wed Apr  3 22:44:24 2013 : Info:  ... adding new socket proxy address * port 56128
Wed Apr  3 22:44:24 2013 : Info: Ready to process requests.
Wed Apr  3 22:46:11 2013 : Info: Signalled to terminate
Wed Apr  3 22:46:11 2013 : Info: Exiting normally.
Wed Apr  3 23:39:13 2013 : Error: rlm_eap: SSL error error:0200100D:system library:fopen:Permission denied
Wed Apr  3 23:39:13 2013 : Error: rlm_eap_tls: Error reading certificate file /etc/freeradius/certs/server.pem
Wed Apr  3 23:39:13 2013 : Error: rlm_eap: Failed to initialize type tls
Wed Apr  3 23:39:13 2013 : Error: /etc/freeradius/eap.conf[17]: Instantiation failed for module "eap"
Wed Apr  3 23:39:13 2013 : Error: /etc/freeradius/sites-enabled/default[310]: Failed to load module "eap".
Wed Apr  3 23:39:13 2013 : Error: /etc/freeradius/sites-enabled/default[252]: Errors parsing authenticate section. 
Wed Apr  3 23:39:13 2013 : Error: Failed to load virtual server 
Thu Apr  4 18:25:53 2013 : Error: rlm_eap: SSL error error:0200100D:system library:fopen:Permission denied
Thu Apr  4 18:25:53 2013 : Error: rlm_eap_tls: Error reading certificate file /etc/freeradius/certs/server.pem
Thu Apr  4 18:25:53 2013 : Error: rlm_eap: Failed to initialize type tls
Thu Apr  4 18:25:53 2013 : Error: /etc/freeradius/eap.conf[17]: Instantiation failed for module "eap"
Thu Apr  4 18:25:53 2013 : Error: /etc/freeradius/sites-enabled/default[310]: Failed to load module "eap".
Thu Apr  4 18:25:53 2013 : Error: /etc/freeradius/sites-enabled/default[252]: Errors parsing authenticate section. 
Thu Apr  4 18:25:53 2013 : Error: Failed to load virtual server 
Thu Apr  4 21:03:55 2013 : Info: Loaded virtual server 
Thu Apr  4 21:03:55 2013 : Info: Loaded virtual server inner-tunnel
Thu Apr  4 21:03:55 2013 : Info:  ... adding new socket proxy address * port 55038
Thu Apr  4 21:03:55 2013 : Info: Ready to process requests.

Para finalizar la parte de freeradius, a continuación veremos el resultado de un debug de una sessión EAP-TLS satisfactoria:

rad_recv: Access-Request packet from host 192.168.5.139 port 1645, id=22, length=161
        User-Name = "xavi"
        Framed-MTU = 1400
        Called-Station-Id = "001e.eeee.ffff"
        Calling-Station-Id = "0024.aaaa.bbbb"
        Service-Type = Login-User
        Message-Authenticator = 0x30e0359ebbe607c572f38c89c496332f
        EAP-Message = 0x0206001f0d002e639bc9e2c0509b01653f2c24131d24a9f0950580d5eea41b
        NAS-Port-Type = Wireless-802.11
        NAS-Port = 391
        State = 0x8282207481842d48f44a42587b911ea1
        NAS-IP-Address = 192.168.5.139
        NAS-Identifier = "ap"
# Executing section authorize from file /etc/freeradius/sites-enabled/default
+- entering group authorize {...}
++[preprocess] returns ok
++[chap] returns noop
++[mschap] returns noop
++[digest] returns noop
[suffix] No '@' in User-Name = "xavi", looking up realm NULL
[suffix] No such realm "NULL"
++[suffix] returns noop
[eap] EAP packet type response id 6 length 31
[eap] No EAP Start, assuming it's an on-going EAP conversation
++[eap] returns updated
[files] users: Matched entry xavi at line 1
++[files] returns ok
++[expiration] returns noop
++[logintime] returns noop
++[pap] returns noop
Found Auth-Type = EAP
# Executing group from file /etc/freeradius/sites-enabled/default
+- entering group authenticate {...}
[eap] Request found, released from the list
[eap] EAP/tls
[eap] processing type tls
[tls] Authenticate
[tls] processing EAP-TLS
[tls] eaptls_verify returned 7 
[tls] Done initial handshake
[tls] <<< TLS 1.0 Handshake [length 0397], Certificate   [tls] chain-depth=1,  [tls] error=0 [tls] --> User-Name = xavi
[tls] --> BUF-Name = raspy.capa3.es
[tls] --> subject = /C=ES/ST=Barcelona/L=Barcelona/O=capa3.es/CN=raspy.capa3.es/emailAddress=raspy@capa3.es
[tls] --> issuer  = /C=ES/ST=Barcelona/L=Barcelona/O=capa3.es/CN=raspy.capa3.es/emailAddress=raspy@capa3.es
[tls] --> verify return:1
[tls] chain-depth=0, 
[tls] error=0
[tls] --> User-Name = xavi
[tls] --> BUF-Name = xavi
[tls] --> subject = /C=ES/ST=Barcelona/L=Barcelona/O=capa3.es/CN=xavi/emailAddress=raspy@capa3.es
[tls] --> issuer  = /C=ES/ST=Barcelona/L=Barcelona/O=capa3.es/CN=raspy.capa3.es/emailAddress=raspy@capa3.es
[tls] --> verify return:1
[tls]     TLS_accept: SSLv3 read client certificate A
[tls] <<< TLS 1.0 Handshake [length 0106], ClientKeyExchange  
[tls]     TLS_accept: SSLv3 read client key exchange A
[tls] <<< TLS 1.0 Handshake [length 0106], CertificateVerify  
[tls]     TLS_accept: SSLv3 read certificate verify A
[tls] <<< TLS 1.0 ChangeCipherSpec [length 0001]  
[tls] <<< TLS 1.0 Handshake [length 0010], Finished   [tls]     TLS_accept: SSLv3 read finished A [tls] >>> TLS 1.0 ChangeCipherSpec [length 0001]  
[tls]     TLS_accept: SSLv3 write change cipher spec A
[tls] >>> TLS 1.0 Handshake [length 0010], Finished  
[tls]     TLS_accept: SSLv3 write finished A
[tls]     TLS_accept: SSLv3 flush data
[tls]     (other): SSL negotiation finished successfully
SSL Connection Established 
[tls] eaptls_process returned 13 
++[eap] returns handled
Sending Access-Challenge of id 22 to 192.168.5.139 port 1645
        EAP-Message = 0x010700450d800000003b14030100010116030100307adf7a076b43a1ce3c40dd9e3b4a97a59f052be65a0f82656e26794241cfa251c4a5a11cf33b28059cc3aee9bf826a5f
        Message-Authenticator = 0x00000000000000000000000000000000
        State = 0x8282207486852d48f44a42587b911ea1
Finished request 12.
Going to the next request
Waking up in 4.7 seconds.
rad_recv: Access-Request packet from host 192.168.5.139 port 1645, id=23, length=136
        User-Name = "xavi"
        Framed-MTU = 1400
        Called-Station-Id = "001e.eeee.ffff"
        Calling-Station-Id = "0024.aaaa.bbbb"
        Service-Type = Login-User
        Message-Authenticator = 0x761c1d941cfa4aeaf34232a44d38870e
        EAP-Message = 0x020700060d00
        NAS-Port-Type = Wireless-802.11
        NAS-Port = 391
        State = 0x8282207486852d48f44a42587b911ea1
        NAS-IP-Address = 192.168.5.139
        NAS-Identifier = "ap"
# Executing section authorize from file /etc/freeradius/sites-enabled/default
+- entering group authorize {...}
++[preprocess] returns ok
++[chap] returns noop
++[mschap] returns noop
++[digest] returns noop
[suffix] No '@' in User-Name = "xavi", looking up realm NULL
[suffix] No such realm "NULL"
++[suffix] returns noop
[eap] EAP packet type response id 7 length 6
[eap] No EAP Start, assuming it's an on-going EAP conversation
++[eap] returns updated
[files] users: Matched entry xavi at line 1
++[files] returns ok
++[expiration] returns noop
++[logintime] returns noop
++[pap] returns noop
Found Auth-Type = EAP
# Executing group from file /etc/freeradius/sites-enabled/default
+- entering group authenticate {...}
[eap] Request found, released from the list
[eap] EAP/tls
[eap] processing type tls
[tls] Authenticate
[tls] processing EAP-TLS
[tls] Received TLS ACK
[tls] ACK handshake is finished
[tls] eaptls_verify returned 3 
[tls] eaptls_process returned 3 
[tls] Adding user data to cached session
[eap] Freeing handler
++[eap] returns ok
# Executing section post-auth from file /etc/freeradius/sites-enabled/default
+- entering group post-auth {...}
++[exec] returns noop
Sending Access-Accept of id 23 to 192.168.5.139 port 1645
        MS-MPPE-Recv-Key = 0xaec64d137815c0ca86bd6f108a1e8fb4abdc94a2257c9fbb38d2b47435aa2206
        MS-MPPE-Send-Key = 0x1d7b896b053ad4c645ebbdd0c7696be01f14966dc2597b4519c7eecff4b28144
        EAP-Message = 0x03070004
        Message-Authenticator = 0x00000000000000000000000000000000
        User-Name = "xavi"
Finished request 13.
Going to the next request

Leave a Reply

Your email address will not be published. Required fields are marked *