Operazioni preliminari
Questo How-To prevede l'istallazione e la configurazione di un server ubuntu
versione 10.04.2 LTS come Hot Spot WiFi utilizzando
Freeradius, Mysql, Chillispot.
I prerequisiti per l'installazione sono modesti e possono essere così
esemplificati:
- Un computer con due interfacce di rete (il SERVER), nel nostro caso la
configurazione adottata è PC PIII 1GHz + RAM 128 MByte + HD 10 GByte + 2 NIC
Realtek 8139; - un access-point wireless, non strettamente necessario se si vuole collegare
computer cablati; - un computer (il CLIENT) ulteriore necessario per i test, dotato di un
interfaccia di rete ethernet o wireless e di un browser che supporti i Pop-Up.
In questa scheda vediamo "graficamente" come si prevede interagiscano i computer
________ | | access-point | CLIENT | )))) ((( \|/ ________ Internet |________| | | | | +------| SERVER |------+ rete 192.168.2.0/24 eth1 |________| eth0
E' necessario che il server sia configurato come server LAMP
(Linux/Apache/MySQL/Php/Perl/Pyton); per la verifica digitare da terminale:
tasksel
Configurando la macchina come server è comodo selezionare alcune opzioni
utili per l'uso futuro.
Tastiera e monitor: la macchina, funzionando da server,
presumibilmente non avrà collegato un monitor perche vi si accederà da pc remoto
e per lo stesso motivo non avrà una tastiera. Per evitare che all'avvio il SO si
blocchi per la mancanza della tastiera accedere al bios prima del caricamento
del SO ed impostare la funzione Halt On a "All but keyboard".
Di seguito dopo aver aggiornato la repository del software:
sudo apt-get update sudo apt-get upgrade
installare il pacchetto openssh-server che ci permetterà l'accesso al server
da pc remoto
sudo apt-get install openssh-server
Ora con programmi come putty.exe sarà possibile entrare da remoto nel server.
Impostiamo quindi l'indirizzo IP in modo che sia statico (di norma durante
l'istallazione del SO l'indirizzo IP viene acquisito automaticamente da un server
DHCP). apriamo il file /etc/network/interfaces
sudo nano /etc/network/interfaces
e sostituiamo alle righe...
auto eth0 iface eth0 inet dhcp
le righe...
auto eth0 iface eth0 inet static address 192.168.1.250 netmask 255.255.255.0 network 192.168.1.0 broadcast 192.168.1.255 gateway 192.168.1.1
In questo modo attribuiamo a eth0 l'indirizzo 192.168.1.250 e , con questa
scheda di rete ci collegheremo al router e quindi ad internet.
Aggiungere inoltre, allo stesso file, la seconda scheda di rete (eth1) che servirà per la connessione
ai client wireless;
auto eth1
Penserà Chillispot ad attribuire ai client l'indirizzo opportuno; salvare il file e riavviare il servizio di networking
sudo /etc/init.d/networking restart
Attivare in /etc/sysctl.conf l'IP Forward del router integrato nel Kernel
assicurandosi che sia decommentata la seguente riga:
net.ipv4.ip_forward=1
ed effettuando subito la modifica:
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
Riavviare la configurazione di rete del server
sudo /etc/init.d/networking restart
Aggiungere all'avvio il caricamento del modulo tun. Per farlo aggiungere una
riga con scritto "tun" in /etc/modules. Caricare nel frattempo il modulo con il
comando:
sudo modprobe tun
Server Radius e Database
Installare i pacchetti freeradius e freeradius-mysql:
sudo apt-get install freeradius freeradius-mysql
Con le versioni più recenti di Ubuntu (dalla 8.10 in poi) sarà installata la
versione 2 di FreeRadius, .
Creare il database, che sarà utilizzato per la gestione del sistema di
autenticazione RADIUS, con il seguente comando (rispondere al prompt "Enter
password: " con la password dell'utente DB root e poi digitare al prompt "mysql>
" i comandi seguenti):
mysql -u root -p Enter password: mysqladminsecret mysql> CREATE DATABASE radius;
mysql> quit
Creare un utente con i privilegi di accesso e modifica del database radius con
la struttura delle tabelle:
mysql -u root -p mysql> GRANT ALL PRIVILEGES ON radius.* TO 'radius'@'localhost' IDENTIFIED BY 'mysqlsecret'; mysql> FLUSH PRIVILEGES; mysql> quit
Creare la struttura del database
NB Bisogna loggarsi da root digitando la password perchè l'accesso a questi
file è negato
sudo su enter password mysql -u radius -p radius < /etc/freeradius/sql/mysql/schema.sql mysql -u radius -p radius < /etc/freeradius/sql/mysql/nas.sql exit
Aggiustare il file /etc/freeradius/sql.conf con i dati di connessione al
database appena settati:
server = "localhost" login = "radius" password = "mysqlsecret"
Configurare il client 127.0.0.1 nel file /etc/freeradius/clients.conf
con il
valore della password per le connessioni al server Radius:
client 127.0.0.1 { secret = radiussecret }
Test della configurazione (predefinita) basata su file
La configurazione predefinita di FreeRadius autorizza gli utenti con UserName e
Password da un file che si trova in /etc/freeradius/users. Possiamo effettuare
un test per la configurazione predefinita basata su file prima di modificare la
modalità di autorizzazione da "file" a "sql" (mysql).
Aggiungiamo quindi utente e password al nostro file degli utenti modificando la
riga che inizia con "John Doe":
sudo nano /etc/freeradius/users
Decommentare:
"John Doe" Auth-Type := Local, User-Password == "hello" Reply-Message = "Hello, %u"
A questo punto riavviamo la nostra macchina
reboot
Quindi passiamo alla modalità debug di freeradius dopo aver fermato il servizio
sudo /etc/init.d/freeradius stop sudo freeradius -XXX
Se tutto andrà bene l'ultima riga mostrerà il seguente messaggio:
Mon Mar 24 11:32:35 2008 : Info: Ready to process requests.
Digiyiamo Ctrl + C per uscire dalla modalità di debug
Facciamo ripartire il servizio di Freeradius
sudo /etc/init.d/freeradius start
Effettuiamo il test di autorizzazione basato su file
sudo radtest "John Doe" hello 127.0.0.1 0 radiussecret
Se tutto andrà bene dovreste avere la seguente risposta:
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"
Modalità DataBase
A questo punto possiamo convertire la modalità basata su file con quella basata su
DataBase.
sudo nano /etc/freeradius/radiusd.conf
decommentare la linea
#$INCLUDE sql.conf
quindi aprendo il file /etc/freeradius/sites-available/default:
nano /etc/freeradius/sites-available/default
modifichiamo...
authorize { preprocess chap suffix eap #files ###Cambiare Manualmente sql ###Cambiare Manualmente }
authenticate { Auth-Type PAP { pap
} Auth-Type CHAP { chap } eap } accounting { detail radutmp sql ###Cambiare Manualmente } session { sql ###Cambiare Manualmente
}
E' una buona idea testare questa nuova configurazione prima di andare avanti,
quindi inseriamo un utente nel database:
$ echo "INSERT INTO radcheck (UserName, Attribute, Value) VALUES ('mysqltest', 'Password', 'testsecret');" | mysql -u radius -p radius
E, dopo aver riavviato il servizio freeradius, ritentiamo il test di prima con i nuovi valori:
$ sudo /etc/init.d/freeradius restart $ sudo radtest mysqltest testsecret 127.0.0.1 0 radiussecret
Questo è il risultato...
Sending Access-Request of id 197 to 127.0.0.1 port 1812 User-Name = "mysqltest" User-Password = "testsecret" NAS-IP-Address = 127.0.1.1 NAS-Port = 0 rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=197, length=20
ChilliSpot
Installiamo il pacchetto chillispot, che è presente nella repository di ubuntu.
$ sudo apt-get install chillispot
In fase di installazione, ci saranno rivolte alcune domande per configurare
chillispot. Ecco un elenco delle domande e delle risposte relative:
IP address of radius server 1: 127.0.0.1
Radius shared secret: radiussecret
Ethernet interface for DHCP to listen: eth1
URL of UAM server:
https://10.1.0.1/cgi-bin/hotspotlogin.cgi
URL of UAM homepage:
Shared password between chillispot and webserver: uamsecret
Conviene comunque revisionare il file di configurazione per dare le informazioni
che necessita a ChilliSpot configurando il file /etc/chilli.conf
in modo
opportuno:
net 192.168.2.0/24 ###change manually #dns1 192.168.2.1 #dns2 192.168.2.1 domain domain.org ###change manually radiusserver1 127.0.0.1 radiusserver2 127.0.0.1 radiussecret radiussecret dhcpif eth1 uamserver https://192.168.2.1/cgi-bin/hotspotlogin.cgi #uamhomepage https://192.168.2.1/welcome.html ###change manually uamsecret uamsecret uamlisten 192.168.2.1 ####change manually uamallowed www.google.it,192.168.2.0/24 ###change manually
Nota: uamhomepage è stata commentata perchè è opzionale
Per verificare eventuali errori nel file conf di Chillispot eseguire il comando
sudo /etc/init.d/chillispot start
Se si verifica un errore esso verrà mostrato sul monitor con il numero della
riga relativa che ha causato l'errore. Aprire il file chilli.conf e cercare la
riga per correggere il problema.
Se si riceve il messaggio:
Chillispot captive portal: disabled, see /etc/default/chillispot
aprire il file /etc/default/chillispot ed abilitare il servizio:
nano -w /etc/default/chillispot
ENABLED=1
Installazione Firewall
La procedura di istallazione di ChilliSpot ha creato delle regole per il firewall che vanno
abilitate:
sudo cp /usr/share/doc/chillispot/firewall.iptables /etc/init.d/chilli.iptables sudo chmod a+x /etc/init.d/chilli.iptables sudo ln -s ../init.d/chilli.iptables /etc/rcS.d/S41chilli.iptables
Le regole predefinite per il Firewall sono configurate in modo che eth0 sia
connessa ad internet mentre eth1 alla LAN. Se vogliamo cambiare questo settaggio
apriamo il file:
nano -w /etc/init.d/chilli.iptables EXTIF=eth0 INTIF=eth1
Vale la pena aprire la porta 80 ad eth0 per permettere di gestire i record di
mysql con applicazioni web come phpmyadmin, ezradius, dialup admin o altre.
Quindi apriamo il file /etc/init.d/chilli.iptables e aggiungiamo alla riga:
$IPTABLES -A INPUT -i $EXTIF -p tcp -m tcp --dport 22 --syn -j ACCEPT
la riga:
$IPTABLES -A INPUT -i $EXTIF -p tcp -m tcp --dport 80 --syn -j ACCEPT
Apache Server
Creare la pagina di login
sudo mkdir -p /var/www/hotspot/cgi-bin zcat -c /usr/share/doc/chillispot/hotspotlogin.cgi.gz | sudo tee (segue...) /var/www/hotspot/cgi-bin/hotspotlogin.cgi sudo chmod a+x /var/www/hotspot/cgi-bin/hotspotlogin.cgi
Modifichiamo lo script di login
nano -w /var/www/hotspot/cgi-bin/hotspotlogin.cgi
Decommentiamo e modifichiamo opportunamente la password
$uamsecret = "uamsecret"; $userpassword=1;
SSL
Apache Modules
Per installare il modulo di Apache2 per l'autenticazione via MySQL bisogna
eseguire il seguente comando da terminale:
sudo apt-get install libapache2-mod-auth-mysql
Una volta installato il modulo, questo sarà disponibile nella directory
/etc/apache2/mods-available. Sarà necessario usare il comando
a2enmod per abilitare il modulo. Si potrà utilizzare il comando
a2dismod per disabilitare il modulo. Una volta abilitato il
modulo sarà disponibile nella directory /etc/apache2/mods-enabled.
Setup up di Apache e SSL
Siate sicuri che LAMP server sia installato; se non è così si usi il comando:
tasksel
Creare il certificato
sudo apt-get install ssl-cert sudo mkdir /etc/apache2/ssl
E' necessario trovare il nome del nostro host per il certificato:
hostname -f
(Hardcoding cert lifetime based on this patch:
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=293821#22)
sudo make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/ssl/apache.pem
(Rispondere alle domande)
Nota: l'"HostName" deve essere scritto correttamente in base a quello che
risulta dall'esecuzione del comando hostname -f
host.name #change to your host name
Install Module
Il modulo mod_ssl aggiunge ad apache2 Server una importante possibilità, quella
di criptare le comunicazioni. Così quando il vostro browser comunica usando la
cripazione SSL il prefisso https:// è usato all'inizio dell'URL nella barra
degli indirizzi del browser.
sudo a2enmod ssl /etc/init.d/apache2 force-reload
Creare il virtualhost
Creare un file virtualhost
sudo nano -w /etc/apache2/sites-available/hotspot
e modificarne il contenuto in modo che risulti simile al seguente
NameVirtualHost 192.168.2.1:443 <VirtualHost 192.168.2.1:443> ServerAdmin webmaster@domain.org DocumentRoot "/var/www/hotspot" ServerName "192.168.2.1" <Directory "/var/www/hotspot/"> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> Alias "/dialupadmin/" "/usr/share/freeradius-dialupadmin/htdocs/" <Directory "/usr/share/freeradius-dialupadmin/htdocs/"> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> ScriptAlias /cgi-bin/ /var/www/hotspot/cgi-bin/ <Directory "/var/www/hotspot/cgi-bin/"> AllowOverride None Options ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> 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 </VirtualHost>
Abilitare VirtualHost SSL
sudo a2ensite hotspot /etc/init.d/apache2 reload
Porte in ascolto
La porta 443 deve rimanere in ascolto per HTTPS. E' necessario quindi aggiungere
la stringa seguente al file /etc/apache2/ports.conf :
nano -w /etc/apache2/ports.conf Listen 192.168.1.250:80 <IfModule mod_ssl.c> Listen 192.168.2.1:443 </IfModule>
Server Root
nano -w /etc/apache2/apache2.conf
aggiungere
ServerName 192.168.1.250
Modificare il file host
nano -w /etc/hosts 192.168.2.1 host.name host #cambiare con il proprio nome.host
Riavviare il server di Apache:
sudo /etc/init.d/apache2 restart
Ora il Browser web dovrebbe essere in grado di collegarsi alla pagina
https://192.168.2.1/cgi-bin/hotspotlogin.cgi
e alla pagina
http://192.168.2.1:3990/
Finito
Riavviare il computer e ogni cosa dovrebbe funzionare regolarmente
reboot