Avete a disposizione un PC con una scheda Wifi Atheros e volete installare un hotspot con autenticazione username/password? Fatelo con Ubuntu Linux!
Sono stato contattato per un progetto dedicato all’installazione di un sistema di hotspot Wifi scalabile basato su autenticazione username/password, con sistema di registrazione online.
Per iniziare a sviluppare la rete, ho dovuto crearmi una situazione simile a casa. Ho utilizzato il mio hardware a disposizione, e la mia connessione casalinga. Vale a dire, un Netbook Samsung N130 – con scheda Wifi Atheros AR9285 – e la mia ADSL. Per quanto riguarda il software, invece, mi sono servito dei seguenti programmi e tools:
- Ubuntu come distribuzione Linux
- Hostapd come programma di gestione dell’access point
- Coova-chilli come sistema di accesso alla rete
- Freeradius come sistema di autenticazione
- MySQL come sistema di account
- Apache come web server
Eccovi qui un how-to su come configuare correttamente i seguenti programmi per avere un sistema di hotspot funzionante.
Software necessario
Per prima cosa, naturalmente, dobbiamo avere un server Linux funzionante e connesso ad Internet. ho optato per Ubuntu (e non per la abituale Debian) perché Coova-Chilli ha già il pacchetto precompilato per Ubuntu 10.10. Non dovendo utilizzare una Linux Box come sistema finale (ma degli Open-WRT su router Linksys), ho optato per la comodità.
Aggiorniamo il sistema con:
apt-get update apt-get upgrade
Installiamo il software:
apt-get install apache2 mysql-server php5 libapache2-mod-php5 freeradius freeradius-mysql dhcp3-server hostapd hostapd-utils libapache2-mod-auth-mysql ssl-cert cd /tmp wget http://ap.coova.org/chilli/coova-chilli_1.2.6_i386.deb dpkg -i coova-chilli_1.2.6_i386.deb
Oltre a questo, abbiamo bisogno di un pacchetto chiamato haserl. Lo possiamo trovare qui. Una volta scaricato dobbiamo installare il compilatore GCC – se ancora non lo abbiamo nella macchina – e compilare il programma:
apt-get install gcc tar xvf haserl-*.tar.gz cd haserl-*/ ./configure make make install
Configurazioni Preliminari
Una volta installato tutto il software necessario, passiamo alla configurazione dei servizi. La prima cosa da fare è la configurazione della rete e dell’access point. Assumiamo che l’accesso ad Internet sia fornito su interfaccia eth0 e l’IP dal DHCP. Andiamo quindi a modificare il file /etc/network/interfaces come segue:
vim /etc/network/interfaces
auto lo iface lo inet loopback auto eth0 iface eth0 inet dhcp auto wlan0
Abilitiamo il port-forwarding:
echo 1 > /proc/sys/net/ipv4/ip_forward echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
Configurazione di Hostapd e Dhcp-server
Configuriamo hostapd:
vim /etc/hostapd/hostapd.conf
interface=wlan0 driver=nl80211 ssid=HotSpot channel=6 ieee8021x=0
Dopodiché configuriamo il server dhcpd:
vim /etc/dhcp3/dhcpd.conf
e aggiungiamo:
subnet 10.0.1.0 netmask 255.255.255.0 { range 10.0.1.100 10.0.1.200; option subnet-mask 255.255.255.0; option broadcast-address 10.0.1.255; option domain-name-servers 8.8.8.8,8.8.4.4; option routers 10.0.1.1; }
infine abilitiamo il server dhcpd per l’interfaccia virtuale tun0, che è quella che Coova-Chilli abiliterà e utilizzerà automaticamente.
vim /etc/default/dhcp3-server
INTERFACES="tun0"
Riavviamo il server dhcp:
/etc/init.d/dhcp-server restart
e testiamo la configurazione avviando il demone in foreground:
hostapd /etc/hostapd/hostapd.conf
Se siamo in grado di collegarci correttamente punto di accesso appena creato e riceviamo l’IP dal dhcp, chioudiamo il programma con Ctrl+C e avviamolo in background con:
/etc/init.d/hostapd start
Configurazione del server radius
Configuriamo ora il server radius per essere usato con un database mysql.
Creiamo il database:
mysql -u root CREATE DATABASE radius; quit
Lo popoliamo:
mysql -u root -p radius < /etc/freeradius/sql/mysql/schema.sql mysql -u root -p radius < /etc/freeradius/sql/mysql/schema.sql mysql -u root GRANT ALL PRIVILEGES ON radius.* TO 'radius'@'localhost' IDENTIFIED BY 'password'; FLUSH PRIVILEGES; quit
Diciamo a freeradius come utilizzare il database:
vim /etc/freeradius/sql.conf
server = "localhost" login = "radius" password = "password"
Settiamo la password per il client di freeradius:
vim /etc/freeradius/clients.conf
client localhost { ipaddr = 127.0.0.1 secret = radiuspassword }
Testiamo adesso la corretta configurazione dell’ACL appena creata:
vim /etc/freeradius/users
decommentare le seguenti righe:
"John Doe" Auth-Type := Local, User-Password == "hello" Reply-Message = "Hello, %u"
A questo punto comproviamo la corretta inclusione dei file di configurazione avviando freeradius in foregrund:
/etc/init.d/freeradius stop freeradius -XXX
Se tutto è andato bene, l’ultima linea stampata dovrà terminare con:
Debug: Ready to process requests.
Usciamo di nuovo da freeradius con Ctrl+C e lo avviamo di nuovo in background:
/etc/init.d/freeradius start
Eseguiamo allora una chiamata al radius per l’utente di test “John Doe”
radtest "John Doe" hello 127.0.0.1 0 radiuspassword
Se tutto è andato bene come risposta dovremmo ricevere:
Sending Access-Request of id 136 to 127.0.0.1 port 1812 User-Name = "John Doe" User-Password = "hello" NAS-IP-Address = 255.255.255.255 NAS-Port = 0 rad_recv: Access-Accept packet from host 127.0.0.1:1812, id=136, length=37 Reply-Message = "Hello, John Doe"
Se il test sopra ha funzionato, possiamo cambiare il backend di autorizzazione, da “files” a “sql”
vim /etc/freeradius/sites-available/default
e Cambiamo:
files con #files #sql con sql
Aggiungiamo ora un utente di test al nostro database mysql:
echo "INSERT INTO radcheck (UserName, Attribute, Value) VALUES ('mysqltest', 'Password', 'test');" | mysql -u radius radius
Coova-chilli di default utilizza l’username ‘chillispot’ con password ‘chillispot’ per loggarsi al server radius. Dobbiamo quindi aggiungere anche questo utente nel database mysql:
echo "INSERT INTO radcheck (UserName, Attribute, Value) VALUES ('chillispot', 'Password', 'chillispot');" | mysql -u radius radius
Questa impostazione di trova nel file /etc/chilli/config
HS_ADMUSR=chillispot HS_ADMPWD=chillispot
Riavviamo freeradius:
/etc/init.d/freeradius restart
Testiamo infine il corretto funzionamento di freeradius con backend mysql:
radtest mysqltest testsecret 127.0.0.1 0 radiuspassword radtest chillispot chillispot 127.0.0.1 0 radiuspassword
Se tutto è andato bene, dovresti ricevere un output del genere:
Sending Access-Request of id 180 to 127.0.0.1 port 1812 User-Name = "mysqltest" User-Password = "test" NAS-IP-Address = 255.255.255.255 NAS-Port = 0 rad_recv: Access-Accept packet from host 127.0.0.1:1812, id=180, length=20
Configurazione di Coova-Chilli
Prima di tutto copiamo la configurazione di default di Coova-Chilli e Apache2:
cp /etc/chilli/defaults /etc/chilli/config mkdir /var/www/hotspot cd /var/www/hotspot cp /etc/chilli/www/* /var/www/hotspot mkdir /var/www/hotspot/images cp /var/www/hotspot/coova.jpg /var/www/hotspot/images/ mkdir /var/www/hotspot/uam cd /var/www/hotspot/uam wget http://ap.coova.org/uam/ wget http://ap.coova.org/js/chilli.js
Modifichiamo il file index.html per dirgli di utilizzare chilli.js localmente (Coova-Chilli utilizza 10.1.0.1 come IP di esempio, e noi pure):
sed -i 's/ap.coova.org\/js\/chilli.js/10.1.0.1\/uam\/chilli.js/g' /var/www/hotspot/uam/index.html
Modifichiamo il file ChilliLibrary.js per dirgli di utilizzare l’IP corretto:
sed -i 's/192.168.182.1/10.1.0.1/g' /etc/chilli/www/ChilliLibrary.js sed -i 's/192.168.182.1/10.1.0.1/g' /var/www/hotspot/ChilliLibrary.js
Abilitiamo Coova-Chilli all’avvio del sistema, che è disabilitato di default:
vim /etc/default/chilli
START_CHILLI=1 CONFFILE="/etc/chilli.conf"
e avviamo Coova-Chilli:
/etc/init.d/chilli start
A questo punto, se non si sono presentati errori, dobbiamo modificare la configurazione di Coova-Chilli. Il file di configurazione è /etc/chilli/config. per una configurazione basica basterà cambiare poche variabili:
vim /etc/chilli/config
e modifichiamo:
HS_WANIF=eth0 HS_LANIF=wlan0 HS_UAMSERVER=10.1.0.1
Dobbiamo anche modificare il file /etc/chilli/up.sh, in quanto è presente un bug che non configura correttamente iptables:
vim /etc/chilli/up.sh
E aggiungiamo alla fine del file:
[ -e "/var/run/chilli.iptables" ] && sh /var/run/chilli.iptables 2>/dev/null iptables -I POSTROUTING -t nat -o $HS_WANIF -j MASQUERADE
Infine, riavviamo Coova-Chilli:
/etc/init.d/chilli restart
Configurazione di Apache2 e SSL
Dobbiamo ora creare una pagina di login. Coova-Chilli ne ha una di default che possiamo utilizzare:
mkdir -p /var/www/hotspot/cgi-bin zcat -c /usr/share/doc/coova-chilli/hotspotlogin.cgi.gz | sudo tee /var/www/hotspot/cgi-bin/hotspotlogin.cgi sudo chmod a+x /var/www/hotspot/cgi-bin/hotspotlogin.cgi
Modifichiamo ora lo script di login:
/var/www/hotspot/cgi-bin/hotspotlogin.cgi
e decommentiamo:
$uamsecret = "uamsecret"; $userpassword=1;
Passiamo ora alla configurazione di SSL:
Creiamo i certificati:
mkdir /etc/apache2/ssl make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/ssl/apache.pem
Attiviamo SSL:
a2enmod ssl /etc/init.d/apache2 restart
Creiamo ora un VirtualHost per il nostro hotspot:
vim /etc/apache2/sites-available/hotspot
NameVirtualHost 10.1.0.1:443 ServerAdmin [email protected] DocumentRoot "/var/www/hotspot" ServerName "10.1.0.1" Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all Alias "/dialupadmin/" "/usr/share/freeradius-dialupadmin/htdocs/" Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all ScriptAlias /cgi-bin/ /var/www/hotspot/cgi-bin/ AllowOverride None Options ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all ErrorLog /var/log/apache2/hotspot-error.log LogLevel warn CustomLog /var/log/apache2/hotspot-access.log combined ServerSignature On SSLEngine on SSLCertificateFile /etc/apache2/ssl/apache.pem
Abilitiamo il nuovo virtualhost:
a2ensite hotspot /etc/init.d/apache2 reload
A questo punto il vostro hotspot dovrebbe essere funzionante!
Provate ad agganciarvi alla vostra rete Wifi ed aprire qualunque pagina. Dovrebbe apparirvi la pagina di accesso di Coova-Chilli e poi la pagina di login.
Riferimenti
Pingback: Limitare il tempo o il volume dati radius con Rlm_sqlcounter | Luca Rossi - IT Freelance
Ho questo problema: l’utente si autentica a chilli, esce dal browser o spegne
il pc, ad una nuova richiesta di navigazione (dallo stesso pc) non viene richiesta da chilli l’autenticazione.
In pratica, da qualche parte, il server mantiene in memoria la
precedente autenticazione: solo riavviando chilli si torna alle condizioni
iniziali. Da quello che ho capito chilli mantiene l’autenticazione attraverso il mac address del pc.
C’è un modo chilli la resetti in automatico?
Penso che sia possibile inserire un attributo nel radius per settare correttamente il timeout di coova-chilli.
Controlla tra gli attributi che coovachilli supporta nel loro sito!
grazie per il supporto