Si necesitas implementar un servidor RADIUS para gestionar la autenticación y autorización en tu red, FreeRADIUS junto con daloRADIUS es una excelente opción. En este tutorial, aprenderás a instalar y configurar FreeRADIUS con daloRADIUS en Ubuntu 24.04 de manera detallada.
FreeRADIUS es un servidor de autenticación, autorización y contabilidad (AAA) de código abierto que implementa el protocolo RADIUS (Remote Authentication Dial-In User Service). Es ampliamente utilizado para administrar el acceso a redes, proporcionando autenticación segura y gestión de usuarios en diferentes entornos, como Wi-Fi, VPNs, y redes empresariales.
Características principales de FreeRADIUS:
- Autenticación: Soporta múltiples métodos de autenticación, incluyendo contraseñas, certificados, LDAP, Active Directory, SQL y EAP (como PEAP, TTLS y TLS).
- Autorización: Permite controlar los permisos de acceso de los usuarios según políticas configuradas.
- Contabilidad: Registra información sobre el uso de la red, como duración de sesiones, consumo de datos, etc.
- Extensibilidad: Compatible con módulos y bases de datos externas como MySQL, PostgreSQL y Redis.
- Alto rendimiento: Puede manejar miles de solicitudes simultáneamente con un bajo consumo de recursos.
Es ampliamente utilizado en empresas, universidades y proveedores de servicios de Internet (ISPs) para gestionar accesos de usuarios a redes seguras.
daloRADIUS es una interfaz web de código abierto para administrar FreeRADIUS, diseñada para facilitar la gestión de usuarios, autenticación y contabilidad en redes que usan el protocolo RADIUS.
🔹 Características principales de daloRADIUS
- Interfaz gráfica web (basada en PHP y MySQL) para administrar FreeRADIUS de forma intuitiva.
- Gestión de usuarios: Crear, editar y eliminar cuentas de usuario fácilmente.
- Control de grupos: Permite organizar usuarios en grupos con diferentes niveles de acceso y permisos.
- Monitoreo y reportes: Proporciona estadísticas sobre sesiones, uso de datos y conexiones activas.
- Soporte para múltiples bases de datos, como MySQL y PostgreSQL.
- Administración de NAS (Network Access Servers): Configuración y gestión de dispositivos que actúan como puntos de acceso.
- Página de inicio de sesión (Captive Portal): Integración con sistemas de autenticación para redes Wi-Fi públicas o privadas.
¿Para qué se usa daloRADIUS?
- Empresas y universidades que administran grandes cantidades de usuarios en redes Wi-Fi o VPN.
- Proveedores de Internet (ISPs) que necesitan gestionar accesos de clientes.
- Redes públicas con autenticación controlada (hotspots).
En resumen, daloRADIUS es una herramienta que simplifica la gestión de FreeRADIUS, haciéndolo más accesible sin necesidad de configuraciones manuales complejas.
Requisitos previos
Antes de comenzar, asegúrate de que tienes:
- Un servidor con Ubuntu 24.04.
- Acceso root o permisos sudo.
- Una base de datos MySQL o MariaDB instalada.
Actualizar el sistema
Lo primero es asegurarnos de que nuestro sistema está actualizado. Ejecuta:
sudo apt update && sudo apt upgrade -y
Configurar Apache y PHP
Instalamos los paquetes necesarios:
sudo apt install apache2
sudo apt -y install vim php libapache2-mod-php php-{gd,common,mail,mail-mime,mysql,pear,db,mbstring,xml,curl,zip}
Instalar FreeRADIUS y las dependencias
Instalamos FreeRADIUS y los paquetes necesarios:
sudo apt install freeradius freeradius-utils freeradius-common freeradius-mysql
Configurar la base de datos MySQL
Instalamos MySQL.
apt install mysql-server mysql-client
Accedemos a la base de datos.
sudo mysql -u root -p
Crearemos la base de datos y un usuario:
CREATE DATABASE radius;
CREATE USER 'user'@'localhost' IDENTIFIED BY 'password';
GRANT ALL ON radius.* TO user@localhost;
FLUSH PRIVILEGES;
QUIT
Importamos el esquema de FreeRADIUS a MySQL:
sudo su -
mysql -u root -p radius < /etc/freeradius/3.0/mods-config/sql/main/mysql/schema.sql
Comprobamos las tablas creadas.
sudo mysql -u root -p -e "use radius;show tables;"
Enter password:
+------------------+
| Tables_in_radius |
+------------------+
| nas |
| nasreload |
| radacct |
| radcheck |
| radgroupcheck |
| radgroupreply |
| radpostauth |
| radreply |
| radusergroup |
+------------------+
Configurar FreeRADIUS para usar MySQL
Creamos un enlace simbólico para el módulo SQL en/etc/freeradius/version/mods-enabled/
sudo ln -s /etc/freeradius/3.0/mods-available/sql /etc/freeradius/3.0/mods-enabled/
Configuramos el módulo SQL y cambie los parámetros de conexión de la base de datos para adaptarlos a su entorno.
sudo nano /etc/freeradius/3.0/mods-enabled/sql
Editamos el archivo SQL para que quede así:
sql {
driver = "rlm_sql_mysql"
dialect = "mysql"
# Connection info:
server = "localhost"
port = 3306
login = "user"
password = "password"
# Database table configuration for everything except Oracle
radius_db = "radius"
}
# Set to ‘yes’ to read radius clients from the database (‘nas’ table)
# Clients will ONLY be read on server startup.
read_clients = yes
# Table to keep radius client info
client_table = "nas"
Comentamos la sección de SSL de MySQL.
mysql {
# If any of the files below are set, TLS encryption is enabled
# tls {
# ca_file = "/etc/ssl/certs/my_ca.crt"
# ca_path = "/etc/ssl/certs/"
# certificate_file = "/etc/ssl/certs/private/client.crt"
# private_key_file = "/etc/ssl/certs/private/client.key"
# cipher = "DHE-RSA-AES256-SHA:AES128-SHA"
#
# tls_required = yes
# tls_check_cert = no
# tls_check_cert_cn = no
# }
# If yes, (or auto and libmysqlclient reports warnings are
# available), will retrieve and log additional warnings from
# the server if an error has occured. Defaults to 'auto'
warnings = auto
}
Cambiamos los permisos del archivo /etc/freeradius/3.0/mods-enabled/sql.
sudo chgrp -h freerad /etc/freeradius/3.0/mods-available/sql
sudo chown -R freerad:freerad /etc/freeradius/3.0/mods-enabled/sql
Reiniciamos el servicio.
sudo systemctl restart freeradius.service
Instalar daloRADIUS
Descargamos y configuramos daloRADIUS:
sudo apt -y install git
git clone https://github.com/lirantal/daloradius.git
Importamos las tablas de MySQL a Daloradius
sudo mysql -u root -p radius < daloradius/contrib/db/fr3-mariadb-freeradius.sql
sudo mysql -u root -p radius < daloradius/contrib/db/mariadb-daloradius.sql
Movemos el directorio a /var/www
sudo mv daloradius /var/www/
Luego cambiamos los permisos de la carpeta http y configure los permisos correctos para el archivo de configuración de daloradius.
cd /var/www/daloradius/app/common/includes/
sudo cp daloradius.conf.php.sample daloradius.conf.php
sudo chown www-data:www-data daloradius.conf.php
Ahora debe modificar el archivo daloradius.conf.php para ajustar la información de la base de datos MySQL. Abra daloradius.conf.php y agregue el nombre de usuario, la contraseña y el nombre de la base de datos.
sudo nano daloradius.conf.php
$configValues['CONFIG_DB_HOST'] = 'localhost';
$configValues['CONFIG_DB_PORT'] = '3306';
$configValues['CONFIG_DB_USER'] = 'user';
$configValues['CONFIG_DB_PASS'] = 'password';
$configValues['CONFIG_DB_NAME'] = 'radius';
Creamos en el directorio /var los subdirectorios, y cambiamos los permisos.
cd /var/www/daloradius/
sudo mkdir -p var/{log,backup}
sudo chown -R www-data:www-data var
Configurar servidor web Apache
Configurar puertos Apache.
Sudo tee /etc/apache2/ports.conf<<EOF
Listen 80
Listen 8000
<IfModule ssl_module>
Listen 443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>
EOF
Configurar el host virtual para los operadores.
sudo tee /etc/apache2/sites-available/operators.conf<<EOF
<VirtualHost *:8000>
ServerAdmin operators@localhost
DocumentRoot /var/www/daloradius/app/operators
<Directory /var/www/daloradius/app/operators>
Options -Indexes +FollowSymLinks
AllowOverride None
Require all granted
</Directory>
<Directory /var/www/daloradius>
Require all denied
</Directory>
ErrorLog \${APACHE_LOG_DIR}/daloradius/operators/error.log
CustomLog \${APACHE_LOG_DIR}/daloradius/operators/access.log combined
</VirtualHost>
EOF
Configurar el host virtual para los usuarios.
sudo tee /etc/apache2/sites-available/users.conf<<EOF
<VirtualHost *:80>
ServerAdmin users@localhost
DocumentRoot /var/www/daloradius/app/users
<Directory /var/www/daloradius/app/users>
Options -Indexes +FollowSymLinks
AllowOverride None
Require all granted
</Directory>
<Directory /var/www/daloradius>
Require all denied
</Directory>
ErrorLog \${APACHE_LOG_DIR}/daloradius/users/error.log
CustomLog \${APACHE_LOG_DIR}/daloradius/users/access.log combined
</VirtualHost>
EOF
Habilitar los hosts virtuales creados.
sudo a2ensite users.conf operators.conf
Crearemos los directorios faltantes.
sudo mkdir -p /var/log/apache2/daloradius/{operators,users}
Deshabilitar el host virtual predeterminado:
sudo a2dissite 000-default.conf
Para asegurarse de que todo funciona, reinicie los servicios.
sudo systemctl restart apache2 freeradius
Consultamos el estado.
systemctl status apache2 freeradius
Para ver si hay errores ejecutamos:
sudo freeradius -X
Acceder a daloRADIUS
Ahora puedes acceder a daloRADIUS desde tu navegador en:
http://tu-servidor:8000

