Validación EAP TLS
Servidor RADIUS
Preparación
Vamos a crear un fichero llamado dh de parámetros para Diffie-Hellman parameters file:
openssl dhparam -check -text -5 512 -out /etc/raddb/certs/dh |
Y ahora un fichero con datos aleatorios.
dd if=/dev/urandom of=/etc/raddb/certs/random count=2 |
El usuario y grupo predeterminados que ejecutan radis puede ser radiusd o nobody; eso se especifica en el fichero de configuración. El usuario debe tener permiso de lectura sobre todos los ficheros que utiliza, incluidos los certificados y llaves.
Fichero radiusd.conf
eap-tls
Es el fichero de configuración principal de RADIUS y si sólo queremos EAP-TLS no hay necesidad de modificarlo.
peap
Si quermos configurar PEAP, por ejemplo para utilizar los usuario de un dominio, sí hay que hacer alguna modificación:
mschap { # authtype = MS-CHAP authtype = EAP use_mppe = yes require_encryption = yes require_strong = yes with_ntdomain_hack = yes ntlm_auth = "/usr/bin/ntlm_auth --request-nt-key --username=%{Stripped-User-Name:-%{User-Name:-None}} --challenge=%{mschap:Challenge :-00} --nt-response=%{mschap:NT-Response:-00}" } ... realm IPASS { format = prefix delimiter = "/" ignore_default = no ignore_null = no } # 'username@realm' # realm suffix { format = suffix delimiter = "@" ignore_default = no ignore_null = no } # 'username%realm' # realm realmpercent { format = suffix delimiter = "%" ignore_default = no ignore_null = no } # # 'domain\user' # realm ntdomain { format = prefix delimiter = "\\" ignore_default = no ignore_null = no } ... authorize { preprocess chap mschap IPASS suffix ntdomain eap files } |
Fichero eap.conf
El fichero eap.conf quedaría como:
eap { |
default_eap_type = tls
# default_eap_type = peap
# default_eap_type = ttls timer_expire = 60 ignore_unknown_eap_types = no cisco_accounting_username_bug = no md5 { } leap { } tls { private_key_password = whatever private_key_file = ${raddbdir}/certs/key_radius.pem certificate_file = ${raddbdir}/certs/cert_radius.pem CA_file = ${raddbdir}/certs/CA/cacert.pem dh_file = ${raddbdir}/certs/dh random_file = ${raddbdir}/certs/random } ttls { default_eap_type = md5 copy_request_to_tunnel = no use_tunneled_reply = no } peap { default_eap_type = mschapv2 copy_request_to_tunnel = yes use_tunneled_reply = yes proxy_tunneled_request_as_eap = no } mschapv2 { } } |
Y en este fichero tendremos que decidir qué tipo de eap vamos a utlizar, en nuestro caso TLS o PEAP.
Fichero clients.conf
En este fichero describimos los clientes que admite freeradius; cada cliente es una red y además comparte, por seguridad, una contraseña con el punto de acceso.
En este fichero añadimos:
client 127.0.0.1 { |
secret = contraseña_compartida_con_el_punto_de_acceso
shortname = localhost nastype = other } client 192.168.0.0/24 { |
secret = contraseña_compartida_con_el_punto_de_acceso
shortname = nombre nastype = other } |
Recursos
Certificados digitales: http://dns.bdat.net/documentos/certificados_digitales/
Redes Inalámbicas: http://dns.bdat.net/seguridad_en_redes_inalambricas
http://www.missl.cs.umd.edu/wireless/eaptls/
http://www.linuxjournal.com/article/8017
http://www.linuxjournal.com/article/8095
http://www.linuxjournal.com/article/8151
http://www.alphacore.net/contrib/nantes-wireless/eap-tls-HOWTO.html
FreeRADIUS: http://www.freeradius.org/
OpenSSL: http://www.openssl.org/
Hostapd: http://hostap.epitest.fi/hostapd/
Wpa_supplicant: http://hostap.epitest.fi/wpa_supplicant/
Xsupplicant: http://open1x.sourceforge.net/
Wire1X (GPL authenticator for Windows): http://wire.cs.nthu.edu.tw/wire1x/
Conexión con Windows XP (SP2)
Conexión TLS con Windows XP
Para la conexión TLS primero tenemos que instalar los cetificados con un doble click sobre los ficheros root.der y usuario.p12 según la salida del script descrito anteriormente.
Después tenemos que configurar la red inalámbrica concreta indicando que queremos usar un certificado inteligente.
Conexión PEAP con Windows XP
En la configuración de la red seleccionamos PEAP como método de autenticación.
wpa_supplicant
El fichero wpa_supplicant.conf (en /etc o /etc/wpa_supplicant) describe la lista de redes a las cuales queremos conectar.
wpa_supplicant con TLS
Fichero wpa_supplicant.conf para una conexión TLS quedaría como:
network={ ssid="el_ssid" scan_ssid=1 key_mgmt=WPA-EAP IEEE8021X auth_alg=OPEN pairwise=CCMP TKIP group=CCMP TKIP WEP104 WEP40 eap=TLS identity="identidad" ca_cert="/etc/raddb/certs/CA/cacert.pem" private_key="/etc/raddb/certs/Users/ina.key" client_cert="/etc/raddb/certs/Users/ina.der" private_key_passwd= phase1="include_tls_length=1 peaplabel=0" } |
wpa_supplicant con PEAP
El fichero wpa_supplicant.conf para una conexión PEAP:
network ={ ssid="el_ssid" scan_ssid=1 key_mgmt=IEEE8021X pairwise=CCMP TKIP group=CCMP TKIP WEP104 WEP40 eap=PEAP identity="DOMINIO\usuario" password="contraseña para el dominio" phase1="peaplabel=1" phase2="auth=MSCHAPV2" } |