/freeradius-daloradius-debian

Servidor Freeradius con Daloradius, MariaDB y Apache2 en Debian 10 Buster

GNU General Public License v3.0GPL-3.0

Instalar FreeRADIUS+daloRADIUS+MariaDB+Apache2 en Debian 10 Buster

Autor

Introducción

¿Qué es FreeRADIUS?

FreeRADIUS es una suite RADIUS gratuita, modular y de alto rendimiento, desarrollada y distribuida bajo la Licencia Pública General GNU, versión 2, y se puede descargar y usar libre de costo.

RADIUS (Remote Authentication Dial-In User Server), es un protocolo ampliamente empleado para controlar el acceso a servicios en red. Permite gestionar la autenticación, autorización y registro de usuarios remotos sobre un determinado recurso. La tupla "autenticación, autorización y registro" es más conocida como AAA, proveniente del acrónimo inglés Authentication, Authorization and Accounting.

¿Qué es daloEADIUS?

daloRADIUS, se basa en una implementación de FreeRADIUS con un servidor de base de datos que actúa como backend.

daloRADIUS es una aplicación avanzada de administración web RADIUS destinada a administrar hotspots e implementaciones de ISP de propósito general. Cuenta con gestión de usuarios, informes gráficos, contabilidad, un motor de facturación y se integra con GoogleMaps para la localización geográfica. Está escrito en PHP y JavaScript y utiliza una capa de abstracción de base de datos, lo que significa que es compatible con muchos sistemas de bases de datos, entre ellos los populares MySQL, MariaDB, PostgreSQL, Sqlite y MSSQL.

Requisitos previos

  • Instalar servidor (físico, máquina virtual o contenedor) con sistema operativo Debian 10 Buster, básico

  • Establecer internalización en_US.UTF-8 y zona horaria America/Havana

dpkg-reconfigure locales
dpkg-reconfigure tzdata
  • Establecer nombre FQDN del sistema
nano /etc/hosts

127.0.0.1       localhost.localdomain    localhost
192.168.0.100   daloradius.example.tld   daloradius
  • Establecer parámetros de red
nano /etc/network/interfaces

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
        address 192.168.0.100
        netmask 255.255.255.0
        gateway 192.168.0.254
  • Configurar repositorio de paquetes
nano /etc/apt/apt.conf

Acquire::Check-Valid-Until "false";
nano /etc/apt/sources.list

deb http://deb.debian.org/debian/ buster main contrib
deb http://deb.debian.org/debian-security/ buster/updates main contrib
deb http://deb.debian.org/debian/ buster-updates main contrib
deb http://deb.debian.org/debian/ oldstable main contrib

NOTA: La definición del repositorio oldstable, obedece a la dependencia de Daloradius del paquete php-bd, no disponible en Debian 10 Buster.

  • Actualizar el sistema
apt update && apt full-upgrade -y
  • Crear certificado de seguridad TLS/SSL
openssl req -x509 -nodes -days 3650 -sha512 \
    -subj "/C=CU/ST=Provincia/L=Ciudad/O=EXAMPLE TLD/OU=IT/CN=Daloradius/emailAddress=postmaster@example.tld/" \
    -addext "subjectAltName = DNS:daloradius.example.tld,IP:192.168.0.100" \
    -newkey rsa:4096 \
    -out /etc/ssl/certs/daloradius.crt \
    -keyout /etc/ssl/private/daloradius.key

openssl dhparam -out /etc/ssl/dh2048.pem 2048
chmod 0444 /etc/ssl/certs/daloradius.crt
chmod 0400 /etc/ssl/private/daloradius.key
  • Descargar y desplegar daloRADIUS
apt install unzip
cd /opt
wget https://github.com/lirantal/daloradius/archive/master.zip
unzip daloradius-master.zip
mv daloradius-master/ daloradius/

Instalar y configurar servidor web Apache2

  • Instalar paquetes necesarios
apt install apache2 php libapache2-mod-php php-{gd,common,mail,mail-mime,mysql,pear,mbstring,xml,curl}
apt install php-db && apt-mark hold php-db
  • Definir zona horaria
sed -i "s/^;date\.timezone =.*$/date\.timezone = 'America\/Havana'/;
    s/^;cgi\.fix_pathinfo=.*$/cgi\.fix_pathinfo = 0/" \
    /etc/php/7*/cli/php.ini
  • Crear VirtualHost
nano /etc/apache2/sites-available/daloradius.conf

<VirtualHost *:80>
     ServerName daloradius.example.tld
     Redirect permanent / https://daloradius.example.tld/
</VirtualHost>
<IfModule mod_ssl.c>
    <VirtualHost *:443>
        ServerName daloradius.example.tld
        Protocols h2 h2c http/1.1
        ProtocolsHonorOrder Off
        ServerAdmin postmaster@example.tld
        DirectoryIndex index.php
        DocumentRoot /opt/daloradius/
        <Directory "/opt/daloradius/">
            Options +Indexes +FollowSymLinks +MultiViews
            AllowOverride All
            Require all granted
        </Directory>
        SSLEngine on
        SSLCertificateFile /etc/ssl/certs/daloradius.crt
        SSLCertificateKeyFile /etc/ssl/private/daloradius.key
        SSLOpenSSLConfCmd DHParameters "/etc/ssl/dh2048.pem"
        SSLProtocol -all +TLSv1.3 +TLSv1.2
        SSLOpenSSLConfCmd Curves X25519:secp521r1:secp384r1:prime256v1
        SSLCipherSuite EECDH+AESGCM:EDH+AESGCM
        SSLHonorCipherOrder on
        SSLCompression off
        SSLOptions +StrictRequire
        <FilesMatch "\.(cgi|shtml|phtml|php)$">
            SSLOptions +StdEnvVars
        </FilesMatch>
        <Directory /usr/lib/cgi-bin>
            SSLOptions +StdEnvVars
        </Directory>
        BrowserMatch "MSIE [2-6]" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
        BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
        ErrorLog ${APACHE_LOG_DIR}/daloradius_error.log
        CustomLog ${APACHE_LOG_DIR}/daloradius_access.log combined
    </VirtualHost>
