Creare un Server VPN L2TP/IPSec su Debian

Tunnel in Codice Binario

Oggi vedremo come creare un server VPN L2TP/IPSec su Debian e Navigare al sicuro!!

Quante volte ci siamo connessi a WiFi disponibili liberamente e ci siamo chiesti “ma sono veramente al sicuro?”, quindi perché non Creare un Server VPN L2TP/IPSec su Debian e toglierci questo problema?

Ovunque troviamo sevizi sia gratuiti che a pagamento per navigare “tranquilli”; io sinceramente continuo a pensare che tali strumenti, da qualche parte dovranno guadagnare, quindi nelle peggiori delle ipotesi, venderanno dati anonimi (ovviamente non sensibili) sulle navigazioni degli utenti.

Ma non è questa la sola situazione per il quale si necessita di una rete VPN, ad esempio possiamo volere una connessione sicura verso il nostro server remoto o ancor meglio limitare l’accesso solo ad essa e non a chiunque.

Quindi perché non instaurare una connessione sicura diretta (“tunnel”) verso la nostra macchina e connettersi al mondo da li?

Ecco di seguito un’immagine di come funziona il Tunnel VPN e subito dopo la spiegazione pratica
Diagramma VPNIl Tipo di VPN che andremo a configurare si basta su L2TP (Layer 2 Tunneling Protocol), di base questo pacchetto non provvede a criptare i dati, quindi andremo a colmare questa mancanza con IPSec.

I pacchetti che andremo ad utilizzare saranno

  • xl2tpd: il servizio che si occuperà della VPN (L2TP)
  • racoon: servizio di scambio chiavi IPSec
  • iptables: per manipolare le regole firewall

Quindi se già non li abbiamo installati provvediamo dando il comando

sudo apt-get install racoon xl2tpd iptables

Racoon

Configuriamo ora racoon per lavorare in modalità PSK (Pre-Shared Key), dunque andiamo a modificare il file /etc/racoon/psk.txt e aggiungiamo una chiave segreta da condividere con tutti i dispositivi che dovranno connettersi, preceduta da un asterisco che sta a specificare che questa chiave è accettabile con tutti gli indirizzi IP.

Attenzione! Questa non è la password dei singoli dispositivi, vedremo come configurarla successivamente.

* ChiaveSegretaCondivisa

Aggiungiamo ora a /etc/racoon/racoon.conf

remote anonymous {
        exchange_mode main;

        generate_policy on;
        nat_traversal on;

        dpd_delay 20;

        proposal {
                encryption_algorithm aes;
                hash_algorithm md5;
                authentication_method pre_shared_key;
                dh_group modp1024;
        }
}

sainfo anonymous {
        encryption_algorithm aes, 3des;
        authentication_algorithm hmac_sha1, hmac_md5;
        compression_algorithm deflate;
}

Il termine “anonymous” indica che non si conoscono gli indirizzi IP dei vari dispositivi che si connetteranno es.: Un telefono che si connette dalla rete dati.

xl2tpd

Terminata la configurazione di racoon, passiamo a xl2tpd, apriamo quindi /etc/xl2tpd/xl2tpd.conf:

[global]
access control = no

Nella sezione “global” disabilitiamo il controllo degli accessi, essendo che come detto prima, non conosciamo gli IP dei client. Successivamente, definiamo la configurazione del server L2TP oppure chiamato “LNS”.

[lns default]
ip range = 192.168.2.1-192.168.2.99
local ip = 192.168.2.100
require authentication = yes
require chap = yes
refuse pap = yes
length bit = yes
name = l2tpd
pppoptfile = /etc/ppp/xl2tpd-options

Come ben si può intender la prima direttiva “ip range” imposta il range di indirizzi disponibili per i nostri client.
La seconda “local ip” definisce l’IP locale del Server VPN L2TP/IPSec su Debian, quindi non l’indirizzo pubblico.
L’autenticazione è abilitata ma per il momento è impostata solo CHAP.

PPPD

PPPD è il software che si occupa di mantenere il tunnel “point-to-point” connesso tra il client ed il server.
Come abbiamo specificato prima nel file di configurazione, apriamo e modifichiamo /etc/ppp/xl2tpd-options:

