Creazione di Un Hotspot Wifi con Coova-chilli e scheda Atheros

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

3 thoughts on “Creazione di Un Hotspot Wifi con Coova-chilli e scheda Atheros

  1. Pingback: Limitare il tempo o il volume dati radius con Rlm_sqlcounter | Luca Rossi - IT Freelance

  2. gian

    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?

    Reply
    1. Luca Post author

      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

      Reply

Leave a Reply to gian Cancel reply

Your email address will not be published. Required fields are marked *