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