Está en la página 1de 54

29-04-2011

Debianitas frikis: Mini HOW-TO Freeradi

Compartir

Informar sobre mal uso

Siguiente blog

Crear un blog

Acceder

debianitas frikis
EMP TY YO UR CO MP UTER. BE W INDO W SLESS, SHAP ELESS. LIKE LINUX. YO U PUT LINUX INTO A P C AND IT BECO MES THE P C. YO U PUT IN A LAPTO P, IT BECO MES THE LAPTO P. LINUX CAN FLO W , O R IT CAN C RASH. BE LINUX, MY FR IEND!

lunes, mayo 07, 2007

Mini HOW-TO Freeradius en Debian (WPA)


Hola a todos, este ser el primer post dedicado a implementar "algo informtico". Basta de tanta msica y post llenos de gilipolleces (como he acostumbrado a hacer hasta el momento). Por fn har algo de provecho y de ayuda a la comunidad. Mini HOW-TO Freeradius en Debian (WPA). C ontenido: 1.- Prembulo. 2.- Sistema y requerimientos. 3.- C ompilando Freeradius desde las fuentes. 4.- C reacin e instalacin de certificados. 5.- C onfigurando Freeradius. 6.- C onfigurando el AP (Punto de Acceso). 7.- C onfigurando clientes. 8.- C onclusiones. -----------------------------------------------------------------------------------------------1.- Prembulo. A estas alturas de la vida, con la Web 2.0 en pleno auge, las redes wifi son cada vez ms frecuentes y con ellas el intento de hackeo. Normalmente un usuario ADSL con router wifi suele configurar su red con seguridad habilitada con clave WEP (Wired Equivalent Privacy). Esto consiste en crear una clave cifrada de entre 64 y 128 bits, esto supone una manera poco til de proteger tu red ya que ha sido sobradamente demostrado la facilidad con la que se puede "reventar" dicha clave con poco esfuerzo (incluso el FBI ha demostrado que en tan slo 3 minutos y con herramientas al alcance de todos se puede descifrar la clave WEP). Por ello surgi WPA (Wi-Fi Protected Access), un sistema mucho ms robusto y seguro. Este mini HOW-TO intentar explicar como montar tu propio sistema WPA para proteger tu red wifi. 2.- Sistema y requerimientos.

Esta obra est bajo una licencia de C reative C ommons. Ahora mismo hay

blogspot.com//mini-how-to-freeradi

1/54

29-04-2011

Debianitas frikis: Mini HOW-TO Freeradi

Para montar el servidor con Freeradius yo he usado Debian etch (cmo no?!). Es un Athlon XP 64 bits con 80 gb de disco. La implementacin de Freeradius se puede llevar a cabo en todas las distribuciones Linux, aqu slo me centrar en instalarlo y configurarlo en Debian, con lo que es posible que algunos comandos cambien en tu distribucin, as como la localizacin de mucho archivos. C omo siempre que uses un Linux no necesitars una mquina muy potente para implementar una gran cantidad de servicios (no como en esos Gindoces que necesitan ordenadores de la NASA para soportar un simple IIS ;-) ) 3.- Compilando Freeradius desde las fuentes. Si an ests leyendo es porque te interesa el tema y quieres montar tu porpio servidor, si no mejor no sigas leyendo ya que a partir de aqu viene lo "tcnico". Existen dos maneras de instalar Freeradius en tu sistema Debian: 1.- Desde los repositorios oficiales: apt-get install freeradius Aunque esta forma no es la ms indicada ya que por un problema con la licencia de OpenSSL el binario oficial de Debian no incluye soporte para SSL. 2.- Desde las fuentes (REC OMENDADO): Esta es la manera ms indicada para instalar Freeradius (esta es la manera en la que yo lo he instalado). Para ello debes seguir estos pasos: a) Necesitas instalar dpkg-dev, para ello: apt-get install dpkg-dev b) Descarga las fuentes desde la versin 1.1.5 (versin estable en el momento de escribir este mini HOW-TO). Freeradius c) Una vez descargado: $ tar zxf freeradius-1.1.5.tar.gz $ cd freeradius-1.1.5 $ fakeroot dpkg-buildpackage -b -uc $ sudo dpkg -i ../freeradius_1.1.5-0_i386.deb Nota: Si ests como root no necesitars hacer un fakeroot para compilar e instalar. Nota II: Muy importante, antes de compilar y generar el binario debes revisar el fichero rules que se encuentra en el directorio debian dentro del directorio donde has descomprimido las fuentes de freeradius. Una vez lo edites (por ejemplo: vi rules) debes comentar la siguiente linea: buildssl = --with-rlm_sql_postgresql_lib_dir=`pg_config --libdir` --withrlm_sql_postgresql_include_dir=`pg_config --includedir` ya que nosotros no queremos soporte para PostgreSQL. 4.- Creacin e instalacin de certificados. Una vez tenemos instalado Freeradius en nuestra mquina Debian toca crear los certificados tanto de servidor como de cliente. Para facilitar este proceso usaremos los scripts de Raymond McKay's HOWTO. Estos scripts se pueden copiar y pegar tal cual, con los nombres que se proponen. Se debe tener en cuenta que algunas variables se deben modificar para adaptarlas a tu sistema. Primero creamos el script para generar el certificado raz:

blogspot.com//mini-how-to-freeradi

2/54

29-04-2011
CA.root

Debianitas frikis: Mini HOW-TO Freeradi

#En negrita las variables que se tienen que especificar. # C APL. Es el ejecutable de perl C A.pl que en Debian normalmente lo deberas encontrar en: /usr/lib/ssl/misc/CA.pl # KEYGEN. Es el programa que se usar para generar un password aleatorio si no especificas #ninguno a la hora de crear los certificados. Yo he usado dnskeygen que los puedes encontrar en #las utilidades de bind (apt-get install bind). #!/bin/sh OPENSSL=openssl CAPL=(path to your C A.pl) KEYGEN=(your choice of key/password generator) PASSDIR=pass DERDIR=der P12DIR=p12 PEMDIR=pem VALIDFOR=365 PASSWD=$1 mkdir -p $PEMDIR $P12DIR $DERDIR $PASSDIR if [ -z "${PASSWD}" ]; then echo "No root password specified, trying $PASSDIR/root.pass." if [ -a $PASSDIR/root.pass ]; then PASSWD=`cat $PASSDIR/root.pass` else echo "Not found. Generating password, see $PASSDIR/root.pass for contents." PASSWD=`$KEYGEN | head -c 32` cat /dev/null > $PASSDIR/root.pass echo $PASSWD >> $PASSDIR/root.pass fi fi rm -rf demoC A $OPENSSL req -new -x509 -days $VALIDFOR -keyout $PEMDIR/newreq.pem -out \ $PEMDIR/newreq.pem -passin pass:$PASSWD -passout pass:$PASSWD echo "${PEMDIR}/newreq.pem" | $C APL -newca >/dev/null $OPENSSL pkcs12 -export -in demoC A/cacert.pem -inkey $PEMDIR/newreq.pem -out \ $P12DIR/root.p12 -cacerts -passin pass:$PASSWD -passout pass:$PASSWD $OPENSSL pkcs12 -in $P12DIR/root.p12 -out $PEMDIR/root.pem -passin \ pass:$PASSWD -passout pass:$PASSWD $OPENSSL x509 -inform PEM -outform DER -days $VALIDFOR -in $PEMDIR/root.pem \ -out $DERDIR/root.der -passin pass:$PASSWD rm -rf $PEMDIR/newreq.pem Segundo creamos el script para generar el certificado de servidor:

blogspot.com//mini-how-to-freeradi

3/54

29-04-2011
CA.server

Debianitas frikis: Mini HOW-TO Freeradi

# KEYGEN. Es el programa que se usar para generar un password aleatorio si no especificas #ninguno a la hora de crear los certificados. Yo he usado dnskeygen que los puedes encontrar en #las utilidades de bind (apt-get install bind) #!/bin/sh OPENSSL=openssl KEYGEN=(your choice of key/password generator) PASSDIR=pass DERDIR=der P12DIR=p12 PEMDIR=pem VALIDFOR=365 SNAME=$1 PASSWD=$2 ROOTPASSWD=$3 mkdir -p $PEMDIR $P12DIR $DERDIR $PASSDIR if [ -z "${SNAME}" ]; then echo "WARNING: server name not specified. Using \"server\"." SNAME=server fi if [ -z "${PASSWD}" ]; then echo "No password specified, trying $PASSDIR/$SNAME.pass." if [ -a $PASSDIR/$SNAME.pass ]; then PASSWD=`cat $PASSDIR/$SNAME.pass` else echo "Not found. Generating password, see $PASSDIR/$SNAME.pass for contents." PASSWD=`$KEYGEN | head -c 32` cat /dev/null > $PASSDIR/$SNAME.pass echo $PASSWD >> $PASSDIR/$SNAME.pass fi fi if [ -z "${ROOTPASSWD}" ]; then echo "No root password specified, trying $PASSDIR/root.pass." if [ -a $PASSDIR/root.pass ]; then ROOTPASSWD=`cat $PASSDIR/root.pass` else echo "FATAL: No root certification password." exit fi fi $OPENSSL req -new -keyout $PEMDIR/newreq.pem -out $PEMDIR/newreq.pem -passin \ pass:$PASSWD -passout pass:$PASSWD $OPENSSL ca -policy policy_anything -out $PEMDIR/newcert.pem -key $ROOTPASSWD \ -extensions xpserver_ext -extfile xpextensions -days $VALIDFOR -infiles $PEMDIR/newreq.pem $OPENSSL pkcs12 -export -in $PEMDIR/newcert.pem -inkey