</IfModule>
  • Activar módulos necesarios, VirtualHost y reiniciar el servicio
a2enmod rewrite ssl
a2dissite 000-default.conf
a2ensite daloradius.conf
systemctl restart apache2.service

Instalar y configurar servidor de base de datos MariaDB

  • Instalar paquetes necesarios
apt install mariadb-server mariadb-client
  • Asegurar el servicio
mysql_secure_installation

Enter current password for root (enter for none):
Change the root password? [Y/n] y
New password:
Re-enter new password:
Remove anonymous users? [Y/n] y
Disallow root login remotely? [Y/n] y
Remove test database and access to it? [Y/n] y
Reload privilege tables now? [Y/n] y
mysql -u root

MariaDB [(none)]> UPDATE mysql.user SET plugin = 'mysql_native_password' WHERE User = 'root';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> QUIT;
  • Crear usuario administrativo de bases de datos
mysql -u root -p

MariaDB [(none)]> GRANT ALL ON *.* TO 'db_admin'@'%' IDENTIFIED BY 'P@s$w0rd' WITH GRANT OPTION;
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> QUIT;
  • Reiniciar el servicio
systemctl restart mariadb.service

Instalar y configurar servidor FreeRADIUS

Si se desea utilizar la última versión estable proporcionada por los desarrolladores, se deben seguir estos sencillos pasos:

  • Agregar la firma PGP del repositorio de paquetes FreeRADIUS
apt-key adv --keyserver keys.gnupg.net --recv-key 0x41382202
  • Agregar al final del fichero /etc/apt/sources.list
deb https://packages.networkradius.com/releases/debian-buster/ buster main
  • Actualizar base de datos de paquetes
 apt update
  • Instalar paquetes necesarios
apt install freeradius freeradius-mysql freeradius-utils

NOTA: Si se instala la última versión estable disponible en el repositorio de paquetes oficial de freeRADIUS, en la ubicación de los ficheros de configuración del servicio, se elimina la versión del paquete, es decir de /etc/freeradius/3.0/ pasaría a ser /etc/freeradius/.

  • Crear e inicializar base de datos
mysql -u db_admin -p

MariaDB [(none)]> CREATE DATABASE radius;
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> QUIT;

mysql -u db_admin -p radius < /etc/freeradius/3.0/mods-config/sql/main/mysql/schema.sql
  • Configurar acceso a la base de datos
ln -s /etc/freeradius/3.0/mods-available/sql /etc/freeradius/3.0/mods-enabled/
nano /etc/freeradius/3.0/mods-enabled/sql

sql {
    dialect = "mysql"
    driver = "rlm_sql_${dialect}"
    server = "localhost"
    port = 3306
    login = "db_admin"
    password = "P@s$w0rd"
    radius_db = "radius"
}
read_clients = yes
client_table = "nas"

NOTA: Sólo se muestran los parámetros modificados.

Además, se deben descomentar las líneas de configuración que contengan -sql, existentes en los ficheros /etc/freeradius/3.0/sites-available/default y /etc/freeradius/3.0/sites-available/inner-tunnel.

  • Establecer permisos y reiniciar el servicio
chgrp -h freerad /etc/freeradius/3.0/mods-available/sql
chown -R freerad:freerad /etc/freeradius/3.0/mods-enabled/sql
systemctl restart freeradius.service

Configurar daloRADIUS

  • Establecer permisos
cd /opt
chown -R www-data:www-data daloradius/
cp daloradius/library/daloradius.conf.php.sample daloradius/library/daloradius.conf.php
chmod 664 daloradius/library/daloradius.conf.php
  • Actualizar la base de datos
mysql -u db_admin -p radius < daloradius/contrib/db/mysql-daloradius.sql
mysql -u db_admin -p radius < daloradius/contrib/db/fr2-mysql-daloradius-and-freeradius.sql
  • Configurar acceso a la base de datos
nano daloradius/library/daloradius.conf.php
$configValues['CONFIG_DB_ENGINE'] = 'mysqli';
$configValues['CONFIG_DB_HOST'] = 'localhost';
$configValues['CONFIG_DB_PORT'] = '3306';
$configValues['CONFIG_DB_USER'] = 'db_admin';
$configValues['CONFIG_DB_PASS'] = 'P@s$w0rd';
$configValues['CONFIG_DB_NAME'] = 'radius';

NOTA: Sólo se muestran los parámetros modificados.

  • Reiniciar los servicios correspondientes
systemctl restart freeradius.service apache2.service

Acceder a daloRADIUS

Finalmente, acceder a la aplicación web, introduciendo la dirección http://daloradius.example.tld/, en el navegador de preferencia y usar el par usuario/contraseña (administrator/radius) para efectuar el login y comenzar a explotar el sistema.

NOTA: Se debe cambiar la contraseña por defecto del usuario Administrator; así como renombrar el fichero /opt/daloradius/update.php.

Referencias