Usuario: administrator
Contraseña: radius

Para cambiar la contraseña de administrador podemos seguir los siguientes pasos:

Importante: Después de crear los NAS hay que reiniciar el servicio de Freeradius para que se puedan autenticar los clientes.
Acceso remoto MySQL
Modificamos el archivo nano mysqld.cnf para permitir el acceso desde cualquier IP
nano /etc/mysql/mysql.conf.d/mysqld.cnf
Para que estas dos líneas queden así:
bind-address = 0.0.0.0
mysqlx-bind-address = 0.0.0.0
Modificaremos ahora el usuario para poder acceder desde cualquier IP (%) o una en concreto.
UPDATE mysql.user SET Host='%' WHERE User='nombre_usuario';
FLUSH PRIVILEGES;
Podemos ver que se ha aplicado correctametne con el comando:
SELECT user,host FROM mysql.user;
Ahora le daremos a usario todos los permisos sobre la base de datos para que pueda operar con ella.
GRANT ALL PRIVILEGES ON base_de_datos.* TO 'user'@'%';
FLUSH PRIVILEGES;
Si no nos conecta nuestra aplicación puede ser por que la version de PHP es mas antigua y no es compatible con el sistema predeteminador de autenticacion de MySQL (caching_sha2_password) y hay que cambiarla a mysql_native_password.
Error con «@»
Si Dentro de nuestros nombres de usuarios hay un «@» entonces radius detecta de que es un dominio y rechaza por se un dominio incompleto, para ello vamos a comentar las líneas que se encargan de validar esto en el archivo /etc/freeradius/3.0/policy.d/filter, quedando así:
## if (&User-Name && (&User-Name =~ /@|\\/)) {
## reject
## }
## if (&User-Name =~ /@[^@]*@/ ) {
## update request {
## &Module-Failure-Message += 'Rejected: Multiple @ in User-Name'
## }
## reject
## }
## if (&User-Name =~ /\.\./ ) {
## update request {
## &Module-Failure-Message += 'Rejected: User-Name contains multiple ..s'
## }
## reject
## }
## if ((&User-Name =~ /@/) && (&User-Name !~ /@(.+)\.(.+)$/)) {
## update request {
## &Module-Failure-Message += 'Rejected: Realm does not have at least one dot separator'
## }
## reject
## }
## if (&User-Name =~ /@\./) {
## update request {
## &Module-Failure-Message += 'Rejected: Realm begins with a dot'
## }
## reject
## }
## if (&outer.request:User-Name =~ /@([^@]+)$/) {
## update request {
## Outer-Realm-Name = "%{1}"
## }
## if (&outer.request:User-Name !~ /^(anon|@)/) {
## update request {
## Module-Failure-Message = "User-Name is not anonymized"
## }
## reject
## }
## }
## elsif (&outer.request:User-Name !~ /^anon/) {
## update request {
## Module-Failure-Message = "User-Name is not anonymized"
## }
## reject
## }
## if (&User-Name =~ /@([^@]+)$/) {
## update request {
## Inner-Realm-Name = "%{1}"
## }
## if (&Outer-Realm-Name && \
## (&Inner-Realm-Name != &Outer-Realm-Name) && \
## (&Inner-Realm-Name !~ /\.%{Outer-Realm-Name}$/)) {
## update request {
## Module-Failure-Message = "Inner realm '%{Inner-Realm-Name}' and outer realm '%{Outer-Realm-Name}' are not from the same domain."
## }
## reject
## }
Con esto si nuestros usuarios ya tenían un @ en él podremos seguir usando la misma base de datos.
Siguiendo estos pasos, has logrado instalar y configurar FreeRADIUS con daloRADIUS en Ubuntu 24.04. Ahora puedes gestionar la autenticación en tu red de manera eficiente.