blogspot.com//mini-how-to-freeradi

4/54

29-04-2011
$PEMDIR/newreq.pem -out \

Debianitas frikis: Mini HOW-TO Freeradi

$P12DIR/$1.p12 -clcerts -passin pass:$PASSWD -passout pass:$PASSWD $OPENSSL pkcs12 -in $P12DIR/$SNAME.p12 -out $PEMDIR/$SNAME.pem -passin \ pass:$PASSWD -passout pass:$PASSWD $OPENSSL x509 -inform PEM -outform DER -in $PEMDIR/$SNAME.pem out $DERDIR/$SNAME.der rm -rf $PEMDIR/newcert.pem $PEMDIR/newreq.pem Finalmente creamos el script para generar el certificado del cliente. CA.client # KEYGEN. Es el programa que se usar para generar un password aleatorio si no especificas #ninguno a la hora de crear los certificados. Yo he usado dnskeygen que los puedes encontrar en #las utilidades de bind (apt-get install bind) #!/bin/sh OPENSSL=openssl KEYGEN=(your choice of key/password generator) PASSDIR=pass DERDIR=der P12DIR=p12 PEMDIR=pem VALIDFOR=365 C LNAME=$1 PASSWD=$2 ROOTPASSWD=$3 mkdir -p $PEMDIR $P12DIR $DERDIR $PASSDIR if [ -z "${C LNAME}" ]; then echo "WARNING: client name not specified. Using \"client\"." C LNAME=client fi if [ -z "${PASSWD}" ]; then echo "No password specified, trying $PASSDIR/$C LNAME.pass." if [ -a $PASSDIR/$C LNAME.pass ]; then PASSWD=`cat $PASSDIR/$C LNAME.pass` else echo "Not found. Generating password, see $PASSDIR/$C LNAME.pass for contents." PASSWD=`$KEYGEN | head -c 16` cat /dev/null > $PASSDIR/$C LNAME.pass echo $PASSWD >> $PASSDIR/$C LNAME.pass fi fi if [ -z "${ROOTPASSWD}" ]; then echo "No root password specified, trying $PASSDIR/root.pass." if [ -a $PASSDIR/root.pass ]; then ROOTPASSWD=`cat $PASSDIR/root.pass`

blogspot.com//mini-how-to-freeradi

5/54

29-04-2011
else

Debianitas frikis: Mini HOW-TO Freeradi

echo "FATAL: No root certification password." exit fi fi $OPENSSL req -new -keyout $PEMDIR/newreq.pem -out $PEMDIR/newreq.pem -passin \ pass:$PASSWD -passout pass:$PASSWD $OPENSSL ca -policy policy_anything -out $PEMDIR/newcert.pem -passin \ pass:$PASSWD -key $ROOTPASSWD -extensions xpclient_ext -days $VALIDFOR \ -extfile xpextensions -infiles $PEMDIR/newreq.pem $OPENSSL pkcs12 -export -in $PEMDIR/newcert.pem -inkey $PEMDIR/newreq.pem -out \ $P12DIR/$C LNAME.p12 -clcerts -passin pass:$PASSWD -passout pass:$PASSWD $OPENSSL pkcs12 -in $P12DIR/$C LNAME.p12 -out $PEMDIR/$C LNAME.pem -passin \ pass:$PASSWD -passout pass:$PASSWD $OPENSSL x509 -inform PEM -outform DER -in $PEMDIR/$C LNAME.pem out \ $PEMDIR/$C LNAME.der rm -rf $PEMDIR/newcert.pem $PEMDIR/newreq.pem Ahora slo nos queda crear un fichero para adaptar los certificados a las particularidades de Windows XP: 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

Una vez tenemos creados los scripts para los certificados, vamos a generar dichos certificados: Primero creamos el certificado de raz: $ ./C A.root [password] El argumento "password" es opcional (pero te recomiendo ponerlo). En el proceso se te preguntarn una serie de cosas, cuando se te pregunte por "common name", deja el campo en blanco. El siguiente paso es crear el certificado de servidor: $ ./C A.server server-name [password [root-password]] Donde server-name puede ser el nombre del servidor RADIUS. password y root-password son opcionales, pero te recomiendo ponerlos, donde password ser el password para el certificado que ests creando y root-password es el password que espacificaste anteriormente al crear

blogspot.com//mini-how-to-freeradi

6/54

29-04-2011
root.pass.

Debianitas frikis: Mini HOW-TO Freeradi

el certificado raz, si no pusiste ninguno el slo buscar el archivo Se te volvern a preguntar una serie de cosas, cuando se te pregunte por "common name" debes poner el fully-qualified domainname (FQDN) del servidor (para saberlo hostname -fqdn) Finalmente creamos el certificado de cliente: $ ./C A.client client-name [password [root-password]] Donde client-name puede ser el nombre del cliente (lo mejor sera el FQDN del equipo cliente). Cuando se te pregunte por el "common name" introduce los mismo que pusiste en client-name al invocar el script. Obviamente, necesitars repetir este paso para todos los clientes que quieras autenticar. Ahora toca instalar los certificados. C opia los ficheros der/root.der y p12/client-name.p12 al cliente XP. Primero instala el certificado raz para establecernos a nosotros mismo como una autoridad. 1. Doble click en root.der. 2. En la ventana de propiedades de certificado, click en Instalar certificado. 3. En el asistente, pulsar Siguiente. 4. Seleccionar la opicn C olocar todos los certificados en el siguiente almacn y tras pulsar Examinar se tiene que seleccionar el almacn "Entidades emisoras raz de confianza 5. C lick Siguiente para finalizar. Siguiente, instala el certificado de cliente: 1. Doble click en nombreFQDNDelC liente.p12. 2. En el asistente, click "Siguiente" y "Siguiente" otra vez. 3. Te preguntar el password. Este password es el que indicaste al crear el certificado del cliente cuando se ejecut C A.client. 4. Elegir la opcin Seleccionar automticamente el almacn de certificados en base al tipo de certificado. 5. C lick "Siguiente" para finalizar. En el servidor RADIUS debemos hacer los siguiente: Primero, crearemos un repositorio de certificados, por ejemplo podemos elegir: /etc/autoridad-wifi C omo root ejecutamos: # mkdir /etc/autoridad-wifi C opia las claves privadas: # cp pem/root.pem pem/server-name.pem /etc/autoridad-wifi Ahora toca asginar los permisos correctos a las claves. C omo

blogspot.com//mini-how-to-freeradi

7/54

29-04-2011

Debianitas frikis: Mini HOW-TO Freeradi

ejecutaremos freeradius con usuario y grupo freerad, tenemos que asignar permisos rw al superusuario y al grupo freerad permisos r. # chown root.freerad /etc/autoridad-wifi/*.pem # chmod 0640 /etc/autoridad-wifi/*.pem 5.- Configurando Freeradius. Antes de nada se tienen que crear unos ficheros aleatorios, para ello: # /usr/sbin/dnskeygen > /etc/autoridad-wifi/DH # /usr/sbin/dnskeygen > /etc/autoridad-wifi/random # chown root:freerad /etc/autoridad-wifi/DH /etc/autoridad-wifi/random # chmod 0640 /etc/autoridad-wifi/DH /etc/autoridad-wifi/random C onfigurando el corazn de freeradius. Nota: Es probable que tengas que cambiar cosas de este fichero para adaptarlo a las particularidades de tu sistema. Ejecutamos: vi /etc/freeradius/radiusd.conf, y debemos dejarlo algo parecido a esto: # radiusd.conf # C onfiguration of this RADIUS server. # # IMPORTANT: THIS FILE C ONTAINS SEC RETS. # This file should have -rw-r----- root:radiusd permissions. # Various directories prefix = /usr exec_prefix = /usr sysconfdir = /etc localstatedir = /var sbindir = /usr/sbin logdir = ${localstatedir}/log/radius raddbdir = ${sysconfdir}/raddb radacctdir = ${logdir}/radacct # Location of config and logfiles confdir = ${raddbdir} run_dir = ${localstatedir}/run/radiusd log_file = ${logdir}/radius.log # Libraries, modules, etc. libdir = /usr/lib # The pid file pidfile = ${run_dir}/radiusd.pid # User/group config of the RADIUS server user = freerad group = freerad # Request handling max_request_time = 30 delete_blocked_requests = no cleanup_delay = 5

blogspot.com//mini-how-to-freeradi

8/54

29-04-2011
max_requests = 1024

Debianitas frikis: Mini HOW-TO Freeradi

# bind_address: we need only listen on the wireless subnet. bind_address = (IP address to listen on) port = 0 hostname_lookups = no # How the server conducts itself allow_core_dumps = no regular_expressions = yes extended_expressions = yes # Logging behaviour log_stripped_names = no log_auth = no log_auth_badpass = no log_auth_goodpass = no # User handling usercollide = no lower_user = no lower_pass = no nospace_user = no nospace_pass = no # RADIUS C hecker checkrad = ${sbindir}/checkrad # Security options security { max_attributes = 200 reject_delay = 1 status_server = no } # DON'T proxy requests proxy_requests = no # C LIENTS C ONFIGURATION # Include the clients here. $INC LUDE ${confdir}/clients.conf # Don't use SNMP. snmp = no # Thread-pooling thread pool { start_servers = 2 max_servers = 10 min_spare_servers = 3 max_spare_servers = 10 max_requests_per_server = 0 } # MODULE C ONFIGURATION modules {

