daloRADIUS PDF
daloRADIUS PDF
daloRADIUS PDF
Para la instalación y configuración del servidor RADIUS con un portal cautivo para la Universidad Nacional de Loja es
necesario ciertos requerimientos importantes tanto en hardware como en software. Tomando en cuenta el estudio
realizado durante el desarrollo del presente proyecto se ha considerado que los requerimientos mínimos para el correcto
funcionamiento del servidor son los siguientes:
Hardware:
Procesador: Intel Core2Duo CPU E7500 @ 2.93 GHz x 2
2 GB de Memoria RAM
320 GB de Disco Duro
Dos tarjetas de red Ethernet
Software:
Ubuntu Server 12.04
FreeRADIUS versión 2.1.10
CoovaChilli versión 1.2.6
daloRADIUS versión 0.9.9
1. CONFIGURACIONES PREVIAS
Suponiendo que ya se tiene instalado Ubuntu Server 12.04 LTS edición servidor con las aplicaciones necesarias para el
funcionamiento como Servidor LAMP, Servidor DNS, Open SHH, Samba. LAMP debe de estar instalado si o si para el
servidor.
Luego de la instalación del sistema operativo lo primero que se debe hacer es actualizar el listado de paquetes, lo que se
realiza con el siguiente comando.
nano /etc/network/interfaces
NOTA: (sudo /etc/init.d/networking restart #para reiniciar ajustes de red) o reinciar el sistema
En la terminal:
wget http://www.webmin.com/jcameron-key.asc
sudo apt-key add jcameron-key.asc
Agregar al final:
En la terminal:
sudo apt-get install unzip fakeroot ssh build-essential rrdtool snmp snmpd php5-cli php5-gd php5 php5-mysql php5-
gmp php-pear php5-snmp php5-adodb php-db make ssl-cert freeradius freeradius-mysql freeradius-utils curl perl
openssl libnet-ssleay-perl libauthen-pam-perl libio-pty-perl git-core gcc webmin libssl0.9.8 libapache2-mod-auth-
mysql php5-common libapache2-mod-php5 mysql-server apache2
El mecanismo de IP forwarding se encarga de la retransmisión de los paquetes que se reciben por una interfaz física y de
retransmitirlos por otra interfaz. El IP forwarding debe ser habilitado, pues una vez que el usuario se autentique a través
del portal cautivo se redireccionará su tráfico hacia la interfaz de red eth0, permitiendo así que el usuario pueda navegar.
Para habilitar la función de IP forwarding se necesita configurar el archivo /etc/sysctl.conf con el siguiente comando:
net.ipv4.ip_forward=1
Además, es necesario cambiar el valor a 1 del IP forwarding en /proc/sys/net/ipv4/ip_forward con el siguiente comando:
Para finalizar con la configuración de las interfaces de red, se debe habilitar el módulo tun, ya que este permitirá a
Coovachilli hacer un “túnel” entre las interfaces eth0 y la red virtual que crea en eth1. Para ello ejecutamos los siguientes
comandos:
Con esta orden cargamos el módulo tun en el kernel del sistema directamente sin tener que reiniciar. Además tenemos
que agregarlo la palabra “tun” al final del archivo /etc/modules
Al final agregamos
tun
Luego de la instalación de los paquetes de FreeRADIUS se tiene que realizar la configuración de la base de datos que va
a usar FreeRADIUS para obtener los usuarios.
Se accede a la consola de MySQL, se digita la contraseña y se crea la base de datos que va a utilizar FreeRADIUS en
este caso se llama hotspot (radius). Se puede realizar la siguiente secuencia de comandos en la terminal:
mysql –u root –p
mysql> CREATE DATABASE hotspot;
mysql> quit
mysql -u root -psql123 < /etc/freeradius/sql/mysql/ippool.sql
mysql -u root -psql123 < /etc/freeradius/sql/mysql/schema.sql
mysql -u root -psql123 < /etc/freeradius/sql/mysql/nas.sql
mysql –u root –p
mysql> GRANT ALL PRIVILEGES ON hotspot.* TO 'radius'@'localhost' IDENTIFIED BY 'radius';
mysql> FLUSH PRIVILEGES;
mysql> quit
Se edita el archivo /etc/freeradius/sql.conf que es un archivo donde se encuentran todas las configuraciones de conexión
de FreeRADIUS con MySQL.
sudo nano /etc/freeradius/sql.conf
En el archivo se debe modificar las líneas correspondientes a la conexión con el server de MySQ como lo son:
Server: “localhost”
Login: “radius” que es el usuario que se creó anteriormente.
Password: “radius” que es la clave que corresponde a ese usuario.
sql {
database = “mysql”
driver = “rlm_sql_${database}”
server = “localhost”
login = “radius”
password = “radius”
radius_db = "hotspot"
acct_table1 = "radacct"
acct_table2 = "radacct"
postauth_table = "radpostauth"
authcheck_table = "radcheck"
authreply_table = "radreply"
groupcheck_table = "radgroupcheck"
groupreply_table = "radgroupreply"
usergroup_table = "radusergroup"
deletestalesessions = yes
sqltrace = no
sqltracefile = ${logdir}/sqltrace.sql
num_sql_socks = 5
connect_failure_retry_delay = 60
nas_table = "nas"
$INCLUDE sql/${database}/dialup.conf
Además dentro del mismo archivo se descomenta la variable: readclients = yes. El descomentar esta línea permite que
se lea los clientes radius desde la base de datos.
readclients = yes
Luego se edita el archivo de configuración principal de FreeRADIUS, y se procede a descomentar la línea $INCLUDE
sql.conf y otros, ejecutar:
prefix = /usr
exec_prefix = /usr
sysconfdir = /etc
localstatedir = /var
sbindir = ${exec_prefix}/sbin
logdir = /var/log/freeradius
raddbdir = /etc/freeradius
radacctdir = ${logdir}/radacct
confdir = ${raddbdir}
run_dir = ${localstatedir}/run/freeradius
db_dir = ${raddbdir}
libdir = /usr/lib/freeradius
pidfile = ${run_dir}/freeradius.pid
max_request_time = 30
cleanup_delay = 5
max_requests = 1024
listen {
type = auth
ipaddr = *
port = 0
}
listen {
ipaddr = *
port = 0
type = acct
}
hostname_lookups = no
allow_core_dumps = no
regular_expressions= yes
extended_expressions= yes
log {
destination = files
file = ${logdir}/radius.log
syslog_facility = daemon
stripped_names = no
auth = no
auth_badpass = no
auth_goodpass = no
}
checkrad = ${sbindir}/checkrad
security {
max_attributes = 200
reject_delay = 1
status_server = yes
}
proxy_requests = yes
$INCLUDE proxy.conf
$INCLUDE clients.conf
thread pool {
max_servers = 32
min_spare_servers = 3
max_spare_servers = 10
max_requests_per_server = 0
}
modules {
$INCLUDE ${confdir}/modules/
$INCLUDE eap.conf
$INCLUDE sql.conf
$INCLUDE sql/mysql/counter.conf
}
instantiate {
exec
expr
expiration
max_all_mb
noresetcounter
logintime
}
$INCLUDE policy.conf
$INCLUDE sites-enabled/
nano /etc/freeradius/clients.conf
Se edita la contraseña que se encuentra en el parámetro secret dentro del cliente localhost.
client localhost {
ipaddr = 127.0.0.1
secret= radius
require_message_authenticator = no
nastype = other# localhost isn't usually a NAS...
}
Se debe editar el Archivo: /etc/freeradius/sites-available/default y agregar la variable "sql" en las secciones de:
authorize{}, accounting{}, session{}, post-auth{}.
En terminal
/etc/freeradius/sites-available/default
authorize {
preprocess
chap
mschap
suffix
eap {
ok = return
}
unix
files
sql
noresetcounter
dailycounter
monthlycounter
expiration
logintime
pap
}
authenticate {
Auth-Type PAP {
pap
}
Auth-Type CHAP {
chap
}Auth-Type MS-CHAP {
mschap
}
unix
}
preacct {
preprocess
acct_unique
suffix
files
}
accounting {
detail
unix
radutmp
sradutmp
sql
attr_filter.accounting_response
}
session {
radutmp
sql
}
post-auth {
sql
exec
}
pre-proxy {
}
post-proxy {
eap
}
sqlcounter dailycounter {
counter-name = Daily-Session-Time
check-name = Max-Daily-Session
reply-name = Session-Timeout
sqlmod-inst = sql
key = User-Name
reset = daily
query = "SELECT SUM(acctsessiontime - \GREATEST((%b - UNIX_TIMESTAMP(acctstarttime)), 0)) \FROM
radacct
sqlcounter monthlycounter {
counter-name = Monthly-Session-Time
check-name = Max-Monthly-Session
reply-name = Session-Timeout
sqlmod-inst = sql
key = User-Name
reset = monthly
query = "SELECT SUM(acctsessiontime - \GREATEST((%b - UNIX_TIMESTAMP(acctstarttime)), 0)) \ FROM
sqlcounter noresetcounter {
counter-name = Session-Timeout
check-name = Session-Timeout
reply-name = Session-Timeout
sqlmod-inst = sql
key = User-Name
reset = never
query = "SELECT SUM(Acctsessiontime) FROM radacct WHERE UserName='%{%k}'"
}
sqlcounter max_all_mb {
counter-name = Max-All-MB
check-name = Max-All-MB
reply-name = ChilliSpot-Max-Total-Octets
sqlmod-inst = sql
key = User-Name
reset = never
query = "SELECT SUM(AcctInputOctets) + SUM(AcctOutputOctets) FROM radacct WHERE UserName='%{%k}'"
#query = "SELECT SUM(AcctInputOctets)/(1024*1024) + SUM(AcctOutputOctets)/(1024*1024) FROMradacct
WHERE
UserName='%{%k}'"
}
sqlcounter octetslimit {
counter-name = Max-All-MB
check-name = Max-All-MB
reply-name = Chillispot-Max-Total-Octets
sqlmod-inst = sql
key = User-Name
reset = never
query = "SELECT SUM(acctinputoctets+acctoutputoctets) from radacct WHERE UserName='%{%k}'"
}
Detener freeradius
sudo /usr/sbin/freeradius -X
Si todo esta configurado correctamente en la terminal aparecerá en espera del siguiente orden. Lo detenemos con Ctrl +
C. Luego lo iniciamos de nuevo con el comando:
sudo /usr/sbin/freeradius
13. FREERADIUS
mysql -u root -p
mysql> use radius;
mysql> INSERT INTO radcheck (UserName, Attribute, Value) VALUES ('radius','Password','radius');
mysql> quit
/etc/init.d/freeradius restart
Para comprobar la conexión y funcionalidad tanto del script perl como la configuración de FreeRADIUS existe el
comando radtest el cual permite simular una solicitud de acceso RADIUS y comprueba tanto conectividad como
parámetros de envío. Ejecutamos:
En este caso, al ser correctas las credenciales la solicitud de acceso receptada se acepta al usuario.
14. COOVA-CHILLI
Para configurar Coovachilli lo primero que hay que realizar es descargar la última versión desde la página oficial de
Coovachilli. En terminal ejucatar:
wget hhtp://ap.coova.org/chilli/coova-chilli_1.2.2_i386.deb
dpkg –i coova-chilli_1.2.2_i386.deb
Por defecto coova esta desctiva, se active editando el fichero default. Abrir el archivo con:
sudo nano /etc/default/chilli
Y luego cambiar:
START_CHILLI=0
Por
START_CHILLI=1
Y en versiones recientes de coova chilli puede que sea necesarior cambiar la ultima línea por la siguiente
HS_USER=”root”
Dentro de los archivos de CoovaChilli viene un archivo de ejemplo donde están todas las configuraciones globales del
portal cautivo. Se procede a copiar el archivo de muestra y renombrarlo como config. Ejecutamos:
Se edita el archivo anteriormente creado en donde se encuentran todas las directivas, las cuales se modificaran de
acuerdo a las necesidades. Ejecutar:
En este caso se seleccionó la red 10.1.0.0 /24 para la interfaz eth1 que es donde se va a recibir las solicitudes de acceso
y la interfaz eth0 es donde va tener la conexión con la red de la universidad y el internet.
Se crea el directorio donde van a estar almacenados archivos propios del portal cautivo.
Luego se debe de copiar los archivos necesarios para el funcionamiento de Coovachilli al directorio anteriormente
creado.
Se accede al directorio en donde se va a descargar archivos adicionales para el correcto funcionamiento del portal
cautivo.
cd /var/www/hotspot/uam
Y se procede a descargarlas
wget http://ap.coova.org/uam/
wget http://ap.coova.org/js/chilli.js
Se hace un cambio dentro del archivo /var/www/hotspot/uam/index.html ubicando la dirección IP del portal cautivo.
cd /var/www/hotspot/
wget http://www.truesoft.co.th/wifi/uam.tgz
tar -xzvf uam.tgz
cd uam
mv index.html index.html-o
mv chilli.js chilli.js-o
En el paquete CoovaChilli, existen archivos con reglas tipo iptables ya creadas. Se usó estas mismas reglas y se añadió
más reglas acordes con las políticas de seguridad de la Unidad de Telecomunicaciones e Información.
Existen dos scripts de shell que contienen las reglas de iptables que maneja CoovaChilli los que son up.sh y down.sh,
estos scripts se ejecutan al instante en que se levanta el proceso de CoovaChilli.
Para agregar más reglas de iptables se debe a crear el scripts de Shell llamado ipup.sh
19. HASERL
Descargar
wget http://sourceforge.net/projects/haserl/files/haserl/0.8.0/haserl-0.8.0.tar.gz
Desempaquetar
Instalar
sudo /etc/chilli/wwwsh
Cambiar
Por
haserl=/usr/local/bin/haserl
nano /etc/chilli/up.sh
# may not have been populated the first time; run again
[ -e "/var/run/chilli.iptables" ] && sh /var/run/chilli.iptables 2>/dev/null
# force-add the final rule necessary to fix routing tables
iptables -I POSTROUTING -t nat -o $HS_WANIF -j MASQUERADE
Como se va a usar conexiones SSL para mayor seguridad. Se tiene que instalar el módulo SSL. Se debe crear un
directorio llamado ssl dentro de /etc/apache2
Es necesario saber el nombre del equipo esto va a servir al generar el certificado. Se lo obtiene con el siguiente
comando.
hostname -f
A continuación, habrá que hacer un certificado SSL que será utilizado por el host virtual que se detalla más adelante. El
sistema preguntará por una serie de parámetros (Localidad, Provincia, etc.), siendo el más importante el nombre del host.
En este caso será “10.1.0.1”. De esta forma se consigue que el nombre del host y el del certificado coincidan, ya que los
navegadores dan avisos de posibilidad de intrusión en caso de que no coincidan:
Aparecerá una ventana donde se debe escribir el nombre del equipo que ya anteriormente se obtuvo con el comando
hostname –f.
Para activar el módulo ssl se debe ejecutar el siguiente comando.
a2enmod ssl
Para la configuración correcta del virtual host es necesario tener en cuenta los siguientes aspectos.
DocumentRoot: Directorio principal que contiene la estructura de directorios visible desde la Web Esta directiva
especifica el directorio desde el cuál apache2 servirá los ficheros.
ServerName: La directiva ServerName especifica el nombre de host y el puerto que usa el servidor para identificarse.
Directory index: Engloba a un grupo de directivas que se aplicarán solamente al directorio del sistema de ficheros
especificado y a sus subdirectorios. Aquí es donde se indica el nombre de la página principal del sitio.
ServerAdmin: Dirección de email que el servidor incluye en los mensajes de error que se envían al cliente.
CustomLog: Ubicación de donde esta el archivo en el cual se registran los accesos al sitio.
Se procede a crear un archivo llamado hotspot donde se va a agregar el host virtual dentro del directorio
/etc/apache2/sites-available.
A continuación se muestra la configuración del virtual host . Aquí se agrega la ruta donde se creó el certificado ssl.
<IfModule mod_ssl.c>
<VirtualHost 10.1.0.1:443>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/hotspot
ServerName radius.unl.edu.ec
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/hotspot/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
Alias "/dialupadmin/" "/usr/share/freeradius-dialupadmin/htdocs/"
<Directory "/usr/share/freeradius-dialupadmin/htdocs/">
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /var/www/hotspot/cgi-bin/
<Directory "/var/www/hotspot/cgi-bin/">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0::1/128
</Directory>
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache.pem
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined
Alias /doc/ "/usr/share/doc/"
nano /etc/apache2/sites-available/default
NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
</VirtualHost>
a2ensite hotspot
apache2ctl -t
/etc/init.d/apache2 reload
Finalmente se reinicia todos los servicios (FreeRADIUS y CoovaChilli) y se tendrá al servidor RADIUS funcionando con el
portal cautivo. Es importante tener en cuenta que al reiniciar el servicio de FreeRADIUS debe de ser con las
instrucciones ya anteriormente mencionadas.
23. daloRADIUS
A continuación se detalla el proceso de instalación y configuración del daloRADIUS, al ser una herramienta de
administración web, el uso correcto se detalla en el manual de usuario.
wget http://sourceforge.net/projects/daloradius/files/daloradius/daloradius0.9-9/daloradius-0.9-9.tar.gz
Una vez descargado el paquete de daloRADIUS se procede a descomprimir la aplicación y se debe crear la base de
datos con las tablas pertinentes. Como root se ejecuta los siguientes comandos:
Se descomprime el paquete descargado:
cp -R daloradius-0.9-9/ /var/www/daloradius
Se da permiso al apache sobre el directorio del daloRADIUS que esta en el directorio /var/www/daloradius
Seguidamente se edita el archivo daloradius.conf.php para poner los valores de la conexión al server de la base de
datos:
$configValues[„CONFIG_DB_ENGINE‟] = „mysql‟;
$configValues[„CONFIG_DB_HOST‟] = „127.0.0.1‟;
$configValues[„CONFIG_DB_USER‟] = „radius‟;
$configValues[„CONFIG_DB_PASS‟] = „radius‟;
$configValues[„CONFIG_DB_NAME‟] = „hotspot‟;
$configValues['CONFIG_DB_TBL_RADUSERGROUP'] = 'radusergroup';
Para poder visualizar la interfaz de daloRADIUS se debe ingresar a un navegador de prefencia Mozilla
mkdir /var/log/freeradius/radacct
touch /var/log/freeradius/radacct/sql-relay
touch /var/log/freeradius/radutmp
touch /var/log/daloradius.log
chown 755 /var/log/freeradius
chown freerad:freerad /var/log/freeradius/radutmp