domingo, 20 de junio de 2010

Autenticación Mysql con FreeRadius en GNU/Linux Centos 5.4

De vuelta por acá y esta vez le debo al Fabricio quién me animó nuevamente a publicar cosas y experiencias en software libre que hemos desarrollado y que pueden servir como aporte a quienes intenten realizar estas implementaciones probablemente como deberes o quien sabe en la empresa donde presten sus servicios.

La tarea de hoy tiene por objeto la instalación y configuración de una infraestructura que permita la autenticación de usuarios de una wlan o red wireless hacia un servidor de FreeRadius mismo que debe conectarse a una base de datos en MySql y extraer de ahí la información para autenticar, si la autenticación es correcta entonces el usuario de la wlan podrá hacer uso del internet.


La idea aquí es que el mismo server que vemos en el gráfico con FreeRadius va actuar como server de base de datos con Mysql, es decir ese server va ha brindar ambos servicios y entonces debemos:

  • Instalar y Configurar FreeRadius
  • Instalar y Configurar MySql
  • Configurar la Base de Datos e ingresar información a la misma
  • Configurar el Access Point

Asumimos que ya tenemos instalado el sistema operativo en este caso GNU/Linux 5.4 actualizado y todo lo demás, entonces para la instalación de FreeRadius lo que haremos es desde una consola lo siguiente:

Instalando y Configurando FreeRadius

# yum -y install freeradius

FreeRadius tiene sus archivos de configuración en la ruta: /etc/raddb, sin embargo con los que vamos ha trabajar son los siguientes:

→ Users .- En este archivo se puede especificar los usuarios autorizados para conectarse a la red, también se puede añadir mas usuarios, cabe mencionar que aquí se pueden configurar varios usuarios vía texto y serán usados cuando no exista autenticación con mysql por ejemplo. El cambio que realizaremos en este archivo es habilitar el usuario de prueba.

steve Auth-Type := Local, User-Password == "testing"

→ clientes.conf .- aquí especificamos los dispositivos que realizarán sus consultas al servidor Radius mediante una pequeña descripción que contiene: ip, secreto y nombre corto.

client 127.0.0.1 {
secret = testing123
shortname = localhost
nastype = other
# localhost isn't usually a NAS...
}

client 192.168.1.5 {
secret = elsecreto
shortname = router1
}

Donde la dirección 192.168.1.5 es el cliente quien puede hacer las consultas al servidor de radius, OJO: el cliente será el access point el es quien tendrá esa dirección ip.

→ eap.conf .- este archivo contiene las diferentes directivas de eap configuradas
posteriormente en radius.conf.