blogspot.com//mini-how-to-freeradi

9/54

29-04-2011
# This is an EAP-based operation. eap { default_eap_type = tls timer_expire = 60 tls {

Debianitas frikis: Mini HOW-TO Freeradi

private_key_password = (server's private key password, e.g. in pass/server-name.pass) private_key_file = /etc/autoridad-wifi/server-name.pem certificate_file = /etc/autoridad-wifi/server-name.pem C A_file = /etc/autoridad-wifi/root.pem dh_file = /etc/autoridad-wifi/DH random_file = /etc/autoridad-wifi/random fragment_size = 1024 include_length = yes } } # Preprocess the incoming RADIUS request preprocess { huntgroups = ${confdir}/huntgroups hints = ${confdir}/hints with_ascend_hack = no ascend_channels_per_line = 23 with_ntdomain_hack = no with_specialix_jetstream_hack = no with_cisco_vsa_hack = no } # The users file files { usersfile = ${confdir}/users acctusersfile = ${confdir}/acct_users compat = no } # Write a detailed log of all accounting records received detail { detailfile = ${radacctdir}/%{C lient-IP-Address}/detail-%Y%m%d detailperm = 0600 } acct_unique { key = "User-Name, Acct-Session-Id, NAS-IP-Address, C lient-IP-Address, NAS-Port-Id" } radutmp { filename = ${logdir}/radutmp username = %{User-Name} case_sensitive = yes check_with_nas = yes perm = 0600

blogspot.com//mini-how-to-freeradi

10/54

29-04-2011
callerid = "yes" } radutmp sradutmp { filename = ${logdir}/sradutmp perm = 0644 callerid = "no" } expr { } counter daily { filename = ${raddbdir}/db.daily key = User-Name count-attribute = Acct-Session-Time reset = daily counter-name = Daily-Session-Time check-name = Max-Daily-Session allowed-servicetype = Framed-User cache-size = 5000 } always fail { rcode = fail } always reject { rcode = reject } always ok { rcode = ok simulcount = 0 mpp = no } exec { wait = yes input_pairs = request } exec echo { wait = yes

Debianitas frikis: Mini HOW-TO Freeradi

program = "/bin/echo %{User-Name}" input_pairs = request output_pairs = reply } ippool main_pool { range-3 = (starting IP address) range-stop = (ending IP address) netmask = 255.255.255.0 cache-size = 800 session-db = ${raddbdir}/db.ippool ip-index = ${raddbdir}/db.ipindex override = no }

blogspot.com//mini-how-to-freeradi

11/54

29-04-2011
} # MODULE INSTANTIATION instantiate { expr daily } # AUTHORISATION PROC ESS authorize { preprocess eap files } # AUTHENTIC ATION PROC ESS authenticate { eap } # AC C OUNTING preacct { preprocess files } accounting { acct_unique detail radutmp } session { radutmp } post-auth { } Base de datos de puntos de acceso.

Debianitas frikis: Mini HOW-TO Freeradi

Aqu necesitars la clave que asignaste al certificado de servidor (C A.server). Editamos el fichero /etc/freeradius/clients.conf y lo dejamos algo parecido a esto (adaptandolo a nuestras necesidades): # clients.conf # Network access points that authenticate through RADIUS specified here. # # IMPORTANT: THIS FILE C ONTAINS SEC RETS. # This file should have -rw-r----- root:radiusd permissions. # The wireless access point client "(the AP's IP address)" { secret = (RADIUS shared secret) shortname = (a name for logging, etc.) nastype = (your AP's NAS type; if unknown, try "other")

blogspot.com//mini-how-to-freeradi

12/54

29-04-2011
} La base de datos de usuarios:

Debianitas frikis: Mini HOW-TO Freeradi

Editamos el fichero /etc/freeradius/users y lo dejamos algo parecido a este: # users # A list of users and their authentication types. "client-name" Auth-Type := EAP # This is important: it makes RADIUS reject users not found above DEFAULT Auth-Type := Reject Reply-Message = "LOS HAC KERS NO SON BIENVENIDOS y t no tienes permiso para entrar en esta red, desiste de intentar conectarte. MRC HATE!!!!! / HAC KERS AREN'T WELC OME HERE and you don't have permission to enter this network, please desist to retry. GO AWAY!!!!!" Por cada mquina cliente que quieras conectar debers tener una lnea igual que "client-name" Auth-Type := EAP, donde "client-name" ser el FQDN del cliente. Iniciamos el servicio de freeradius, para ello ejecutamos: # freeradius Si todo ha ido bien deberamos ver algo as: # ps faux | grep freeradius freerad 3973 0.0 2.6 68132 24240 ? Ssl May04 0:00 freeradius S el servicio no se arranca prueba con: # freeradius -X -A para debugar. 6.- Configurando el AP (Punto de Acceso). Accederemos a la configuracin va web del AP, y en la seccin de configuracin wireless en el apartado "Authentication" seleccionamos "WPA" y nos solicitar que introduzcamos la ip del servidor radius, el puerto (por defecto poner 1812) y el password que indicamos en el fichero clients.conf. 7.- Configurando clientes. Para evitarnos problemas lo mejor es que nuestro cliente tenga instalado Service Pack 2 de Windows XP. Si no lo tuviese es necesario instalar, como mnimo, Service Pack 1 de Windows XP y el hotfix Q815485 (descargable a travs de microsoft). Normalmente windows debera detectar automticamente todas las redes wifi al alcance de nuestra mquina cliente. Accederemos a la lista de las redes disponibles (pulsando doble click en el icono de los dos ordenadores que aparecern en la barra de tareas al lado de la hora de windows). Seleccionamos la red que acabamos de crear y como ya tenemos el certificado instalado automticamente har la autenticacin contra freeradius y se conectar a nuestra nueva y flamante red segura wifi.

blogspot.com//mini-how-to-freeradi

13/54

29-04-2011
8.- Conclusiones.

Debianitas frikis: Mini HOW-TO Freeradi

Si ests leyendo esto es porque acabaste el HOW-TO y ya tienes tu red wifi ms segura o porque no entendiste nada y an as has hecho el esfuerzo de intentar encontrar algo en claro. Si no es por ninguna de estas dos cosas, mejor dedicate a otra cosa... Para los que hayan conseguido instalar freeradius y hacerlo funcionar, enhorabuena. C omo habris visto hay una gran diferencia entre tener una red con WEP y una red con WPA. Juzgar vosotros mismos. Por ltimo quera mandar un avso a todos de la proliferacin de las redes wifi gemelas, esto consiste en crear una red de las mismas caractersticas a una red que exista, con el mismo SSID y dems, as cuando un usuario (con pocas luces por cierto) quiera conectarse a la red ver dos redes iguales y por equivocacin puede llegar a conectarse a la red gemela propiedad de un usuario malintencionado con lo cual pondremos a su alcance todos nuestros ficheros sin darnos cuenta. ESTAD ATENTOS A ESTO.

Prximamente: HOW-TO C lster de correo Postfix de manera casera en Debian.

Esta obra est bajo una licencia de C reative C ommons.

publicado por cupido en 10:17:00

9 comentarios:
minu dijo...
Algo de ayuda a la comunidad?. Nen, tu comunidad bloggera somos los de siempre (Laia, lex, Norma, Minu... y poco ms). Si quieres ayudarnos vuelve a ser el de antao y no nos hables en xino to. Por cierto, si me echas un cable con cambiar mi plantilla te estar eternamente agradecido que tengo un mierdn que lo flipas y no me mola nada. vie may 11, 12:17:00 PM C EST

the root dijo...


