Introduzione
Chillispot è un programma che fornisce ai client l'autenticazione e l'accesso limitato alla rete. Il suo uso principale è nelle reti senza fili (WiFi).
Sul sito ufficiale del progetto è possibile ottenere maggiori informazioni sul funzionamento del programma. In poche parole, Chillispot consente di creare una rete virtuale privata fra i vari client connessi, assegna loro gli indirizzi e gestendone l'accesso alla rete esterna.
Preparativi
La presente guida è indicata per architetture i386. Non è garantito il corretto funzionamento dell'applicazione su macchine di altre architetture.
Installare i seguenti pacchetti:
freeradius
apache
mysql-server
mysql-admin
La presente guida contiene le indicazioni su come installare e abilitare Chillispot su una singola macchina. È comunque possibile installare apache e mysql su macchine separate: questo comporterà la necessità di modificare i parametri di configurazione dei vari aspetti del programma.
Per quanto riguarda la configurazione del proprio kernel, è necesssario avere installato il modulo per il supporto per le sessioni remote geenriche.
Se la connessione alla rete viene stabilita tramite router è necessario disabilitare il protocollo DHCP.
In questo documento l'indirizzo IP 192.168.1.73 si riferisce al PC usato per gli esempi contenuti in esso: è necessario modificarlo con l'IP della propria macchina.
Configurazione del kernel
Chillispot crea una VPN, cioè un IP tunnel. Il kernel deve supportare questo: se usate un programma del tipo OpenVPN siete già pronti. Comunque, dare un'occhiata alla seguente sezione del kernel: Configurazione del Kernel di Linux: supporto TUN/TAP
Lanciare il comando:
modconf
Kernel/drivers/net ---> tun [Universal TUN/TAP device driver support] --->
È possibile o compilare il supporto di TUN/TAP all'interno del kernel o (come in questo caso) svilupparlo come modulo. Il nome del modulo sarà tun.
Probabilmente è necessario abilitare l'IP masquerading, NAT o il necessario per permettere ai clinet VPN di navigare nelle reti esterne. Se leggete questo HOWTO è probabile che si conosca già tutto questo; se no, cercare una documentazione specifica.
Installazione
Per Ubuntu 7.10 «Gutsy Gibbon» e successive è disponibile il pacchetto chillispot contenente tutti gli eseguibili e le librerie necessarie al corretto funzionamento dell'applicazione.
Nel caso si usi una versione precedente a quella sopra citata, è possibile scaricare l'archivio contenente il programma da questo sito. Per convertire i pacchetti con estensione .rpm in pacchetti compatibili con Ubuntu, è possibile utilizzare alien.
Configurazione
Ognuna delle parti nelle quali è divisa questa sezione contiene delle indicazioni specifiche per uno fra i software necessari al corretto funzionamento di chillispot.
Configurazione di Chillispot
La configurazione di Chillispot risiede in un singolo file /etc/chilli.conf. Il contenuto di suddetto file sarà molto simile al seguente:
radiusserver1 127.0.0.1 radiusserver2 127.0.0.1 radiussecret theradiussecret dns1 192.168.1.73 dhcpif eth0 uamallowed 192.168.182.1,192.168.1.73,www.google.it uamserver https://192.168.1.73/cgi-bin/hotspotlogin.cgi uamhomepage https://192.168.1.73/welcome.html uamsecret theuamsecret
Il file /etc/chilli.conf contiene le configurazioni riguardanti tutti i vari aspetti del programma. Di seguito vengono ne vengono spiegate le più importanti.
Sezione Radius
Nella sezione
radiusserver1 127.0.0.1 radiusserver2 127.0.0.1 radiussecret theradiussecret
è possibile specificare due server radius anche nel caso sia presente solo uno. Naturalmente, è possibile registrare lo stesso server in entrambe le linee. Nell'esempio, l'indirizzo impostato è quello locale: ciò è dovuto al fatto che sia freeradius che chillispot risiedono sulla stessa macchina.
La direttiva
radiussecret theradiussecret
contiene la password necessaria per accedere al contenuto del file di configurazione di FreeRadius, in modo da garantirne l'accesso.
Sezione Networking
Nella sezione
dns1 192.168.1.73
va specificato l'indirizzo IP del server DNS, visibile per i client. Nel caso che sulla macchina locale sia attivo il servizio di risoluzione dei nomi è possibile impostare l'indirizzo della stessa, altrimenti aggiungere l'indirizzo del DNS in uso (i.e. quello del proprio provider).
Nella seguente sezione va impostata l'interfaccia di rete usata per la connessione:
dhcpif eth0
L'interfaccia da specificare è quella dove risiede l'access point, il quale dovrebbe essere già correttamente configurato.
Per evitare incompatibilità fra la rete e Chillispot, è consigliato disabilitare tutti i servizi DHCP relativi all'interfaccia di rete.
Sezione UAM
La variabile
uamallowed 192.168.182.1,192.168.1.73,www.google.it
contiene un elenco di indirizzi raggiungibili dai client per i quali non è necessaria l'autenticazione. È fondamentale fornire l'indirizzo IP del geteway, l'indirizzo IP del server DNS e qualsiasi altro host desiderato.
Per il gateway, è necessario inserire sia l'indirizzo della VPN che quello della LAN.
La seguente variabile, invece, contiene l'indirizzo dello script che gestisce il login degli utenti:
uamserver https://192.168.1.73/cgi-bin/hotspotlogin.cgi
La variabile
uamhomepage https://192.168.1.73/welcome.html
contiene l'indirizzo della pagina dove tutti client saranno reindirizzati quando richiederanno l'accesso a un sito web non presente nella lista della variabile
uamallowed
Il contenuto di questo file è estremamente personalizzabile, solitamente al suo interno vengono incluse tutte le informzioni necessarie ad effettuare l'accesso.
Infine, la seguente variabile indica il file nel quale sono memorizzati i nomi e le password degli utenti:
uamsecret theuamsecret
Configurazione di Apache
Questa sezione contiene delle informazioni utili a configurare il server web apache per gestire le richieste d'accesso, nonchè presentare agli utenti un breve testo di benvenuto.
Le connessioni stabilite da Chillispot vengono cifrate con il protocollo SSL.
Esistono varie possibilità di configurare il server web. L'esempio che segue non fa altro che reindirizzare un host virtuale all'indirizzo
http://192.168.1.73/
che non è altro che valore della variabile
uamhomepage
nel file di configurazione /etc/chilli.conf analizzato in precedenza. Questa pagina dovrebbe contenere, oltre a tutte le informazioni necessarie all'utente per effettuare l'autenticazione, anche un link alla pagina "prelogin" del server chillispot. Di seguito viene illustrato un esempio di file index.html contenente solo il link necessario per il login:
<a href="http://192.168.182.1:3990/prelogin">Clicca qua per accedere</a>
Chillispot reindirizzerà tutti gli accessi alla porta 3990 sull'URL specificato nel file /etc/chilli.conf. Prendendo in esame il file di configurazione analizzato in precedenza, il server reindirizzerà il browser al seguente URL:
https://192.168.1.73/cgi-bin/hotspotlogin.cgi
Lo script hotspotlogin.cgi gestisce le operazioni di login. Uno script pronto per l'uso viene distribuito con il pacchetto del software, per attivarlo è sufficiente installarlo all'interno della cartella di sistema /usr/lib/cgi-bin con i seguenti comandi: {{ sudo cp /usr/share/doc/chillispot-1.0/hotspotlogin.cgi.gz /usr/lib/cgi-bin sudo gunzip /usr/lib/cgi-bin/hotspotlogin.cgi.gz sudo chmod 755 /usr/lib/cgi-bin/hotspotlogin.cgi }}}
Il file hotspotlogin.cgi necessità di una piccola modifica: bisogna individuare la variabile
$uamsecret
all'interno del file e assegnarli lo stesso valore impostato nel file /etc/chilli.conf. Prendendo in esame i vari esempi fatti in precedenza, la variabile dello script dovrebbe essere impostata come segue:
$uamsecret = theuamsecret
È inoltre possibile editare questo file a proprio piacimento per modificare l'aspetto grafico della schermata di login.
Le precedenti istruzioni necessitano che nel server web sia abilitato il supporto per gli script cgi.
Apache2 SSL
Questa sezione contiene delle indicazioni utili per abilitare e configurare il protocollo SSL con il server web apache.
Generare il certificato
Per creare un certificato che sia valido per un anno digitare il seguente comando:
sudo apache2-ssl-certificate -days 365
Abilitare il modulo SSL
Per abilitare il modulo SSL all'interno del server web, digitare il seguente comando:
sudo a2enmod ssl
Stare in ascolto sulla porta 443
Per impostare il server ad accettare connesioni sulla porta 443 digitare il seguente comando:
sudo bash echo "Listen 443" >> /etc/apache2/ports.conf
Creare ed abilitare il sito SSL
Per creare per le connessioni protette digitare il seguente comando:
sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/ssl
Ora, prima di renderlo disponibile, è necessario modificare il contenuto del file sopra citato in modo da ottenere un risultato simile al seguente:
NameVirtualHost *:443 <virtualhost *:443> ServerAdmin webmaster@localhost SSLEngine On SSLCertificateFile /etc/apache2/ssl/apache.pem DocumentRoot /var/www/ <directory /> Options FollowSymLinks AllowOverride None </directory> <directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all # This directive allows us to have apache2's default start page # in /apache2-default/, but still have / go to the right place # Commented out for Ubuntu #RedirectMatch ^/$ /apache2-default/ </directory> ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <directory "/usr/lib/cgi-bin"> AllowOverride None Options ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </directory> ErrorLog /var/log/apache2/error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog /var/log/apache2/access.log combined ServerSignature On 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> </virtualhost>
Infine, per abilitarlo, digitare il seguente comando:
sudo a2ensite ssl
Configurazione FreeRadius
Autenticazione
Configurare freeradius con delle impostazioni di base è un procedimento piuttosto semplice.
Innanzitutto è necessario aprire il file /etc/freeradius/clients.conf con un editor di testo, ad esempio:
sudo bash gedit /etc/freeradius/clients.conf
Il contenuto del file in questione sarà simile al seguente:
client 127.0.0.1 { secret = theradiussecret shortname = localhost nastype = other }
Se non si è collegati dall'host locale è possibile modificare di conseguenza l'indirizzo IP, specificandone uno preciso o addirittura un'intera classe di indirizzi.
Il prossimo file da editare è /etc/freeradius/sql.conf. Questo file viene fornito già preconfigurato per MySql, ma è sempre possibile modificarlo in modo da consentire al programma di interagire con altri server, come, ad esempio, postgres, Oracle o Microsoft SQL Server. Le altre opzioni sono abbastanza intuitive, nel senso che sarà necessario specificare soltanto i dati di accesso al server e al database di MySql. Quello che segue è un esempio di sql.conf contenente delle possibili modifiche:
# Connect info server = "localhost" login = "freeradius" password = "mysuperpassword" # Database table configuration radius_db = "radius"
L'ultimo file che richiede alcune modifiche è /etc/freeradius/radiusd.conf. Una volta aperto il file, cercare la seguente direttiva
sql
nella sezione
authorize
Una volta trovata è necessario decommentarla: ora freeradius è abilitato all'uso del modulo SQL.
Salvare i cambiamenti e riavviare il server freeradius.
Account utente
FreeRadius memorizza le informazioni relative all'accesso degli utenti all'interno di /var/log/radius/radacct. Esiste un'alternativa a questo metodo: è possibile gestire gli account utente tramite MySql. A tale scopo, è necessario aprire il file /etc/freeradius/radiusd.conf e modificarlo come nel seguente esempio:
accounting { unix radutmp sql }
Configurazione MySql
|FreeRadius richiede un database di MySql con una struttura predefinita dove memorizzare e ricercare le informazioni di autenticazione. Per prima cosa è necessario avviare il client di MySql con i privilegi di amministrazione e lanciare i seguenti comandi (con le dovute modifiche, atte a soddisfare le proprie esigenze):
> CREATE DATABASE radius; > GRANT ALL PRIVILEGES ON radius.* to 'freeradius'@'localhost' IDENTIFIED BY 'mysuperpassword'; > FLUSH PRIVILEGES
Con il pacchetto del programma viene fornito un modello di schema per la base di dati. Per importare tale modello è utile digitare il seguente comando:
zcat /usr/share/doc/freeradius/examples/db_mysql.sql.gz ! mysql -ufreeradius -pmysuperpassword radius
Nel caso si presentino problemi, è sufficiente importare il file tramite phpmyadmin.
Verranno create numerose tabelle. In realtà, solo una di queste, di nome radcheck, sarà realmente necessaria. La tabella in questione dovrebbe avere la seguente struttura:
Campo
Tipo
Null
Chiave
Predefinito
Extra
id
int(11) unsigned
PRI
NULL
auto_increment
UserName
varchar(64)
MUL
Attribute
varchar(32)
op
varchar(2)
==
Value
varchar(253)
Il campo id viene incrementato automaticamente mentre op viene settato al valore predefinito, gli altri campi, invece, andranno impostati con delle query simili alla seguente:
> INSERT INTO radcheck (UserName, Attribute, Value) VALUES ('aika', 'User-Password', 'myaikapassword');
Ora è possibile usare qualunque client o interfaccia desiderati per inserire gli utenti nella base di dati.
Configurazione del firewall
Questa sezione contiene delle indicazioni utili alla configurazione di un firewall per un corretto funzionamento con chillispot.
Metodo avanzato
È consigliato eseguire i seguenti comandi come amministratore di sistema. A tale scopo è utile utilizzare il comando su al posto di sudo, oppure digitare il seguente comando prima di tutti gli altri: sudo bash
Questa sezione contiene delle istruzioni dettagliate su come modificare manualmente i file di configurazione del proprio firewall. Per maggiori informazioni sul firewall di Ubuntu si consulti questa pagina.
Le azioni necessarie sono le seguenti:
Aprire la porta 443/TCP almeno alla sotto rete 192.168.182.0/24 (servizio https:// di apache).
Aprire la porta 3990/TCP almeno alla sotto rete 192.168.182.0/24: (servizio http:// di chillispot).
Aprire la porta 1812/UDP to 127.0.0.1: (porta utilizzata da freeradius per accettare connessioni da chillispot).
Aprire la porta 67/UDP alla VPN (interfaccia «tun0»): (servizio DHCP di chillispot).
Per consentire la spedizione dei pacchetti è necessario aprire e modificare il file /etc/network/options come nel seguente esempio:
ip_forward=yes
Le seguenti istruzioni saranno d'aiuto per una corretta configurazione del firewall:
Riavviare la rete con il seguente comando:
/etc/init.d/networking restart
Configurare la scheda di rete usata come interfaccia con gli altri computer presenti nella rete. Digitare il seguente comando:
ifconfig ethX ip
dove «ethX» è la propria interfaccia di rete e «ip» è l'indirizzo IP desiderato per il server (di solito 192.168.0.1 o 192.168.1.1)Configurare il NAT con iptables. Digitare il seguente comando:
iptables -t nat -A POSTROUTING -o ethX -j MASQUERADE echo 1 > /proc/sys/net/ipv4/ip_forward
dove «ethX» è sempre l'interfaccia con accesso alla rete esterna.Installare e configurare dnsmasq e ipmasq. Per l'installazione si può procedere con apt-get, come nel seguente esempio:
apt-get install dnsmasq ipmasq
Riavviare dnsmasq, dunque riconfigurare ipmasq affinchè venga lanciato subito dopo l'abilitazione della rete:
/etc/init.d/dnsmasq restart dpkg-reconfigure ipmasq
Per finire, non rimane che riavviare la rete e riconfigurare l'interfaccia (passi 1 e 2).
Note
Se si desidera lanciare chillispot e freeradius in modalità verbosa, è sufficiente digitare i relativi comandi con delle sintassi simili alle seguenti:
sudo chilli --debug -fg sudo freeradius -x