IPSec/L2TP 
Introduzione OpenSwan, rappresenta l'implementazione di IPSec su sistemi Linux. In questa guida spiegheremo come configurare un Gateway VPN - IPSec L2TP con OpenSwan e L2TP. Vedremo anche come configurare un client vpn con Microsoft Windows
XP per la connessione in vpn attraverso un Gateway IPSec L2TP Linux. Inoltre affronteremo anche l'argomento cross-authentication tra un sistema linux(nel nostro caso il vpn gateway) e un dominio Microsoft Windows, ossia vedremo come convalidare
l'accesso di un utente alla VPN gestita da un sistema linux mediante autenticazione inoltrata su un Controller di Dominio Microsoft.
Installazione dei pacchetti Per cominciare, occorre verificare la presenza dei seguenti pacchetti sul server: openswan, l2tpd e ppp nel caso in cui non fossero presenti bisogna installarli
Su Fedora/RedHat
# rpm -ivh openswan-2.4.4-1.1.2.1.i386.rpm # rpm -ivh l2tpd-0.69-0.4.20051030.fc5 # rpm -ivh ppp-2.4.3-6.2.1.i386.rpmè possibile scaricare gli ultimi pacchetti aggiornati, da http://rpm.pbone.net
Su Debian
# apt-get install openswan ppp rpm alien
Purtroppo su debian il pacchetto l2tpd e` ancora in fase "unstable", quindi abbiamo dovuto installare i pacchetti
"rpm" ed "alien" per poter convertire da .rpm a .deb il source l2tpd-0.69-0.2.20051030.al2.src.rpm
Convertiamo il pacchetto dal formato .rpm al formato .deb
1) scaricare il pacchetto source l2tpd con wget
# wget ftp://ftp.icm.edu.pl/vol/rzm/linux-aurora/aurora/extras/2/SRPMS/l2tpd-0.69-0.2.20051030.al2.src.rpm
2) # rpmbuild --rebuild l2tpd-0.69-0.2.20051030.al2.src.rpm
3) # alien /usr/src/rpm/RPMS/i386/l2tpd-0.69-0.2.20051030.i386.rpm
4) # dpkg -i l2tpd_0.69-1.2_i386.deb
a questo punto tutti i pacchetti sono stati installati.
Configurazione di IPSec.
In questa configurazione implementeremo un tunnel IPSec con Preshared Key(PSK), significa che entrambi
client e server condividono la medesima chiave(key) per l`autenticazione.
File di configurazione di IPSec:
/etc/ipsec.conf (file di configurazione principale)
/etc/ipsec.d/ipsec-psk.conf (file di configurazione del tunnel)
/etc/ipsec.secrets (file di configurazione delle preshared keys)
Configurate il file ipsec.conf come segue:
# /etc/ipsec.conf - Openswan IPsec configuration file
version 2.0 # conforms to second version of ipsec.conf specification # basic configuration config setup # Debug-logging controls: "none" for (almost) none, "all" for lots # klipsdebug=none
# plutodebug="control parsing" nat_traversal=yes include /etc/ipsec.d/*.conf
Configurazione del tunnel ipsec-psk - /etc/ipsec.d/ipsec-psk.conf
Su /etc/ipsec.d va creato un file di configurazione per il nuovo tunnel
chiamato ipsec-psk.conf con le seguenti direttive:
conn ipsec-psk
authby=secret
pfs=no
auto=add
keyingtries=3
rekey=no
left=%defaultroute
leftprotoport=17/1701
right=%any
rightprotoport=17/1701
Se desideriamo configurare altri tunnel, e` possibile farlo creando altri file specificando sulla direttiva
"conn ..." il nome del tunnel in maniera univoca.
Configurazione ipsec.secrets - /etc/ipsec.secrets
Qui andiamo a configurare la preshared-key sul file /etc/ipsec.secrets, chiaramente va configurato secondo
le proprie esigenze:
#IP_ADDRESS_SERVER %any : PSK "chiave-condivisa"
# esempio - accetta connessioni da qualsiasi peer 192.168.1.1 %ANY : PSK "L1nuXgu1D3" # esempio - accetta connessioni solo dal peer specificato 192.168.1.1 192.168.1.90 : PSK "L1nuXgu1D3"
A questo punto IPSec e` pronto e possiamo avviare il servizio:
# /etc/init.d/ipsec start
Per verificare se IPSec e` pronto per ricevere richieste di connessioni, lanciare il seguente comando:
# ipsec auto --status
dovreste ottenere qualcosa del genere:
..... <omettiamo parte dell`output>...
000 "ipsec-l2tp": IP_ADDRESS_SERVER:17/1701---GATEWAY...%any:17/1701; unrouted; eroute owner: #0
000 "ipsec-l2tp": ike_life: 3600s; ipsec_life: 28800s; rekey_margin: 540s; rekey_fuzz: 100%; keyingtries: 3
000 "ipsec-l2tp": policy: PSK+ENCRYPT+TUNNEL+DONTREKEY; prio: 32,32; interface: eth1;
000 "ipsec-l2tp": newest ISAKMP SA: #0; newest IPsec SA: #0;
000 "ipsec-l2tp": IKE algorithms wanted: 5_000-1-5, 5_000-1-2, 5_000-2-5, 5_000-2-2, flags=-strict
000 "ipsec-l2tp": IKE algorithms found: 5_192-1_128-5, 5_192-1_128-2, 5_192-2_160-5, 5_192-2_160-2,
000 "ipsec-l2tp": ESP algorithms wanted: 3_000-1, 3_000-2, flags=-strict
000 "ipsec-l2tp": ESP algorithms loaded: 3_000-1, 3_000-2, flags=-strict
..... <omettiamo parte dell`output>...
Configurazione di L2TPD con autenticazione utenti su file locale(sconsigliato) Qui occorre configurare L2TPD e PPP affinchè le connessioni "Layer 2 Tunnel Protocol"
all`interno di IPSec possano avvenire.
Principali file di configurazione di L2TPD/PPP:
/etc/l2tpd.conf o /etc/l2tpd/l2tpd.conf
/etc/ppp/options.l2tpd
/etc/ppp/chap-secrets
Configurate il file /etc/l2pd.conf o /etc/l2tpd/l2tpd.conf come segue adattantolo alle vostre esigenze:
[global]
; listen-addr = 192.168.1.98 [lns default]
; range ip da assegnare ai client ppp che si collegano
ip range = 10.8.0.1-10.8.0.100
;indirizzo da assegnare al server sull`interfaccia ppp
local ip = 10.8.0.254
require chap = yes
require pap = yes
require authentication = yes
name = LinuxVPNserver
ppp debug = yes
pppoptfile = /etc/ppp/options.l2tpd
length bit = yes
Configurate il file /etc/ppp/options.l2tpd come segue adattantolo alle vostre esigenze:
ipcp-accept-local ipcp-accept-remote # dns server ms-dns 192.168.5.4 ms-dns 192.168.1.3 # wins server #ms-wins 192.168.1.2 #ms-wins 192.168.1.4 # noccp auth crtscts idle 1800 mtu 1410 mru 1410 nodefaultroute debug lock proxyarp connect-delay 5000 require-pap require-chap require-mschap require-mschap-v2 noccp nobsdcomp logfile /var/log/l2tpd.log
poi creaimo il file di log per l2tpd:
# touch /var/log/l2tpd.conf
Configurazione del file /etc/ppp/chap-secrets.
All`interno di questo file, andiamo a specificare gli utenti che si autenticheranno via
CHAP sul protocollo PPP per avere accesso alla VPN.
Supponiamo di creare quindi due utenti "user1" con password "pass1" e "user2" con password "pass2".
Il file andrà quindi configurato come segue:
# Secrets for authentication using CHAP # client server secret IP addresses user1 * pass1 * user2 * pass2 *
Questo
ultimo tipo di autenticazione menzionato non e` certamente il massimo della sicurezza, non è scalabile e non permette la
mutua autenticazione(cambio password da parte dell`utente), ma e`
sicuramente un buon approcio per iniziare.
In
alternativa è possibile utilizzare altri sistemi di autenticazione che
offrono piu` sicurezza e scalabilita` come:
- "Unix Authentication" che utilizza gli account locali del sistema(consigliato),
- "Winbind" che puo` utilizzare gli account di un Dominio Microsoft Windows(consigliato).
Autenticazione di tipo "Unix Authentication" E' sufficiente aggiungere la seguente direttiva all`interno del file
di configurazione /etc/l2tpd/l2tpd.conf o /etc/l2tpd.conf:
unix authentication = yes
Autenticazione di tipo "Winbind" in cross-authentication Se
desideri implementare un sistema di autenticazione che consenta
l'accesso alla VPN mediante autenticazione su Dominio Microsoft segui
il seguente paragrafo, altrimenti saltalo.
Configura prima Winbind come indicato su questa guida cliccando QUI e poi configura L2TPD con il supporto del plugin winbind.so Configurazione di L2TPD per il supporto del plugin winbind.so Se
desideri implementare un sistema di autenticazione che consenta
l'accesso alla VPN mediante autenticazione su Dominio Microsoft segui
il seguente paragrafo, altrimenti saltalo.
Prima di procedere con la seguente configurazione devi aver configurato WINBIND
Configurate il file /etc/l2pd.conf o /etc/l2tpd/l2tpd.conf come segue adattantolo alle vostre esigenze:
[global]
; listen-addr = 192.168.1.98 [lns default]
; range ip da assegnare ai client ppp che si collegano
ip range = 10.8.0.1-10.8.0.100
;indirizzo da assegnare al server sull`interfaccia ppp
local ip = 10.8.0.254
require chap = no
require pap = no
require authentication = yes
name = LinuxVPNserver
ppp debug = yes
pppoptfile = /etc/ppp/options.l2tpd
length bit = yes
Configurate il file /etc/ppp/options.l2tpd come segue adattantolo alle vostre esigenze:
ipcp-accept-local ipcp-accept-remote # dns server ms-dns 192.168.5.4 ms-dns 192.168.1.3 # wins server #ms-wins 192.168.1.2 #ms-wins 192.168.1.4 # noccp auth crtscts idle 1800 mtu 1410 mru 1410 nodefaultroute debug lock proxyarp connect-delay 5000 require-pap require-chap require-mschap require-mschap-v2 noccp nobsdcomp logfile /var/log/l2tpd.log plugin winbind.so ntlm_auth-helper "/usr/bin/ntlm_auth --helper-protocol=ntlm-server-1"
Attivazione del routing IP Infine e` necessario attivare l`IP Forwarding per l`inoltro dei pacchetti provenienti dalla VPN verso le reti interne.
Modificare sul file /etc/sysctl.conf la direttiva net.ipv4.ip_forward=1 (0 di default)
oppure lanciare il comando - non rende permanente l'impostazione dopo un reboot
# echo "1" > /proc/sys/net/ipv4/ip_forward
A questo punto il nostro Server VPN e` pronto per accettare connessioni IPSec/L2TP.
Troubleshooting:
I seguenti comandi sono utili per diagnosticare eventuali malfunzionamenti:
# ipsec auto --status # tail -f /var/log/l2tpd.conf
Problemi con Access-list / Firewall
Se il vostro vpn server funge da firewall o ha davanti un firewall,
ricordatevi ti aprire le seguenti porte/protocolli.
IKE usa la porta UDP 500. Il protocollo "ESP" di "IPSec" usa il
Protocollo numero 50, il protocollo "AH" di "IPSec" usa il Protocollo
numero 51, il servizio L2TPD usa la porta UDP 1701.
Dunque assicuratevi che eventuali access-list applicate, siano
configurate cosi` che i protocolli 50, 51 e la porte UDP 500 e 1701 non
vengano bloccate.
Ecco come eventualmente configurare iptables:
- Protocollo ESP di IPSec - ipv6-crypt
# /sbin/iptables -A INPUT -p 50 -j ACCEPT
- Protocollo AH di IPSec - ipv6-auth
# /sbin/iptables -A INPUT -p 51 -j ACCEPT
- Porta UDP 500 - ISAKMP
# /sbin/iptables -A INPUT -p udp --dport 500 -j ACCEPT
- Porta UDP 1701 - L2TPD
# /sbin/iptables -A INPUT -p udp --dport 1701 -j ACCEPT
Configurazione di un Client VPN IPSec/L2TP su Windows XP Per configurare un client VPN IPSec/L2TP, consultare la seguente guida cliccando QUI
|