Jajajaja, me refiero a la comunidad linuxera, a la gente del software libre, a los frikis como nos llamis vosotros, a gente que quiere haceros la vida ms fcil a vosotros (pu@~#@~@{[{ usuarios) y no sabe como ni por donde empezar. Esto es un blog sobre debianitas y eso es lo que voy a intentar hacer a partir de ahora poner cosas de inters para los debianitas. Lo de la plantilla lo miramos cuando quieras, pero para eso alex es un hacha!

blogspot.com//mini-how-to-freeradi

14/54

29-04-2011
the root dijo...

Debianitas frikis: Mini HOW-TO Freeradi


vie may 11, 12:23:00 PM C EST Aunque tambin pondr cosas para que me podis criticar como hasta ahora mis asiduos lectores! vie may 11, 12:25:00 PM C EST

cameraphp dijo...
Hola, soy nuevo en esto, lme llamo Juan Pablo C amera logre seguir al pie de la letra tus pasos, pero cuanto ejecuto ./C A.server server-name [password [root-password]] ./C A.client client-name [password [root-password]] me da el sgte error bash: ./C A.server: cannot execute binary file en ambos casos luego hacia la parte final radtest test test localhost 1812 testing123 Sending Access-Request of id 9 to 127.0.0.1 port 1812 User-Name = "test" User-Password = "test" NAS-IP-Address = 255.255.255.255 NAS-Port = 1812 rad_recv: Access-Reject packet from host 127.0.0.1:1812, id=9, length=20 en el log del servidor da rad_recv: Access-Request packet from host 127.0.0.1:32772, id=9, length=56 User-Name = "test" User-Password = "test" NAS-IP-Address = 255.255.255.255 NAS-Port = 1812 Sending Access-Reject of id 9 to 127.0.0.1 port 32772 En fin por lo que entiendo me esta rechazando las conexiones por ser un usuuario no valido y pienso que este error se viene arrastrando desde los errores en la creacion de los certificados tanto para el cliente como del servidor vie jul 04, 12:34:00 AM C EST

cameraphp dijo...
Favor enviar pronta respuesta y muchas gracias de antemano vie jul 04, 12:35:00 AM C EST

the root dijo...


Hola Juan Pablo, le has dado permisos de ejecucin al script? Evidentemente si la generacin de certificados no es correcta el servidor te rechazar las conexiones. Entiendo que "servername" y "client-name" los sustituyes por los nombres que se adecuan a tu entorno. Has aadido el cliente dentro del fichero clients.conf? Has instalado los certificados en el cliente? Que versin de Windows es tu cliente? Saludos vie jul 04, 08:13:00 AM C EST

the root dijo...

blogspot.com//mini-how-to-freeradi

15/54

29-04-2011

Debianitas frikis: Mini HOW-TO Freeradi


El cliente lo tienes que aadir en el fichero users y el access point dentro de clients.conf. Puedes poner la configuracin de tus ficheros? Puedes revisar si tienes algn error de sintaxis dentro de los scripts de creacin de los certificados? Saludos vie jul 04, 08:17:00 AM C EST

cameraphp dijo...
gracias por los apuntes, pero he encontrado otro manual por internet y lo publico entero, cabe destacar que le sumo lo sgte: apt-get install libssl-dev libgdbm-dev libmysql++-dev libkrb5-dev libperl-dev y ademas se tiene que copiar la carpeta misc contrenedora de C A.pl en /etc/ssl para que funcionen bien ******************************

Webstats4U - Free web site statistics Gu a para instalar FreeRADIUS en Redes Privadas v1.0

Por Daniel Romero Pea romero.cl@gmail.com Escuela de Ingenier a Informtica Universidad Diego Portales Santiago, C hile.

C ontenidos:

1. C onfiguraci n de Servidores. 1 1.1. Descarga e instalaci n de freeradius. 1 1.2. Instalaci n de MySQL 4.1. 5 1.3. C onfiguraci n base de freeradius. 6

blogspot.com//mini-how-to-freeradi

16/54

29-04-2011

Debianitas frikis: Mini HOW-TO Freeradi


2. C onfigurando FreeRadius con EAP/PEAP. 9 2.1. C onfiguraci n NAS. 9 2.2. C reaci n de certificados para EAP/PEAP. 9 2.3. Habilitando EAP/PEAP. 11 2.4. Definici n de grupos y usuarios de prueba. 17 2.5. C onfiguraci n del suplicante en Windows XP SP2. 18 3. Referencias. 31

1. C onfiguraci n de Servidores

En el presente cap tulo se explicar como instalar freeradius y MySQL en un sistema Debian, dejndolo en funcionamiento con su configuraci n por defecto. Para esto necesitaremos un PC que cuente con el sistema operativo anteriormente sealado recin instalado, sin programas ajenos a la distribuci n del sistema, y con su interfaz de red ya configurada para acceder a Internet.

1.1. Descarga e instalaci n de freeradius

El primer paso es obtener el c digo fuente o un paquete prehecho para Debian. En el caso de Debian se puede obtener un paquete precompilado con la utilidad apt-get. Nosotros optaremos por descargar el c digo fuente. Para esto debemos descargar el siguiente archivo:

ftp://ftp.freeradius.org/pub/radius/freeradius-1.1.3.tar.bz2

Este archivo contiene el c digo fuente correspondiente a la versi n actual de freeradius en Octubre del 2006.

Para descargarlo podemos hacerlo con la utilidad wget. De no contar con wget podemos instalarla ejecutando apt-get install wget.

radius:/home/user# wget ftp://ftp.freeradius.org/pub/radius/freeradius-1.1.3.tar.bz2

blogspot.com//mini-how-to-freeradi

17/54

29-04-2011

Debianitas frikis: Mini HOW-TO Freeradi

Luego debemos extraer los archivos ejecutando la siguiente sentencia:

radius:/home/user# tar jxvf freeradius-1.1.3.tar.bz2

C on esto los archivos sern extra dos en un nuevo directorio llamado freeradius-1.1.3

Luego debemos ingresar a este nuevo directorio y en el ejecutar el script de configuraci n para luego poder compilarlo:

radius:/home/user# cd freeradius-1.1.3 radius:/home/user/freeradius-1.1.3# ./configure checking for gcc... no checking for cc... no checking for cc... no checking for cl... no configure: error: no acceptable C compiler found in $PATH See `config.log' for more details.

Este error se debe a que en nuestro sistema no est instalado el compilador gcc (GNU C ompiler C ollection, antes GNU C C ompiler). En Debian podemos instalar gcc simplemente ejecutando:

radius:/home/user/freeradius-1.1.3# apt-get install gcc

Finalizada la instalaci n de gcc nuevamente ejecutamos el script de configuraci n:

blogspot.com//mini-how-to-freeradi

18/54

29-04-2011

Debianitas frikis: Mini HOW-TO Freeradi


radius:/home/user/freeradius-1.1.3# ./configure checking for gcc... gcc checking for C compiler default output file name... configure: error: C compiler cannot create executables See `config.log' for more details.

Para solucionar este error debemos instalar el paquete libc6-dev, correspondiente a GNU C Library: Development Libraries and Header Files. C on esto el sistema quedar en condiciones de crear los archivos ejecutables.

radius:/home/user/freeradius-1.1.3# apt-get install libc6-dev

Luego volvemos a intentar ejecutar el script de configuraci n:

radius:/home/user/freeradius-1.1.3# ./configure checking for gcc... gcc checking for C compiler default output file name... a.out checking whether the C compiler works... yes . . . checking for gmake... no checking for make... /usr/local/bin/make configure: error: GNU Make is not installed. Please download and install it from ftp://prep.ai.mit.edu/pub/gnu/make/ before continuing.

Nuevamente un error, pero no hay que frustrarse... C omo lo menciona el mensaje, lo que falta es instalar la aplicaci n make. Para esto nuevamente recurriremos a apt:

radius:/home/user/freeradius-1.1.3# apt-get install make

blogspot.com//mini-how-to-freeradi

19/54

29-04-2011

Debianitas frikis: Mini HOW-TO Freeradi

Nuevamente ejecutamos:

radius:/home/user/freeradius-1.1.3# ./configure checking for gcc... gcc . . /usr/bin/ld: cannot find lperl

Ahora nos avisa que nuestro sistema no cuenta con el lenguaje perl instalado. Soluci n:

Finalemente:

radius:/home/user/freeradius-1.1.3# apt-get install libssl-dev libgdbm-dev libmysql++-dev libkrb5-dev libperl-dev

radius:/home/user/freeradius-1.1.3# ./configure checking for gcc... gcc checking for C compiler default output file name... a.out checking whether the C compiler works... yes. . . . config.status: creating Makefile config.status: creating config.h config.status: config.h is unchanged configure: configuring in src/modules/rlm_checkval configure: running /bin/sh './configure' --prefix=/usr/local -enable-ltdl-install=no --cache-file=/dev/null --srcdir=.

blogspot.com//mini-how-to-freeradi

20/54

29-04-2011

Debianitas frikis: Mini HOW-TO Freeradi


configure: creating ./config.status config.status: creating Makefile radius:/home/user/freeradius-1.1.3#

OK

Luego ejecutamos:

radius:/home/user/freeradius-1.1.3# make radius:/home/user/freeradius-1.1.3# make install

C on esto freeradius est listo para correr por primera vez en nuestro sistema. Ejecutando radius:/home/user/freeradius-1.1.3# radiusd x se iniciar el servidor en modo de debug, en donde nos mostrar informaci n acerca de los eventos que recibe. Si no lo ejecutamos con la opci n x el servidor se inicia, pero no mostrar ninguna informaci n en pantalla.

root@radius:~/radius/freeradius-1.1.3# radiusd -x Starting - reading configuration files ... Using deprecated naslist file. Support for this will go away soon. Module: Loaded exec . . . Initializing the thread pool... Listening on authentication *:1812 Listening on accounting *:1813

blogspot.com//mini-how-to-freeradi

21/54

29-04-2011
Ready to process requests.

Debianitas frikis: Mini HOW-TO Freeradi

C on esto ya tenemos corriendo el servidor freeradius en nuestro sistema, con la configuraci n que trae por defecto.

Por defecto el servidor crea un cliente de nombre y password test y con un secret = testing123.

Ahora podemos realizar un pequeo test de conexi n con la utilidad radtest que biene con freeradius:

radius:~# radtest test test localhost 0 testing123 Sending Access-Request of id 88 to 127.0.0.1 port 1812 User-Name = "test" User-Password = "test" NAS-IP-Address = 255.255.255.255 NAS-Port = 0 Re-sending Access-Request of id 88 to 127.0.0.1 port 1812 User-Name = "test" User-Password = "test" NAS-IP-Address = 255.255.255.255 NAS-Port = 0 rad_recv: Access-Reject packet from host 127.0.0.1:1812, id=88, length=20

En freeradius se report lo siguiente:

rad_recv: Access-Request packet from host 127.0.0.1:32775, id=84, length=56

blogspot.com//mini-how-to-freeradi

22/54

29-04-2011
User-Name = "test" User-Password = "test"

Debianitas frikis: Mini HOW-TO Freeradi

NAS-IP-Address = 255.255.255.255 NAS-Port = 0 rad_recv: Access-Request packet from host 127.0.0.1:32775, id=84, length=56 Sending Access-Reject of id 84 to 127.0.0.1 port 32775

radtest env o un Access-Request, el cual fue recibido por freeradius y contestado con un Access-Reject. C on esto podemos verificar que a lo menos el servidor se esta ejecutando de manera correcta.

1.2. Instalaci n de MySQL 4.1

Ya que tenemos instalado y funcionando freeradius, instalaremos MySQL con el f n de reemplazar la configuraci n de usuarios y clientes y los logs de accounting que por defecto se hacen en archivos de texto, por una base de datos que permita una mejor administraci n de estos.

Primero debemos proceder a instalar MySQL. En esta ocasi n instalaremos la versi n 4.1 utilizando apt-get:

root@radius:~# apt-get install mysql-server-4.1

Luego de instalar MySQL debemos crear la base de datos que utilizar freeradius. Para esto ingresamos a la shell de MySQL ejecutando como root:

root@radius:~# mysql Welcome to the MySQL monitor. C ommands end with ; or \g. Your MySQL connection id is 4 to server version: 4.1.15-log

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

blogspot.com//mini-how-to-freeradi

23/54

29-04-2011

Debianitas frikis: Mini HOW-TO Freeradi

mysql>

Luego ejecutamos las siguientes instrucciones SQL, las que crearn la base de datos con el nombre radius, crearn un usuario tambin de nombre radius con todos los permisos sobre esta base de datos y le asignarn un password=radius:

mysql> create database radius; mysql> grant all privileges on radius.* to radius@localhost; mysql> set password for radius@localhost = old_password('radius');

Ahora debemos proceder a crear la base de datos. Para esto freeradius provee un script sql que puede ser encontrado en el directorio freeradius-1.1.3/doc/examples/mysql.sql.

Para ejecutar el script, podemos hacerlo directamente desde MySQL:

mysql> connect radius; mysql> \. /home/user/freeradius-1.1.3/doc/examples/mysql.sql

Para ver la estructura de las tablas podemos utilizar los siguientes comandos de mysql: show tables; y desc tablename;.

Ahora debemos poblar la base de datos con algn usuario y cliente (NAS) de prueba:

insert into radgroupcheck values ('', 'admin', 'Auth-Type', ':=', 'Local'); insert into radgroupreply values ('', 'admin', 'Framed-Protocol', ':=', 'PPP'); insert into radgroupreply values ('', 'admin', 'Service-Type', ':=', 'Framed-User');

blogspot.com//mini-how-to-freeradi

24/54

29-04-2011

Debianitas frikis: Mini HOW-TO Freeradi


insert into radgroupreply values ('', 'admin', 'FramedC ompression', ':=', 'Van-Jacobsen-TC P-IP');

insert into usergroup values ('dromero', 'admin',''); insert into radcheck values ('', 'dromero', 'Password', '==', 'dromero'); insert into radreply values ('', 'dromero', 'Framed-IP-Address', ':=', '192.168.100.50');

insert into nas values ('', 'test',NULL, '3coml',NULL, 'radiusUDP', NULL, NULL);

C on esto hemos creado un usuario dromero con password dromero, el cual pertenece al grupo admin que posee un conjunto de atributos determinados. Adems hemos agregado un NAS de nombre test, tipo 3coml, y secret radiusUDP. 1.3. C onfiguraci n base de freeradius

C omo queremos que freeradius trabaje con MySQL debemos realizar algunos cambios en los archivos de configuraci n. Estos archivos los podemos encontrar en el directorio /usr/local/etc/raddb.

El archivo users contiene la informaci n de los usuarios, pero estos ahora se almacenarn en MySQL, por lo que no tocaremos este archivo.

El archivo clients.conf se utiliza para configurar los NAS con que interacta freeradius. Aunque ya tenemos el NAS agregado en la base de datos, debemos configurar la ip de este en el archivo. La ultima modificaci n que haremos en este archivo es agregar al final los siguiente:

client 200.14.84.159{ secret = radiusUDP shortname = 3com1 }

blogspot.com//mini-how-to-freeradi

25/54

29-04-2011

Debianitas frikis: Mini HOW-TO Freeradi

donde 200.14.84.159 es la IP de nuestro AP.

Luego debemos configurar el acceso a la base de datos, indic ndole a freeradius cual es la IP del servidor MySQL, el usuario y el password. Esto lo haremos en el archivo sql.conf, en donde deberemos modificar las siguientes l neas:

# C onnect info server = "localhost" login = "radius" password = "radius"

# Database table configuration radius_db = "radius"

donde localhost corresponde a la direcci n del servidor MySQL, login es el nombre de usuario y su password para acceder a la base de datos, y radius_db corresponde al nombre de la base de datos que hemos creado para freeradius.

Luego en el archivo radius.conf configuraremos freeradius para que deje de ocupar los archivos y comience a ocupar MySQL. Para esto modificaremos las siguientes secciones del archivo, las cuales se encuentran al final de este:

authorize { preprocess chap mschap suffix eap sql

blogspot.com//mini-how-to-freeradi

26/54

29-04-2011
} authenticate { Auth-Type PAP { pap } Auth-Type C HAP { chap } Auth-Type MS-C HAP { mschap } } preacct { preprocess acct_unique suffix } accounting { detail radutmp sql } session { radutmp sql } post-auth { sql }

Debianitas frikis: Mini HOW-TO Freeradi

blogspot.com//mini-how-to-freeradi

27/54

29-04-2011
pre-proxy { } post-proxy { eap }

Debianitas frikis: Mini HOW-TO Freeradi

Finalmente echamos a correr nuestro freeradius con MySQL:

root@radius:~# radiusd -x Starting - reading configuration files ... Using deprecated naslist file. Support for this will go away soon. Module: Loaded exec rlm_exec: Wait=yes but no output defined. Did you mean output=none? Module: Instantiated exec (exec) Module: Loaded expr Module: Instantiated expr (expr) Module: Loaded PAP Module: Instantiated pap (pap) Module: Loaded C HAP Module: Instantiated chap (chap) Module: Loaded MS-C HAP Module: Instantiated mschap (mschap) . . . Module: Loaded SQL rlm_sql (sql): Driver rlm_sql_mysql (module rlm_sql_mysql) loaded and linked rlm_sql (sql): Attempting to connect to radius@localhost:/radius

blogspot.com//mini-how-to-freeradi

28/54

29-04-2011
rlm_sql (sql): starting 0

Debianitas frikis: Mini HOW-TO Freeradi

rlm_sql (sql): Attempting to connect rlm_sql_mysql #0 rlm_sql_mysql: Starting connect to MySQL server for #0 rlm_sql (sql): C onnected new DB handle, #0 . . . Initializing the thread pool... Listening on authentication *:1812 Listening on accounting *:1813 Ready to process requests.

2. C onfigurando FreeRadius con EAP/PEAP

2.1. C onfiguraci n NAS

C ada fabricante provee una interfs particular para realizar esta labor. En general la configuraci n de los NAS es bastante sencilla: en cada uno de ellos debemos habilitarlo como cliente RADIUS, configurar la IP del servidor RADIUS, el puerto en que este escucha y el secreto que el NAS comparte con el servidor RADIUS para encriptar las comunicaciones (configurado en el archivo clients.conf).

Para ms detalles consulte el manual del NAS que utilizar. 2.2. C reaci n de certificados para EAP/PEAP

Al utilizar EAP/PEAP deberemos porveer a cada cliente del certificado del servidor. FreeRadius biene con un set de certificados ya creados, que pueden ser encontrados en el directorio /usr/local/raddb/certs, pero no es aconsejable el utilizar estos, ya que son de dominio pblico, por lo que procederemos a crear certificados propios.

blogspot.com//mini-how-to-freeradi

29/54

29-04-2011
OpenSSL.

Debianitas frikis: Mini HOW-TO Freeradi


Para crear estos certificados es necesario tener instalado

Teniendo instalado OpenSSL debemos proceder a configurarlo para nuestra mquina. Esto se debe hacer en el archivo /usr/local/openssl/ssl/openssl.cnf en donde deberemos modificar la siguiente secci n para que coincida con el formato de los directorios que crear freeradius para guardar los certificados, tal cual como lo podemos ver en el directorio /usr/local/raddb/certs. Solo deberemos modificar la siguiente secci n del archivo:

[ C A_default ]

dir = ./demoC A certs = $dir/certs crl_dir = $dir/crl database = $dir/index.txt #unique_subject = no new_certs_dir = $dir/newcerts certificate = $dir/cacert.pem serial =/home/dromero/free/raddb/certs/demoC A/serial crlnumber = $dir/crlnumber crl = $dir/crl.pem private_key = $dir/private/cakey.pem RANDFILE = $dir/private/.rand x509_extensions = usr_cert

En nuestro caso lo nico que fue necesario modificar fue la ubicaci n del archivo serial, que fue cambiado de serial = $dir/serial a la ubicaci n que se indica anteriormente, que corresponde a la ubicaci n del tar de freeradius que descomprimimos al principio de este tutorial.

FreeRadius incorpora un script ya programado para crear los certificados. Este script (certs.sh) se puede encontrar en el directorio scripts del tar del c digo fuente. Este script interacta con 2 scripts ms que se encuentran en el mismo directorio: C A.all y C A.certs.

blogspot.com//mini-how-to-freeradi

30/54

29-04-2011

Debianitas frikis: Mini HOW-TO Freeradi


Lo primero que debemos hacer en estos 3 scripts es modificar las rutas para que apunten a la ubicaci n correcta de openssl en nuestra mquina (/usr/local/openssl). En nuestro caso modificamos las siguientes l neas:

C A.all SSL=/etc/ssl echo "newreq.pem" | /usr/local/ssl/misc/C A.pl newca

C A.certs [ "$SSL" = "" ] && SSL=/etc/ssl

certs.sh [ "$SSL" = "" ] && SSL=/etc/ssl /usr/bin/openssl gendh > dh

Adicionalmente, en el archivo C A.certs debemos llenar los datos de quien emitir los certificados, o sea, nosotros. Solo debemos modificar el archivo en la siguiente secci n de l:

# # Edit the following variables for your organization. # C OUNTRY="C L" PROVINC E="Regi n Metropolitana" C ITY="Santiago" ORGANIZATION="UDP" ORG_UNIT=`RadiusUDP` PASSWORD="radiusUDP" C OMMON_NAME_C LIENT="RadiusUDP C lient certificate" EMAIL_C LIENT="client@example.com"

blogspot.com//mini-how-to-freeradi

31/54

29-04-2011

Debianitas frikis: Mini HOW-TO Freeradi


PASSWORD_C LIENT=$PASSWORD C OMMON_NAME_SERVER="Radius UDP Server certificate" EMAIL_SERVER="server@example.com" PASSWORD_SERVER=$PASSWORD C OMMON_NAME_ROOT="Radius UDP Root certificate" EMAIL_ROOT="root@example.com" PASSWORD_ROOT=$PASSWORD # # lifetime, in days, of the certs # LIFETIME=730 #####EL APORTE luego cp -R /usr/lib/ssl/misc /etc/ssl/

#### Una vez editados estos 3 archivos crearemos los certificados ejecutando: #sh certs.sh

Si todo va bien, deber amos ver en pantalla lo siguiente:

root@radius:~/radiussrc/scripts# sh certs.sh Generating DH parameters, 512 bit long safe prime, generator 2 This is going to take a long time .....+.......+........+.........................................+..................+.+ ........+......................+..........................+............................... .......................+....+..................................................+.......... ..............................+.............+...++*++*++*++*++*++* See the 'certs' directory for the certificates. The 'certs' directory should be copied to .../etc/raddb/

blogspot.com//mini-how-to-freeradi

32/54

29-04-2011

Debianitas frikis: Mini HOW-TO Freeradi


All passwords have been set to 'whatever'

C on esto hemos creado los certificados para nuestro servidor. Estos certificados ahora se encuentran en el directorio certs que est dentro del directorio scripts en el cual hemos estado trabajando. Finalmente, debemos copiar este directorio al directorio donde se encuentra la configuraci n de freeradius, o sea, /usr/local/etc/raddb/.

2.3. Habilitando EAP/PEAP

Nuevamente deberemos ir a editar los archivos radiusd.conf y eap.conf para habilitar la autenticaci n con eap/peap y mschapv2.

Nuestra configuraci n fue la siguiente:

eap.conf

eap { default_eap_type = peap timer_expire = 60

tls { private_key_password = radiusUDP private_key_file = ${raddbdir}/certs/cert-srv.pem certificate_file = ${raddbdir}/certs/cert-srv.pem C A_file = ${raddbdir}/certs/demoC A/cacert.pem dh_file = ${raddbdir}/certs/dh random_file = ${raddbdir}/certs/random }

peap {

blogspot.com//mini-how-to-freeradi

33/54

29-04-2011
default_eap_type = mschapv2 }

Debianitas frikis: Mini HOW-TO Freeradi

mschapv2 { } }

Lo que hicimos fue configurar como eap predeterminado peap, habilitar las contraseas mschapv2 y configurar las rutas hacia los diferentes certificados que creamos en la secci n anterior adems del indicar el password con que fueron creados estos certificados.

radiusd.conf

Debemos asegurarnos que que en la secci n modules se encuentre incluido el modulo eap y mschap.

modules { . . . $INC LUDE ${confdir}/eap.conf mschap { } . . . }

La configuraci n de las otras secciones ser la siguiente (lo que no aparece aqu se deja como viene por defecto):

blogspot.com//mini-how-to-freeradi

34/54

29-04-2011

Debianitas frikis: Mini HOW-TO Freeradi

instantiate { exec expr } authorize { preprocess eap sql } authenticate { Auth-Type MS-C HAP { mschap } eap } preacct { preprocess acct_unique suffix } accounting { detail radutmp sql }

session {

blogspot.com//mini-how-to-freeradi

35/54

29-04-2011
radutmp sql } post-auth { sql } pre-proxy { } post-proxy { }

Debianitas frikis: Mini HOW-TO Freeradi

Ahora que todo est configurado, podemos ejecutar freeradius: Si todo va bien, veremos lo siguiente:

root@radius:~# radiusd -X Starting - reading configuration files ... reread_config: reading radiusd.conf C onfig: including file: /usr/local/etc/raddb/proxy.conf C onfig: including file: /usr/local/etc/raddb/clients.conf C onfig: including file: /usr/local/etc/raddb/eap.conf C onfig: including file: /usr/local/etc/raddb/sql.conf main: prefix = "/usr/local" main: localstatedir = "/usr/local/var" main: logdir = "/usr/local/var/log/radius" main: libdir = "/usr/local/lib" main: radacctdir = "/usr/local/var/log/radius/radacct" main: hostname_lookups = no main: max_request_time = 30 main: cleanup_delay = 5

blogspot.com//mini-how-to-freeradi

36/54

29-04-2011
main: max_requests = 1024

Debianitas frikis: Mini HOW-TO Freeradi

main: delete_blocked_requests = 0 main: port = 0 main: allow_core_dumps = no main: log_stripped_names = no main: log_file = "/usr/local/var/log/radius/radius.log" main: log_auth = no main: log_auth_badpass = no main: log_auth_goodpass = no main: pidfile = "/usr/local/var/run/radiusd/radiusd.pid" main: user = "(null)" main: group = "(null)" main: usercollide = no main: lower_user = "no" main: lower_pass = "no" main: nospace_user = "no" main: nospace_pass = "no" main: checkrad = "/usr/local/sbin/checkrad" main: proxy_requests = yes proxy: retry_delay = 5 proxy: retry_count = 3 proxy: synchronous = no proxy: default_fallback = yes proxy: dead_time = 120 proxy: post_proxy_authorize = yes proxy: wake_all_if_all_dead = no security: max_attributes = 200 security: reject_delay = 1 security: status_server = no

blogspot.com//mini-how-to-freeradi

37/54

29-04-2011
main: debug_level = 0

Debianitas frikis: Mini HOW-TO Freeradi

read_config_files: reading dictionary read_config_files: reading naslist Using deprecated naslist file. Support for this will go away soon. read_config_files: reading clients read_config_files: reading realms radiusd: entering modules setup Module: Library search path is /usr/local/lib Module: Loaded exec exec: wait = yes exec: program = "(null)" exec: input_pairs = "request" exec: output_pairs = "(null)" exec: packet_type = "(null)" rlm_exec: Wait=yes but no output defined. Did you mean output=none? Module: Instantiated exec (exec) Module: Loaded expr Module: Instantiated expr (expr) Module: Loaded eap eap: default_eap_type = "peap" eap: timer_expire = 60 eap: ignore_unknown_eap_types = no eap: cisco_accounting_username_bug = no tls: rsa_key_exchange = no tls: dh_key_exchange = yes tls: rsa_key_length = 512 tls: dh_key_length = 512 tls: verify_depth = 0 tls: C A_path = "(null)"

blogspot.com//mini-how-to-freeradi

38/54

29-04-2011
tls: pem_file_type = yes

Debianitas frikis: Mini HOW-TO Freeradi

tls: private_key_file = "/usr/local/etc/raddb/certs/cert-srv.pem" tls: certificate_file = "/usr/local/etc/raddb/certs/cert-srv.pem" tls: C A_file = "/usr/local/etc/raddb/certs/demoC A/cacert.pem" tls: private_key_password = "radiusUDP" tls: dh_file = "/usr/local/etc/raddb/certs/dh" tls: random_file = "/usr/local/etc/raddb/certs/random" tls: fragment_size = 1024 tls: include_length = yes tls: check_crl = no tls: check_cert_cn = "(null)" tls: cipher_list = "(null)" tls: check_cert_issuer = "(null)" rlm_eap_tls: Loading the certificate file as a chain rlm_eap: Loaded and initialized type tls peap: default_eap_type = "mschapv2" peap: copy_request_to_tunnel = no peap: use_tunneled_reply = no peap: proxy_tunneled_request_as_eap = yes rlm_eap: Loaded and initialized type peap mschapv2: with_ntdomain_hack = no rlm_eap: Loaded and initialized type mschapv2 Module: Instantiated eap (eap) Module: Loaded preprocess preprocess: huntgroups = "/usr/local/etc/raddb/huntgroups" preprocess: hints = "/usr/local/etc/raddb/hints" preprocess: with_ascend_hack = no preprocess: ascend_channels_per_line = 23 preprocess: with_ntdomain_hack = no

blogspot.com//mini-how-to-freeradi

39/54

29-04-2011

Debianitas frikis: Mini HOW-TO Freeradi


preprocess: with_specialix_jetstream_hack = no preprocess: with_cisco_vsa_hack = no preprocess: with_alvarion_vsa_hack = no Module: Instantiated preprocess (preprocess) Module: Loaded SQL sql: driver = "rlm_sql_mysql" sql: server = "localhost" sql: port = "" sql: login = "radius" sql: password = "radius" sql: radius_db = "radius" sql: nas_table = "nas" sql: sqltrace = no sql: sqltracefile = "/usr/local/var/log/radius/sqltrace.sql" sql: readclients = no sql: deletestalesessions = yes sql: num_sql_socks = 5 sql: sql_user_name = "%{User-Name}" sql: default_user_profile = "" sql: query_on_not_found = no . . . sql: safe-characters = "@abcdefghijklmnopqrstuvwxyzABC DEFGHIJKLMNOPQRSTUVWX YZ0123456789.-_: /" rlm_sql (sql): Driver rlm_sql_mysql (module rlm_sql_mysql) loaded and linked rlm_sql (sql): Attempting to connect to radius@localhost:/radius rlm_sql (sql): starting 0

blogspot.com//mini-how-to-freeradi

40/54

29-04-2011

Debianitas frikis: Mini HOW-TO Freeradi


rlm_sql (sql): Attempting to connect rlm_sql_mysql #0 rlm_sql_mysql: Starting connect to MySQL server for #0 rlm_sql (sql): C onnected new DB handle, #0 rlm_sql (sql): starting 1 rlm_sql (sql): Attempting to connect rlm_sql_mysql #1 rlm_sql_mysql: Starting connect to MySQL server for #1 rlm_sql (sql): C onnected new DB handle, #1 rlm_sql (sql): starting 2 rlm_sql (sql): Attempting to connect rlm_sql_mysql #2 rlm_sql_mysql: Starting connect to MySQL server for #2 rlm_sql (sql): C onnected new DB handle, #2 rlm_sql (sql): starting 3 rlm_sql (sql): Attempting to connect rlm_sql_mysql #3 rlm_sql_mysql: Starting connect to MySQL server for #3 rlm_sql (sql): C onnected new DB handle, #3 rlm_sql (sql): starting 4 rlm_sql (sql): Attempting to connect rlm_sql_mysql #4 rlm_sql_mysql: Starting connect to MySQL server for #4 rlm_sql (sql): C onnected new DB handle, #4 Module: Instantiated sql (sql) Module: Loaded Acct-Unique-Session-Id acct_unique: key = "User-Name, Acct-Session-Id, NAS-IPAddress, C lient-IP-Address, NAS-Port" Module: Instantiated acct_unique (acct_unique) Module: Loaded realm realm: format = "suffix" realm: delimiter = "@" realm: ignore_default = no realm: ignore_null = no Module: Instantiated realm (suffix)

blogspot.com//mini-how-to-freeradi

41/54

29-04-2011
Module: Loaded detail

Debianitas frikis: Mini HOW-TO Freeradi

detail: detailfile = "/usr/local/var/log/radius/radacct/%{C lientIP-Address}/detail-%Y%m%d" detail: detailperm = 384 detail: dirperm = 493 detail: locking = no Module: Instantiated detail (detail) Module: Loaded radutmp radutmp: filename = "/usr/local/var/log/radius/radutmp" radutmp: username = "%{User-Name}" radutmp: case_sensitive = yes radutmp: check_with_nas = yes radutmp: perm = 384 radutmp: callerid = yes Module: Instantiated radutmp (radutmp) Listening on authentication *:1812 Listening on accounting *:1813 Ready to process requests.

Y ya tenemos nuestro servidor configurado con EAP/PEAP!!!

Durante este proceso de configuraci n experimentamos un par de problemas:

Al inicializar el servidor, nos indicaba lo siguiente:

rlm_eap_tls: Loading the certificate file as a chain rlm_eap: SSL error error:0906D06C :PEM routines:PEM_read_bio:no start line rlm_eap_tls: Error reading private key file

blogspot.com//mini-how-to-freeradi

42/54

29-04-2011

Debianitas frikis: Mini HOW-TO Freeradi


rlm_eap: Failed to initialize type tls radiusd.conf[1]: eap: Module instantiation failed. radiusd.conf[398] Unknown module "eap". radiusd.conf[381] Failed to parse authenticate section.

La causa de este problema fue que por un error al tipear el PASSWORD con que se crearon los certificados y el password configurado para ellos en eap.conf no coincid an. Utilizando los mismos password este problema desapareci .

Otro error que cometimos en un principio fue el configurar freeradius como proxy pensando en dar acceso hacia internet. Esto fue un error de concepto, ya que cuando un servidor RADIUS acta como proxy, su funci n es exclusivamente el redireccionar determinados paquetes del protocolo RADIUS hacia otros servidores RADIUS, y NO es un proxy http. Esta configuraci n de proxy permite tener diferentes servidores RADIUS, cada uno se encarguandose de funciones espec ficas como accounting, authentication, etc.

2.4. Definici n de grupos y usuarios de prueba

Para probar nuestro servidor crearemos 3 grupos de usuarios y 3 usuarios de prueba. Los grupos de usuarios los llamaremos dromero, profesores y alumnos, y le asignaremos las VLANs 2, 3 y 4 respectivamente para as aislar el trfico de cada grupo como si estuvieran en redes f sicas individuales. Para insertar estos grupos y usuarios a MySQL puedes referirte a la secci n 1.2 de este tutorial. Las propiedades para los grupos y usuarios quedaran de la siguiente manera:

Grupo admin

Auth-Type := EAP Framed-Protocol := PPP Service-Type := Framed-user Framed-C ompression := Van-Jacobsen-TC P-IP Tunnel-Medium-Type := 6

blogspot.com//mini-how-to-freeradi

43/54

29-04-2011
Tunnel-Type := 13 Tunnel-Private-Group-Id := 2

Debianitas frikis: Mini HOW-TO Freeradi

Grupo profesores

Auth-Type := EAP Framed-Protocol := PPP Service-Type := Framed-user Framed-C ompression := Van-Jacobsen-TC P-IP Tunnel-Medium-Type := 6 Tunnel-Type := 13 Tunnel-Private-Group-Id := 3

Grupo alumnos

Auth-Type := EAP Framed-Protocol := PPP Service-Type := Framed-user Framed-C ompression := Van-Jacobsen-TC P-IP Tunnel-Medium-Type := 6 Tunnel-Type := 13 Tunnel-Private-Group-Id := 4

Tunnel-Type se refiere al protocolo que se utilizar para los tneles. 'Framed-IP-Address'Tunnel-Medium-Type se refiere al medio de transporte utilizado para los tneles.

Tunnel-Private-Group-Id se refiere al identificador del tnel a

blogspot.com//mini-how-to-freeradi

44/54

29-04-2011
utilizar (VLAN tag).

Debianitas frikis: Mini HOW-TO Freeradi

Informaci n detallada acerca de los atributos de los tneles puede ser encontrada en RFC 2868.

Usuario dromero perteneciente al grupo admin

Password := hola

Usuario profesor01 perteneciente al grupo profesores

Password := siempreflojo

Usuario alumno01 perteneciente al grupo alumnos

Password := copypaste

En el primer capitulo de este tutorial creamos un usuario que ten a en el atributo Framed-IP-Address una IP especificada. Al utilizar EAP/PEAP estas IP no son utilizadas y esta funci n debe seguir siendo realizada por un DHC P. El atributo Framed-IPAddress fue creado para trabajar principalmente con usuarios Dial-up como por ejemplo conexiones xDSL.

Ahora que nuestro servidor esta ejecutndose y que tenemos ingresados los grupos y usuarios que usaremos estamos listos para conectarnos a travs de nuestro NAS. 2.5. C onfiguraci n del suplicante en Windows XP SP2

El primer paso es instalar el certificado del servidor. Este certificado corresponde al archivo root.pem que est en la carpeta raddb/certs de nuestro servidor. Deberemos copiar este archivo a cada PC con el que queramos conectarnos a la red.

Para instalarlo comenzaremos por hacer doble click sobre l, con lo cual aparecer la siguiente ventana:

blogspot.com//mini-how-to-freeradi

45/54

29-04-2011

Debianitas frikis: Mini HOW-TO Freeradi

Luego hacemos click en Instalar C ertificado...

Seleccionamos C olocar todos los certificados en el siguiente almacn y apretamos Examinar.

Seleccionamos Entidades emisoras ra z de confianza y apretamos Aceptar

Apretamos Siguiente y despus finalizamos la instalaci n del certificado.

Ahora lo nico que falta es conectarnos!!!

Para eso iremos a ver las redes inalmbricas que estn disponibles:

En esta ventana debemos seleccionar la red a la cual nos queremos conectar. En nuestro caso esta red se llama RadiusLab y como se puede apreciar en la imgen posee seguridad WPA.

Para ir a configurar esta red debemos hacer click en C ambiar configuraci n avanzada.

blogspot.com//mini-how-to-freeradi

46/54

29-04-2011

Debianitas frikis: Mini HOW-TO Freeradi

Luego le damos a Agregar

Indicamos el nombre de nuestra red y seleccionamos WPA para la autenticaci n y TKIP para el cifrado, ya que nuestro AP se ha configurado con ese mecanismo y no con AES.

Luego nos vamos a la pestaa de Autenticaci n

Seleccionamos EAP protegido PEAP y luego nos vamos Propiedades

Aqu debemos dejar marcadas las opciones tal cual como se indica en la imgen y en la lista de Entidades emisoras de certificados ra z de confianza debemos buscar y seleccionar el certificado de nuestro servidor que instalamos anteriormente. Si este no aparece, significa que no se instal correctamente o que no lo instalamos en el amacn Entidades emisoras ra z de confianza como se ha especificado en este tutorial. De se este el caso debemor tratar de reinstalarlo, ya que sin l NO podremos ingresar a la red.

Luego debemos ir a C onfigurar y en la ventana que aparecer dejar todo desmarcado.

Luego aceptamos todo una y otra vez hasta salir de la configuraci n de la red y volver al listado de conexiones de redes inalmbricas. Seleccionamos nuestra red y apretamos C onectar

blogspot.com//mini-how-to-freeradi

47/54

29-04-2011

Debianitas frikis: Mini HOW-TO Freeradi

El suplicante proceder a conectarse y nos desplegar una ventana en donde deberemos ingresar nuestro nombre de usuario y password.

Ingresamos la informaci n del usuario y luego apretamos Aceptar. Si todo va bien lograremos autenticarnos logrando acceder a la red.

De ocurrir algn problema, se no sindicar en la esquina superior derecha, en el lugar en donde en la foto aparece C onectado.

Si no hemos instalado el certificado del servidor o este no es invlido la autenticaci n fallar y se nos bloquear el acceso a la red.

Al autenticarnos con este usuario en nuestro servidor veremos el siguiente log:

rad_recv: Access-Request packet from host 192.168.100.185:1372, id=0, length=202 Message-Authenticator = 0x7fc3ea093d12cda33ad83cd169ed5bca Service-Type = Framed-User User-Name = "dromero" Framed-MTU = 1488 C alled-Station-Id = "00-18-6E-18-62-00:RadiusLab" C alling-Station-Id = "00-0E-6A-9B-86-20"

blogspot.com//mini-how-to-freeradi

48/54

29-04-2011

Debianitas frikis: Mini HOW-TO Freeradi


NAS-Identifier = "3C om Access Point 7760" NAS-Port-Type = Wireless-802.11 C onnect-Info = "C ONNEC T 54Mbps 802.11g" EAP-Message = 0x0200000c0164726f6d65726f NAS-IP-Address = 192.168.100.185 NAS-Port = 3 NAS-Port-Id = "STA port # 3" Processing the authorize section of radiusd.conf . . *muchos mensajes* . modcall[post-auth]: module "sql" returns ok for request 16 modcall: leaving group post-auth (returns ok) for request 16 Sending Access-Accept of id 8 to 192.168.100.185 port 1372 Framed-Protocol := PPP Service-Type := Framed-User Framed-C ompression := Van-Jacobson-TC P-IP Tunnel-Type:0 := VLAN Tunnel-Medium-Type:0 := IEEE-802 Tunnel-Private-Group-Id:0 := "2" MS-MPPE-Recv-Key = 0x7cfe3b6a3288cd2317c91bb8e3e79785d08506aba199e9bf1a58 253886bbd074 MS-MPPE-Send-Key = 0x98944f7295b2e93fe8a843bd9a73251a32b37918f3d9d0828eb5 a693d92f48ef EAP-Message = 0x03080004 Message-Authenticator = 0x00000000000000000000000000000000 User-Name = "dromero" Finished request 16 Going to the next request

blogspot.com//mini-how-to-freeradi

49/54

29-04-2011
Waking up in 5 seconds...

Debianitas frikis: Mini HOW-TO Freeradi

En donde entre otras cosas podemos ver que la respuesta final fue un Access.Accept y que el usuario est dentro de la VLAN 2 (Tunnel-Private-Group-Id:0 := "2").

Si ingresamos con el usuario profesor01 y alumno01 veremos lo siguiente:

rad_recv: Access-Request packet from host 192.168.100.185:1391, id=36, length=208 Message-Authenticator = 0x2e69d9b0d8c5a078c157f7e3f554e707 Service-Type = Framed-User User-Name = "profesor01" Framed-MTU = 1488 C alled-Station-Id = "00-18-6E-18-62-00:RadiusLab" C alling-Station-Id = "00-0E-6A-9B-86-20" NAS-Identifier = "3C om Access Point 7760" NAS-Port-Type = Wireless-802.11 C onnect-Info = "C ONNEC T 54Mbps 802.11g" EAP-Message = 0x0224000f0170726f6665736f723031 NAS-IP-Address = 192.168.100.185 NAS-Port = 3 NAS-Port-Id = "STA port # 3" . . . Sending Access-Accept of id 44 to 192.168.100.185 port 1391 Framed-IP-Address := 192.168.100.211 Framed-IP-Netmask := 255.255.255.0

blogspot.com//mini-how-to-freeradi

50/54

29-04-2011
Framed-Protocol := PPP Service-Type := Framed-User

Debianitas frikis: Mini HOW-TO Freeradi

Framed-C ompression := Van-Jacobson-TC P-IP Tunnel-Medium-Type:0 := IEEE-802 Tunnel-Type:0 := VLAN Tunnel-Private-Group-Id:0 := "3 MS-MPPE-Recv-Key = 0x1714c6bb40821fd973e97f7bbfa7a05110206fb083138414a453f b4c08ab3b56 MS-MPPE-Send-Key = 0x6d7baa66c5cea48be8998e1bf9b04a46ae59905700e923b6f9a1 462da7ce3b22 EAP-Message = 0x032c0004 Message-Authenticator = 0x00000000000000000000000000000000 User-Name = "profesor01" Finished request 8 Going to the next request

--------------------------------------------------------------------------------------------------------------

rad_recv: Access-Request packet from host 192.168.100.185:1030, id=18, length=204 Message-Authenticator = 0x286de06d779a4fb34c5f0992036c45c1 Service-Type = Framed-User User-Name = "alumno01" Framed-MTU = 1488 C alled-Station-Id = "00-18-6E-18-62-00:RadiusLab" C alling-Station-Id = "00-0E-6A-9B-86-20" NAS-Identifier = "3C om Access Point 7760" NAS-Port-Type = Wireless-802.11

blogspot.com//mini-how-to-freeradi

51/54

29-04-2011

Debianitas frikis: Mini HOW-TO Freeradi


C onnect-Info = "C ONNEC T 54Mbps 802.11g" EAP-Message = 0x0212000d01616c756d6e6f3031 NAS-IP-Address = 192.168.100.185 NAS-Port = 1 NAS-Port-Id = "STA port # 1" . . . Sending Access-Accept of id 26 to 192.168.100.185 port 1030 Framed-IP-Address := 192.168.100.212 Framed-IP-Netmask := 255.255.255.0 Framed-Protocol := PPP Service-Type := Framed-User Framed-C ompression := Van-Jacobson-TC P-IP Tunnel-Medium-Type:0 := IEEE-802 Tunnel-Type:0 := VLAN Tunnel-Private-Group-Id:0 := "4 MS-MPPE-Recv-Key = 0xe0149d60e451a3b6b9f7e9806f66786ae8a8ee42b26136dc8bb6 1107b6a93dce MS-MPPE-Send-Key = 0xca9ca668a8580fa06b0ccf3a7c38798d3d7be0b247ae4d5f165dbf 7ce5f4d8ba EAP-Message = 0x031a0004 Message-Authenticator = 0x00000000000000000000000000000000 User-Name = "alumno01" Finished request 8 Going to the next request

Si la autenticaci n falla en vez de una Access-Accept veremos:

blogspot.com//mini-how-to-freeradi

52/54

29-04-2011

Debianitas frikis: Mini HOW-TO Freeradi


rad_recv: Access-Request packet from host 192.168.100.185:1367, id=7, length=246 Sending Access-Reject of id 7 to 192.168.100.185 port 1367 EAP-Message = 0x04070004 Message-Authenticator = 0x00000000000000000000000000000000 --- Walking the entire request list ---

Si hemos logrado ingresar a la red significa que nuestro servidor y suplicante estan bien configurados y que nuestra red se encuentra protegida con 802.1x. Luego podremos definir ms grupos y usuarios segn vayan siendo los requerimeintos de la red.

C on esto hemos conclu do nuestro tutorial, dejando en funcionamiento una red inalambrica protegida con 802.1x (en particular EAP/PEAP) que brinda acceso a una red f sica dentro de nuestra organizaci n.

3. Referencias

1. FREERADIUS WIKI (http://wiki.freeradius.org/index.php/FAQ)

2. Authentication Server: Setting up FreeRADIUS (http://www.tldp.org/HOWTO/8021X-HOWTO/freeradius.html)

3. The Freeradius-Users Archives (https://list.xs4all.nl/pipermail/freeradius-users) mar jul 15, 04:41:00 AM C EST

the root dijo...


Me alegro de que te haya funcionado. La verdad es que a mi me funcion de la manera que lo tengo explicado, pero como se suele decir lo que a mi me ha funcionado no tiene porque funcionarle a los dems. Bueno ahora a disfrutar de tu red inlambrica segura. Saludos. mar jul 15, 07:49:00 AM C EST Publicar un comentario en la entrada

blogspot.com//mini-how-to-freeradi

53/54

29-04-2011
Publicar un comentario en la entrada Entrada ms reciente

Debianitas frikis: Mini HOW-TO Freeradi

Pgina principal

Entrada antigua

Suscribirse a: Enviar comentarios (Atom)

blogspot.com//mini-how-to-freeradi

54/54

También podría gustarte