auth
nodefaultroute
lock
proxyarp
require-chap
ms-dns 8.8.8.8
ms-dns 8.8.4.4

In questo esempio abbiamo abilitato l’autenticazione CHAP, e configurato per la navigazione attraverso VPN, i Server DNS di Google (potrete scegliere i Server DNS che volete).

Possiamo finalmente configurare le credenziali per i singoli client, per far ciò, apriamo il file /etc/ppp/chap-secrets e inseriamo l’esempio che segue:

NomeUtente      l2tpd   password123        *
  • “NomeUtente” = Come specifica, è il nome del client da inserire durante l’autenticazione;
  • “l2tpd” = è il nome del server che avete impostato precedentemente in /etc/xl2tpd/xl2tpd.conf;
  • “password123” = è la password è deve essere inserita come testo semplice;
  • “*” = indica l’indirizzo IP del client, quando è impostato l’asterisco, viene attribuito automaticamente, altrimenti se volete potrete attribuirne uno statico di quelli del range impostato precedentemente.

Impostazione del Firewall

Il forwarding attraverso le interfacce del sistema deve essere abilitato per consentire al tunnel VPN di comunicare con gli altri dispositivi di rete, modifichiamo quindi /etc/sysctl.conf e togliamo il # dalla riga con questa impostazione:

net.ipv4.ip_forward=1

Ora tutti i pacchetti che giungono dalla VPN, avranno l’indirizzo privato, che ovviamente non vi consentirà di navigare sulla rete essendo “sconosciuti”.
Dobbiamo quindi dire ad iptables di riscrivere gli indirizzi che entrano ed escono dalla nostra interfaccia, in questo caso “eth0”.
Inseriamo e modificate secondo le vostre necessità la regola:

iptables -t nat -A POSTROUTING -o eth0 -s 192.168.2.0/24 -j MASQUERADE

Assicuriamoci ora che le connessioni già stabilite o “conseguenti” siano accettate (molto probabilmente avrete già questa regola attiva se avete configurato il vostro firewall):

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

Abilitiamo ora il traffico IKE, NAT-T ed IPSec/esp:

iptables -A INPUT -p udp --dport 500 -j ACCEPT
iptables -A INPUT -p udp --dport 4500 -j ACCEPT
iptables -A INPUT -p esp -j ACCEPT

Infine, l’ultima regola che andremo ad inserire accetterà solo i pacchetti IPSec SA, quindi solo dopo che racoon ha instaurato una connessione point-to-point:

iptables -A INPUT -p udp -m policy --dir in --pol ipsec -m udp --dport 1701 -j ACCEPT

Quest’ultimo passo che andrò ad illustrarvi è facoltativo se non si è dietro NAT, ma io consiglio di farlo ugualmente.
Può capitare che quando il client è dietro una NAT, racoon generi delle politiche IPSec errate, quindi con questa configurazione andremo a forzare il “criptaggio” di tutte le comunicazioni L2TP.

Creiamo un nuovo file /etc/ipsec-tools.d/l2tp.conf ed inseriamo al suo interno:

spdadd 100.200.300.1[l2tp] 0.0.0.0/0 udp -P out ipsec
        esp/transport//require;
spdadd 0.0.0.0/0 100.200.300.1[l2tp] udp -P in ipsec
        esp/transport//require;

Modificate l’indirizzo “100.200.300.1” con l’indirizzo pubblico del server!!

Riavviate e configurate i vostri client, nel mio caso un telefono Android (vedremo in un altro articolo come configurarli) e finalmente avrete il vostro Server VPN L2TP/IPSec su Debian!!

Per qualunque chiarimento, commentate pure di seguito tanto è gratis e privo di registrazione!!!

Sciauusss 😎

3 Commenti

  1. Devo configurare una vpn cisco ipsec su mac high sierra: ho provato con preferenze di sistema ma non mi permette di configurare la porta e quella del server con cui devo comunicare non è standard. Hai qualche suggerimento?

LASCIA UN COMMENTO

Please enter your comment!
Please enter your name here