martedì 14 giugno 2011

Server HotSpot per reti Wireless

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

mercoledì 6 aprile 2011

Accedere da PC remoto windows a ubuntu server via Putty

Server e Client openSSH


Putty è un conosciuto e maneggevole client per l'accesso remoto attraveso il protocollo open-SSH.

E' possibile salvare il client Putty sul proprio PC Windows dopo averlo scaricato da questo sito.

Si tratta di un eseguibile che si avvia automaticamente e non ha bisogno di istallazione.

Per poter accedere ad un pc con ubuntu invece bisogna installare su questo l'applicazione server.

Basterà digitare da shell:


sudo apt-get install openssh-server


A questo punto non rimane che avviare l'applicazione client (putty) riempire le caselle di testo come richiesto ed avviare la connessione.

Dopo il log si lavorerà nella finestra di windows come nella shell del server.

Buon Lavoro