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