domingo, 15 de noviembre de 2015

INSTALAR UN SERVIDOR RADIUS EN RASPBERRY PI 2

En el anterior tutorial vimos como configurar un punto de acceso en nuestra Raspberry. Lo complementaremos hoy añadiendo un servidor "Radius" para implementar un poco mas de seguridad en la red doméstica.
"RADIUS" (Remote Authentication Dial-In User Server") es un protocolo AAA (Autenticación, Autorización y  registro de Auditoria) empleado  para controlar el acceso a los servicios de red. Nosotros lo utilizaremos para nuestro punto de acceso "Wifi", reemplazando a los famosos e inseguros métodos de clave compartida. 
El dispositivo cuando se intenta conectar a cualquier punto de acceso, enviará un nombre y una contraseña al cliente del servicio (NAS), que será la propia "AP". Este consultará las credenciales en el servidor "Radius", el cual, utilizando esquemas de autenticación como PAP, CHAP o EAP,  autorizará o denegará el acceso.

Para implementar este servicio, utilizaremos el programa "FreeRadius" y lo integraremos en una base de datos "MySQL". Instalaremos también el programa "DaloRadius", que nos facilitará la administración de nuestro servidor "Radius" via "Browser".

Primero instalaremos los paquetes para "FreeRadius" y su módulo para "MySQL":

$ sudo apt-get install freeradius freeradius-mysql freeradius-utils

Posteriormente, instalaremos las dependencias necesarias para "FreeRadius", entre ellas el servidor "MySQL" y "apache2":

$ sudo apt-get install apache2 php5 php5-gd php-pear php-db libapache2-mod-php5 php-mail php5-mysql mysql-server

Por último, descargaremos "DaloRadius" desde su código fuente:

$ sudo wget http://sourceforge.net/projects/daloradius/files/daloradius/daloradius0.9-9/daloradius-0.9-9.tar.gz

Descomprimiremos el archivo:

$ sudo tar xzf daloradius-0.9-9.tar.gz 

Moveremos el contenido y añadiremos un directorio nuevo llamado "daloradius" dentro del directorio raíz web de "Apache":

$ sudo mv -f daloradius-0.9-9 /var/www/daloradius/

Crearemos ahora la base de datos en "MySQL" con los esquemas pertinentes:

$ mysqladmin -u root -p create radius
$ cd /var/www/daloradius/contrib/db
$ mysql -u root -p radius < fr2-mysql-daloradius-and-freeradius.sql

Añadiremos el usuario "radius" y le otorgamos los permisos oportunos en "MySQL" para que "Freeradius" pueda administrar la base de datos que acabamos de crear:

$ mysql -u root -p

>GRANT ALL ON radius.* TO radius@localhost IDENTIFIED BY 'radpass';
>quit

Una vez configurada la base de datos, pasaremos a modificar los archivos pertinentes en "FreeRadius".

Abrimos el archivo principal "/etc/freeradius/radiusd.conf" y descomentamos la siguiente línea para habilitar el archivo de configuración "sql.conf":

$INCLUDE sql.conf

Editaremos ahora el archivo "/etc/freeradius/sql.conf" y modificamos estos parámetros:

server = "localhost"
login = "radius"
password = "radpass"
readclients = yes

Posteriormente, ediatremos el archivo "default" y "inner-tunnel", habilitando las opciones "sql" para que "Freeradius" pueda conectar con la base de datos.

$ sudo nano /etc/freeradius/sites-enabled/default

En los apartados "authorize", "accouting" y "post-auth" descomentamos las líneas "sql".

$ sudo nano /etc/freeradius/sites-enabled/inner-tunnel

También descomentamos en este archivo la opción "sql" en la sección "authorize".

Nos queda permitir que "DaloRadius" pueda también acceder a la base de datos con el usuario "radius", por lo que editamos el archivo " /var/www/daloradius/library/daloradius.conf.php":

$configValues['CONFIG_DB_USER'] = 'radius';
$configValues['CONFIG_DB_PASS'] = 'radpass';

Reiniciamos "FreeRadius" y "Apache2" para que nuestra configuración surta efecto:

$ sudo /etc/init.d/freeradius restart
$ sudo /etc/init.d/apache2 restart


Ahora haremos un "test" para confirmar que todos los programas funcionan correctamente.
Abrimos nuestro navegador e introducimos:

http://ip_o_nombre_Raspberry/daloradius

Introducimos las credenciales por defecto que son "administrator/radius":
















Vamos a "management > new user" y creamos el usuario "prueba" con password "prueba".















Testearemos la conexión en el t:

$ radtest prueba prueba 127.0.0.1 1581 testing123

Si nos devuelve el mensaje "Access-Accept" es que es la conexión es correcta.

Ya solo nos falta configurar el cliente "NAS", que en nuestro caso es el punto de acceso "Wifi".

Abriremos el archivo de configuración "/etc/hostapd/hostapd.conf" y modificaremos o añadiremos estos parámetros:


interface=wlan0

driver=rtl871xdrv
country_code=ES

logger_syslog=-1
logger_syslog_level=2
logger_stdout=-1
logger_stdout_level=2

dump_file=/tmp/hostapd.dump
ctrl_interface=/var/run/hostapd

ssid=castillo_movil
macaddr_acl=0
hw_mode=g
channel=11

wme_enabled=1 # Habilitta el modo n
ieee80211n=1 # Requerire autorización IEEE 802.1X

auth_algs=3

ieee8021x=1 # Ip de nuestra interfaz
eapol_version=2 # Version EAP
eap_message="bienvenidos al castillo" # Mensaje de bienvenida
eapol_key_index_workaround=1

wpa=3 # Tipo de WPA 
wpa_key_mgmt=WPA-EAP # Controla  los algoritmos de gestión de claves del #cliente. 
wpa_pairwise=TKIP # Controla el cifrado de datos WPA
wpa_group_rekey=600 # Intervalo de tiempo para  el cambio de claves GTK en segundos
wpa_gmk_rekey=86400 # Intervalo de tiempo para  el cambio de claves GMK en segundos
rsn_pairwise=CCMP
eap_server=0 # Es necesario si nuestro hostapd está configurado para actuar #como un servidor RADIUS

own_ip_addr=192.168.0.102 # La dirección IP del punto de acceso
nas_identifier=castilloAP # Identificador de nuestro NAS

auth_server_addr=192.168.0.102 # Ip del servidor RADIUS para la #autentificación
auth_server_port=1812 # Puerto de comunicación de RADIUS
auth_server_shared_secret=clave # Clave compartida entre NAS y RADIUS

acct_server_addr=192.168.0.102 # Ip del servidor RADIUS para la #cuentas de usuario
acct_server_port=1813 # Puerto de comunicación de RADIUS
acct_server_shared_secret=clave # Clave compartida entre NAS y RADIUS

En este archivo podemos observar que está configurado de forma que nuestro servidor "Radius" corresponde en ip con que nuestro "NAS", ya que La Raspberry va a desempeñar esos dos roles.


A continuación reiniciaremos "hostapd":

$ sudo /etc/init.d/hostapd restart

Añadiremos ahora nuestra "AP" como cliente "NAS". Accederemos via "web" a "Daloradius" y vamos a "management>nas>new nas".














Solo nos queda conectarnos a la "AP" introduciendo nuestras credenciales de prueba de manera automática desde un pc Windows 8/10, un móvil "Android", o un mac...
Si tenemos un pc con Windows 7 o anterior, deberemos configurar nuestra conexión de red de la siguiente forma:
































Podremos observar en el archivo de registro "syslog" de nuestra Raspberry que nos hemos auntentificado correctamente.


 




Ya tendremos por tanto nuestro servidor "RADIUS" activo. Con la amigable interface web "DaloRadius" podremos configurar y administrar todos los párametros relativos al servidor como control de usuarios, grupos, visualizar logs, vigencia de las cuentas, monitorizar el tráfico,... y muchas opciones más.

Hasta una nueva entrada...

13 comentarios:

  1. Gracias por el enlace, se ve muy interesante y espero que me sea útil más adelante, aunque mi punto era principalmente agregar atributos al usuario en la interfaz de daloradius, (reconozco que este comentario debería hacerlo en el siguiente tutorial pero lo pongo aquí para mantener el contexto). En la parte de "new user - quick add" se pueden configurar unos atributos, los que me parecen más interesantes, tales como simultaneous use, expiration y otro que se llama "max-all-session", a ese último parámetro le pongo un límite de 120 segundos y ahí se daña todo. Al hacer una prueba de conexión recibo un mensaje de "access reject" y en la información del atributo dice que debo tener en cuenta que es interno del servidor radius, que debo configurarlo en "radiusd.conf" pero las modificaciones que le he hecho no me dan ningún resultado :'(.

    La documentación que he encontrado es muy poca y no me ha servido aún, esperaba que tuvieras más experiencia y tal vez me dieras un consejo de qué hacer para que esos atributos sean funcionales.

    ResponderEliminar
  2. Gracias por el tutorial, me ha funcionado a la perfeccion pero en mi caso usé un router tp-link como NAS. Ya los usuarios se conectan con las credenciales creadas en la interfaz web pero al momento de revisar la reportería no me aparece absolutamente nada. He estado revisado y al parecer freeradius no esta escribiendo en la tabla radacct. Espero me puedas ayudar. Saludos

    ResponderEliminar
    Respuestas
    1. Tal como me dices es muy posible que tu nas no este enviando esa información al servidor Freeradius. Se que en algunos modelos de routers o ap no los envían porque lo tienen capado. La única solución en este caso es cambiar la distro de este.
      De todas formas debes ver en el log de freeradius si te manda dicha información para poder profundizar en el problema....

      Eliminar
    2. El modelo del router es TP-Link Archer C7, revisando el log de freeradius encuentro lo siguiente:
      pi@raspberrypi /var/log/freeradius $ tail -f radius.log
      Sun May 22 11:47:12 2016 : Info: rlm_sql (sql): Connected new DB handle, #11
      Sun May 22 11:47:12 2016 : Info: rlm_sql (sql): Attempting to connect rlm_sql_mysql #10
      Sun May 22 11:47:12 2016 : Info: rlm_sql_mysql: Starting connect to MySQL server for #10
      Sun May 22 11:47:12 2016 : Info: rlm_sql (sql): Connected new DB handle, #10
      Sun May 22 11:47:12 2016 : Info: rlm_sql (sql): Attempting to connect rlm_sql_mysql #9
      Sun May 22 11:47:12 2016 : Info: rlm_sql_mysql: Starting connect to MySQL server for #9
      Sun May 22 11:47:12 2016 : Info: rlm_sql (sql): Connected new DB handle, #9
      Sun May 22 11:47:12 2016 : Info: rlm_sql (sql): Attempting to connect rlm_sql_mysql #8
      Sun May 22 11:47:12 2016 : Info: rlm_sql_mysql: Starting connect to MySQL server for #8
      Sun May 22 11:47:12 2016 : Info: rlm_sql (sql): Connected new DB handle, #8

      Gracias por tu ayuda. Viendo lo de las distros para este routerm por el momento soporta 2.4GHz por lo que se perderia la de 5GHz. Gracias por tu ayuda

      Eliminar
  3. una pregunta, al instalar el apache2 todo lo que pongo en /var/www/html me aparece como 403 Forbidden en un explorador, como puedo hacer para que radius funcione?de antemano gracias saludos

    ResponderEliminar
  4. Hola,
    perdona la tardanza pero he tenido mucho curro y no he podido consultar tu duda.
    Necesito saber un poco más sobre el error que te devuelve. En /etc/var/log/apache2 puedes consultar los diferentes errores que te da.

    De todas formas prueba en meter los archivos de Daloradius en una carpeta llamada con el mismo nombre en /var/www/html y reinicia el serivicio.
    Si no soluciona el problema, hazmelo saber....
    Un saludo

    ResponderEliminar
  5. Todo bien, hasta que trato de ingresar por web al radius (http://localhost/daloradius), me sale "Not Found - The requested URL /daloradius was not found on this server.", ya reinicie los servicios, reinstale incluso todo desde cero, pero sale el mismo error; como podría solucionarlo??
    Gracias.

    ResponderEliminar
  6. Si, en lugar de la interfaz web, se puede ver un error 404, abra el archivo /etc/apache2/sites-available/000-default.conf

    cambiar la línea DocumentRoot / var / www / html para DocumentRoot / var / www

    ResponderEliminar
  7. Alguien ha tenido un problema similar al mio? Pasa que cuando agrego atributos (por ejemplo agregarlo a un grupo o establecer un límite de rx/tx) a cualquier usuario, el servidor radius siempre responde con un "Access Reject". Caso contrario, si elimino dichos atributos, el servidor me vuelve a permitir el acceso con ese usuario. Ojalá alguien sepa que hice mal o que estará pasando, pues la sola autenticación no me es útil, requiero establecer atributos en los usuarios. Gracias!

    ResponderEliminar
  8. Hola, que distribucion se uso en ese tutorial ? Un saludo y gracias.

    ResponderEliminar
  9. hola muchas gracias por el aporte pero necesito conectar mi telefono android a mi intranet como lo ago?

    ResponderEliminar