eap {
default_eap_type = tls
timer_expire = 60
ignore_unknown_eap_types = no
cisco_accounting_username_bug = no
md5 {
}
leap {
}
gtc {
auth_type = PAP
}
tls {
private_key_password = whatever
private_key_file = ${raddbdir}/certs/cert-srv.pem
certificate_file = ${raddbdir}/certs/cert-srv.pem
CA_file = ${raddbdir}/certs/demoCA/cacert.pem
dh_file = ${raddbdir}/certs/dh
random_file = ${raddbdir}/certs/random
fragment_size = 1024
include_length = yes
}

→ sql.conf .- en este archivo vamos a realizar las diferentes configuraciones para la respectiva comunicación entre la base de datos de mysql y el servidor de freeRadius, la parte mas importante del archivo para sql es la siguiente:

sql {
driver = "rlm_sql_mysql"
server = "localhost"
login = "root"
password = "ibmlnx"
# Database table configuration
radius_db = "radius"
acct_table1 = "radacct"
acct_table2 = "radacct"
postauth_table = "radpostauth"
authcheck_table = "radcheck"
authreply_table = "radreply"

Como podemos fijarnos hasta este momento, este es el archivo mas importante ya que es aquí donde especificamos los parámetros necesarios para indicarle al freeradius con cual base de datos de mysql debe autenticar y esos parámetros son:
server = "localhost" ( si tuviéramos por separado la base de datos de freeradius en esta directiva deberíamos especificar la ip o el nombre de la máquina o server de base de datos )
login = "root" (hacemos referencia al usuario que estamos usando para la conexión con la base de datos)
password = "ibmlnx" ( es la clave del usuario root de la base de datos, no tiene nada que ver con el root del sistema operativo)
radius_db = "radius" ( es la base de datos donde residiran los usuarios quienes deseen autenticarse)

Instalando y Configurando MySql

# yum -y install mysql mysql-server freeradius-mysql

Una vez instalada la base de datos lo que tenemos que hacer es ingresar a ella y luego crear las bases de datos e ingresar información para los usuarios que vamos a autenticar.

Creando la base de datos:

# mysql -u root -p
mysql> create database radius;
mysql> exit;


Creando las Tablas dentro de la base de datos “Radius”, en esta parte cabe mencionar que dentro de la instalación de freeRadius este viene con un script
de creación de las tablas para mysql u oracle, de acuerdo a nuestro caso vamos a usar el script para la creación de las tablas en mysql.

# cd /usr/share/doc/freeradius-1.3.3/examples/
# mysql -uroot -proot radius <> use radius
mysql-> insert into radgroupcheck values ('', 'admin', 'Auth-Type', ':=', 'Local');
mysql-> insert into usergroup values ('joseluis', 'admin','');
mysql-> insert into radcheck values ('', 'joseluis', 'Password', '==', 'abc123');
mysql-> insert into usergroup values ('jorge', 'admin','');
mysql-> insert into radcheck values ('', 'jorge', 'Password', '==', '123abc');
mysql-> exit;

Comprobando lo hecho:



Configurar el Access Point

Ahora lo que tenemos que hacer es configurar nuestro access point, indicándole que la autenticación debe ser 802.1x es decir que apunte a la dirección ip de nuestro servidor con freeradius con mysql para que sepa que de ahí debe tomar los usuarios que tienen que ser autenticados, en este caso pondré un par de imágenes donde detallo la configuración.


Configurando la dirección ip del Access Point




Activando la configuración 802.1x e indicando la dirección ip del servidor FreeRadius.



Como podemos ver, le estamos indicando que la dirección ip del servidor freeradius es 192.168.11.100

Configurando el SSID y el Tipo de Encryptación.



Configurando el SSID



En resumen:

Todo cliente wlan o wireless que desee navegar al internet primero deberá ser autenticado, para ello el deberá configurar sus credenciales como una red WPA - LEAP y con SSID = RadiusTest (como vemos en el gráfico), el Access Point que tiene la ip 192.168.1.5 este realizará solicitará la autenticación al servidor FreeRadius con dirección 192.168.11.100, este a su vez hará la consulta sql a la base de tados que está en Mysql y si el usuario existe lo autenticará y en lo posterior podrá salir al internet.

Bueno espero que les sirva este manual, si tienen alguna consulta no duden en comentar.

Saludos,




4 comentarios:

  1. Que tal master antes que nada gracias por el aporte pero me he encontrado un problema en la configuracion, cuando meto el siguiente comando me aparece la siguiente leyenda, me podrias ayudar por favor:

    [root@SRVPL-32 examples]# mysql -uroot -p radius<mysql.sql
    Enter password:
    ERROR 1050 (42S01) at line 15: Table 'radacct' already exists

    ResponderBorrar
  2. Nuevamente por aqui caballero con la novedad que ya pude entrar al a base de datos, pero cuando quiero levantar el servicio rediusd start.

    me dice que ha fallado te agrego la leyenda gracias.

    [root@SRVPL-32 raddb]# service radiusd start
    Inicio del servidor RADIUS:Fri Mar 30 19:54:29 2012 : Info: Starting - reading configuration files ...
    [FALLÓ]

    ResponderBorrar
  3. que tal amigo... excelente post me ayuda aunque no he tenido tiempo de probarlo... yo tengo una duda... que hace exactamente el eap.conf? y si modifico algo me modifica en algo el resto de clientes que tengo? el problema es q tambien tengo como cliente un portal captivo... y varios access point.. con el portal captivo funciona bien pero con los ap no...

    ResponderBorrar
  4. Muchas gracias, me ha servido de mucho este tutorial. Pero me he dado cuenta que puedo tener acceso a Internet a través de mas de una pc (con Windows 7) haciendo uso del mismo usuario y password creado en la tabla radcheck. Hay alguna forma de evitar esto ?...
    Espero haberme dejado entender muchas gracias.

    ResponderBorrar