Ultimamente si è assistito ad una crescita del numero di utenti che utilizzano
Linux come sistema operativo principale. Ciò può essere motivato in
molti modi. Ad esempio, se si guarda alla sfera degli utenti desktop, si può ragionevolmente
affermare che sistemi come Microsoft Windows sono più esposti a vulnerabilità di
sicurezza, e talvolta anche meno stabili. Se ci si sposta sull’ambito dei sistemi
server, in realtà il discorso è pressocchè analogo.
Se, però, si pensa alla configurazione ed installazione di pacchetti software, i
vantaggi nell’uso di Linux sono meno evidenti. Se pensiamo di dovere installare
software tipo Skype, Firefox, VLC e simili, distribuzioni Linux moderne come Ubuntu,
Fedora o openSUSE ci semplificano notevolmente ogni processo di configurazione.
Ma se si pensa di volere configurare un server VPN, la questione
(seppur risolvibile più o meno agevolmente) non è egualmente banale.
In questo articolo vedremo proprio in che modo possiamo configurare una VPN sul
nostro PC, utilizzando Ubuntu come sistema operativo server. Collegandoci,
poi, alla nostra VPN personale, potremo mascherare a chiunque altro tutto il traffico
in uscita, dal momento che esso sarà interamente diretto, per esempio, verso casa
nostra (dove si troverà il nostro server VPN).
Esistono due soluzioni per le VPN, vale a dire OpenVPN e PPTP
VPN. In questo tutorial ci soffermeremo su quest’ultima opzione.
Configurazione del server VPN
Installazione e configurazione di PPTP
Si Supponga che le interfacce di rete siano eth0 verso
Internet e eth1 verso la
LAN
Si supponga che l'ip interno della scheda direte eth1 sia 192.168.1.1
Si supponga che il range di indirizzi ip che si vuole affibbiare al pc rientri tra
i seguenti ip: 192.168.1.100-200
Si supponga che la LAN abbia indirizzamento 192.168.1.0/24
La prima cosa di cui ci occuperemo sarà proprio la configurazione del server VPN,
ovvero quel software che ha il compito di assegnare gli IP alle macchine che vi
si collegheranno. Installiamo quindi il pacchetto PPTP sul nostro
server. Possiamo farlo sfruttando il comando apt-get, dal momento che
su Ubuntu questo pacchetto è già presente sui repository. Per essere anche certi
di installare la versione più aggiornata, procediamo come segue:
sudo apt-get update
sudo apt-get install pptpd
|
Completata l’installazione, dobbiamo modificare il file di configurazione /etc/pptd.conf.
Possiamo farlo con un editor grafico come gedit:
sudo gedit /etc/pptpd.conf
|
o se preferiamo (e se sappiamo come utilizzare un editor di testo a riga di comando)
possiamo usare vi o nano:
sudo nano /etc/pptpd.conf
|
Aperto questo file, dobbiamo aggiungere le seguenti due linee in fondo ad esso:
localip 192.168.1.1
remoteip 192.168.1.100-200
|
Queste due linee specificano l’IP che utilizzerà il server VPN (in questo caso 192.168.1.1, ma ovviamente questo varierà caso per
caso), ed il range di IP da assegnare ai client che si connetterano con il server
(specificato a seguito di remoteip).
Aggiungere gli utenti
Il prossimo passo consiste nell’aggiungere nuovi utenti. Per farlo, dovremo aprire
e modificare il file /etc/ppp/chap-secrets con un editor a nostra scelta.
Per ogni utente, dovremo aggiungere il nome del client, seguito dal server, la password
e l’indirizzo IP. Quindi, le righe che aggiungeremo saranno simili alle seguenti:
utente1 pptpd password *
utente2 pptpd password *
|
In realtà abbiamo utilizzato gli asterischi (*) anziché gli indirizzi
IP, in modo da consentire ad ogni indirizzo IP di connettersi tramite il server
VPN che stiamo configurando. Ovviamente questa scelta dipende da quanto vogliamo
che sia privato e sicuro il nostro server, e ciò va valutato caso per caso.
Specificare i DNS
Sebbene questo passaggio sia opzionale, è sempre bene specificare quali DNS si vogliono
utilizzare per il nostro server VPN. Esistono due opzioni preferibili: gli OpenDNS
ed i DNS di Google. Nel primo caso, gli indirizzi sono 208.67.222.222
e 208.67.220.220; i server DNS di Google, invece, sono più facilmente memorizzabili:
8.8.8.8 e 8.8.4.4. Possiamo specificare quali usare modificando
il file /etc/ppp/pptpd-options, aggiungendo due linee come le seguenti:
ms-dns 8.8.8.8
ms-dns 8.8.4.4
|
Completare la configurazione di PPTP
Per completare, avviamo il demone di PPTP come segue:
Apriamo quindi il file /etc/sysctl.conf e verifichiamo che esso contenga
la linea seguente:
Se tale linea non è presente, copiamola ed incolliamola nel file, salviamolo ed
aggiorniamo la configurazione con il comando:
Infine, se voglimo che i client comunichino gli uni con gli altri, possiamo aggiungere
le opportune regole iptable come segue:
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE &&
iptables-save
|
Ovviamente dovremo sostituire eth0 con la connessione utilizzata dal
server (e possiamo capirlo dando un’occhiata agli output dei comandi iwconfig
ed ifconfig). Quindi, procediamo come segue:
# iptables --table nat --append POSTROUTING --out-interface
eth0 -j
# iptables -I INPUT -s 192.168.1.0/24 -i eth0 -j ACCEPT
# iptables --append FORWARD --in-interface eth1 -j ACCEPT
|
A questo punto la configurazione è completato, ed il nostro server VPN è pronto
e funzionante. Nella seconda parte di questo articolo vedremo come collegarci da
un client al nostro server.
OSSERVAZIONI
Questa configurazione è valida se la chain di INPUT e in default ACCEPT
le ulteriori configurazioni che vanno fatte sono:
iptables -P INPUT DROP
creazione della catena pptp per la gestione della VPN
iptables -N pptp
inserimento all'interno della catena delle regole che accettano il flusso di
pacchetti per la gestione della VPN, cioè:
I pacchetti TCP verso la porta 1723
iptables -A pptp -p tcp --destination-port 1723 --dst 192.168.100.1 -j ACCEPT
Il protocollo GRE
iptables -A pptp -p 47 --dst 192.168.100.1 -j ACCEPT
a questo punto bisogna ripetere l'inserimento delle regole sopra anche per
l'indirizzo ip pubblico al quale va fatta la connessione VPN.
iptables -A INPUT -p tcp --dport 1723 -j ACCEPT
iptables -A INPUT -p 47 -j ACCEPTT
Configurazione del client linux per accedere ad una VPN
Abbiamo visto come configurare un server VPN su Linux. Per completare la nostra
discussione, vediamo brevemente in che modo un client Debian-based
può connettersi al nostro server. Ovviamente, con una diversa procedura (che qui
non approfondiremo), potremo connetterci al nostro server VPN anche utilizzando
sistemi operativi diversi, siano essi desktop come Mac OS X e Windows, oppure mobile,
come Android e iOS.
Per prima cosa, dobbiamo assicurarci che il nostro client abbia il pacchetto pptp
installato. Abbiamo già visto come installarlo, ma per completezza ripetiamo di
seguito le due righe di apt che ce lo consentono:
sudo apt-get update
sudo apt-get install pptp-linux
|
A questo punto carichiamo il modulo ppp_mppe in questo modo:
Dobbiamo adesso creare un file di configurazione, che conterrà le informazioni necessarie
per effettuare la connessione al nostro server. Questo file dovrà essere creato
all’interno della directory /etc/ppp/peers/, e possiamo dargli un nome
qualsiasi. Per esempio, immaginiamo di chiamare il nostro file vpnserver,
e facciamo sì che il suo contenuto sia il seguente:
pty "pptp --nolaunchpppd"
name computer1
password password
remotename PPTP
require-mope-128
|
Quindi potremo connetterci con questo comando:
Non ci resta che specificare la direttiva di routing corretta, ed il gioco è fatto.
Assumendo che l’indirizzo IP Pubblico del nostro server sia 172.20.0.0,
procediamo come segue:
ip route add 172.20.0.0/20 dev ppp0
|
Dove ppp0 è l'interfaccia di rete USB del modem per la connessione.
Possiamo ripetere questa operazione per ogni client Linux Debian-based che vogliamo
connettere al nostro server VPN.