Cal tenir en compte que una VPN L2TP, que estem configurant aquí, és més segura que un servidor VPN PPTP. OpenVPN és una altra alternativa a les VPN L2TP, però requereix el programari OpenVPN en el dispositiu del client. En canvi, les VPN L2TP estan suportades per defecte en la majoria de sistemes operatius moderns (Windows, Mac OS X, Ubuntu, RHEL, CentOS), així com en dispositius mòbils (iOS [iPhones, iPads], Android i Windows Phone).
Instal·lació del paquet
Has de tenir el repositori EPEL instal·lat per a poder instal·lar xl2tpd. EPEL significa Extra Packages per a Enterprise Linux. Primer, vés a la pàgina de descàrrega del repositori EPEL. Descarrega l’últim rpm de l’EPEL i instal·la’l com es mostra a continuació.
wget http://epel.mirror.net.in/epel/6/i386/epel-release-6-8.noarch.rpm
rpm -Uvh epel-release-6-8.noarch.rpm
Cal tenir en compte que per a una correcta gestió del repositori amb yum, hauries de fer servir
yum -enablerepo="..."
oyum -disablerepo="..."
.
Potencials problemes de versions de OpenSwan amb dispositius iOS darrere de NAT. La versió 2.6.32-18.el6_3 de OpenSwan tenia un error en el qual els dispositius iOS no podien establir una connexió VPN reeixida si es trobaven darrere de NAT, el que inclou intentar una connexió VPN mentre estan connectats a una xarxa cel·lular. Fer un rebaix a la versió 2.6.32-16.el6 va permetre als dispositius iOS connectar-se de nou. Sembla que aquest error està arreglat a partir de la versió 2.6.32-21.2.el6, però tingues en compte que si tens problemes per aconseguir que els dispositius iOS funcionin darrere de NAT, pot ser degut a la versió de OpenSwan que has instal·lat.
Adreces IP en aquest exemple
En els següents fitxers de configuració, es llisten diverses adreces IP. Canvia aquestes IPs perquè coincideixin amb el teu entorn:
- 10.0.100.0/24 – Subxarxa IP LAN interna: Aquesta és la subxarxa IP utilitzada a la teva LAN local on resideix el servidor VPN.
- 10.0.100.3 – IP local utilitzada pel servidor VPN per als túnels L2TP: Aquest és un número completament inventat; estàs assignant una adreça IP al costat del túnel del teu servidor VPN. Assegura’t que la IP que assignis no estigui dins de l’abast de DHCP del teu servidor DHCP.
- 10.0.100.50-100 – Rang d’IP local per ser assignades als clients connectats a la VPN: Tu defines el teu propi rang aquí; assegura’t que estigui a la mateixa subxarxa que la teva LAN local, però que no sigui part de l’abast de DHCP.
- 10.0.100.2 – Adreça IP del servidor VPN: Aquesta és l’adreça IP principal del servidor VPN a la teva LAN local; ha de ser una adreça estàtica o assignada estàticament.
- 10.0.100.1 – Servidor DNS: Aquest és el servidor DNS que utilitzaran els clients connectats a la VPN L2TP.
- 10.0.100.1 – Passarel·la/Encaminador: Aquesta és l’adreça IP de l’encaminador fronterer de la teva xarxa interna; pot ser NAT’ejada.
Fitxers de Configuració
/etc/sysctl.conf
Edita el fitxer per permetre l’encaminament d’IP:
# Controls IP packet forwarding
net.ipv4.ip_forward = 1
Recarrega el sysctl amb aquesta comanda:
sysctl -p
/etc/rc.local
Afegeix el següent bloc al final del fitxer de configuració:
# Correct ICMP Redirect issues with OpenSWAN
for each in /proc/sys/net/ipv4/conf/*; do
echo 0 > $each/accept_redirects
echo 0 > $each/send_redirects
echo 0 > $each/rp_filter
done
/etc/ipsec.conf
En el fitxer ipsec.conf
, defineixes un costat left i right de la connexió IPsec. En aquest exemple, el costat left és la teva LAN interna, mentre que el costat right és el costat remot del client que s’origina al port 1701. Assegura’t de canviar la línia virtual_private
perquè coincideixi amb la subxarxa de la teva LAN interna. NeHelpers està ajustat a 0 per solucionar un missatge d’error quan els ajudants de xarxa no estan disponibles. Plutodebug es pot ajustar a “control” si vols veure missatges registrats a /var/log/pluto.log
. Nota: No suggereixo deixar-ho activat ja que el fitxer de registre creixerà ràpidament fins a una mida massa gran. S’afegeixen línies addicionals a la part inferior de la connexió L2TP-PSK definida per gestionar millor la compatibilitat amb els clients de Mac OSX i iOS.
# /etc/ipsec.conf - Openswan IPsec configuration file
#
# Manual: ipsec.conf.5
#
# Please place your own config files in /etc/ipsec.d/ ending in .conf
version 2.0
# conforms to second version of ipsec.conf specification
# basic configuration
config setup
interfaces=%default route
klipsdebug=none
nat_traversal=yes
nhelpers=0
oe=off
plutodebug=none
plutostderrlog=/var/log/pluto.log
protostack=netkey
virtual_private=%v4:10.0.100.0/24
conn L2TP-PSK
authby=secret
pfs=no
auto=add
keyingtries=3
rekey=no
type=transport
forceencaps=yes
right=%any
rightsubnet=vhost:%any,%priv
rightprotoport=17/0
# Using the magic port of \"0\" means \"any one single port\". This is
# a work around required for Apple OSX clients that use a randomly
# high port, but propose \"0\" instead of their port.
left=%defaultroute\n leftprotoport=17/1701
# Apple iOS doesn't send delete notify so we need dead peer detection
# to detect vanishing clients
dpddelay=10
dpdtimeout=90
dpdaction=clear
#You may put your configuration (.conf) file in the \"/etc/ipsec.d/\" and uncomment this.
#include /etc/ipsec.d/*.conf
/etc/ipsec.secrets
Primer, crea una nova clau d’amfitrió per a la màquina. En aquest exemple s’utilitza una clau precompartida (PSK), però encara és una bona idea generar la clau de la màquina:
ipsec newhostkey --output /etc/ipsec.secrets --bits 2048 --verbose --configdir /etc/pki/nssdb/
A continuació, afegeix una línia amb la adreça IP de la LAN interna del servidor, la variable %any:PSK per utilitzar la clau precompartida, i després defineix la clau precompartida entre cometes.
10.0.1.2 %any: PSK "your PSK here"
En el fitxer /etc/ipsec.secrets
, assegura’t de eliminar o comentar la línia include /etc/ipsec.d/*.secrets,
o bé obtindràs un error i la VPN simplement no es connectarà.
Assegura’t de configurar els permisos del teu fitxer de secrets per mantenir-lo privat.
sudo chown root:root /etc/ipsec.secrets\nsudo chmod 600 /etc/ipsec.secrets
/etc/xl2tpd/xl2tpd.conf
Aquest és el fitxer de configuració del xl2tpd. Assegura’t de canviar el listen-addr per al teu servidor, el rang d’IP per als teus clients VPN i la IP local de la interfície VPN al servidor.
[global]
listen-addr = 10.0.1.2
; requires openswan-2.5.18 or higher - Also does not yet work in combination
; with kernel mode l2tp as present in linux 2.6.23+
ipsec saref = yes
; Use refinfo of 22 if using an SAref kernel patch based on openswan 2.6.35 or
; when using any of the SAref kernel patches for kernels up to 2.6.35.
ipsec refinfo = 30
; works around bug: http://bugs.centos.org/view.php?id=5832
force userspace = yes
[lns default]
ip range = 10.0.100.50-10.0.100.100
local ip = 10.0.1.3
; leave chap unspecified for maximum compatibility with windows, iOS, etc
; require chap = yes
refuse pap = yes
require authentication = yes
name = CentOSVPNserver
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes
/etc/ppp/options.xl2tpd
ms-dns s’ha de configurar amb el servidor DNS que vols que utilitzin els clients de la VPN. Pots especificar diversos servidors DNS afegint múltiples entrades ms-dns en línies separades.
ipcp-accept-local
ipcp-accept-remote
ms-dns 10.0.100.1
# ms-dns 192.168.1.1
# ms-dns 192.168.1.3
# 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
logfile /var/log/ppp.log
/etc/ppp/chap-secrets
Aquest és el fitxer en què defines els comptes d’usuari per a la VPN; estan en parelles de nom d’usuari i contrasenya.
# Secrets for authentication using CHAP
# client server secret IP addresses
user1 * sgrongPassword1 *
user2 * strongPassword2 *
Protegeix el fitxer /etc/ppp/chap-secrets
.
sudo chown root:root /etc/ppp/chap-secrets
sudo chmod 600 /etc/ppp/chap-secrets
Configuració de IPTables
Els ports 1701 TCP, 4500 UDP i 500 UDP haurien d’estar oberts al tallafocs. Si estàs utilitzant IPTables com a tallafocs al teu servidor VPN, executa les següents comandes per permetre l’accés VPN funcional:
#Allow ipsec traffic\niptables -A INPUT -m policy --dir in --pol ipsec -j ACCEPT
iptables -A FORWARD -m policy --dir in --pol ipsec -j ACCEPT
#Do not NAT VPN traffic
iptables -t nat -A POSTROUTING -m policy --dir out --pol none -j MASQUERADE
#Forwarding rules for VPN
iptables -A FORWARD -i ppp+ -p all -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
#Ports for Openswan / xl2tpd
iptables -A INPUT -m policy --dir in --pol ipsec -p udp --dport 1701 -j ACCEPT
iptables -A INPUT -p udp --dport 500 -j ACCEPT
iptables -A INPUT -p udp --dport 4500 -j ACCEPT
#Save your configuration
iptables save
Tingues en compte que si la teva configuració actual del tallafocs conté les següents línies, la connexió VPN fallarà! Elimina aquestes línies si existeixen al fitxer /etc/sysconfig/iptables:
iptables -A INPUT -j REJECT –reject-with icmp-host-prohibited iptables -A FORWARD -j REJECT –reject-with icmp-host-prohibited
Estableix la política de SELinux com a permissiva si SELinux està actiu:
vi /etc/sysconfig/selinux
SELINUX=permissive
Autenticació local d’usuari (PAM /etc/passwd)
Per utilitzar els comptes d’usuari locals a través de PAM (o /etc/passwd), i per tant, no tenir contrasenyes d’usuari en text pla en un fitxer de text, has de fer alguns passos addicionals.
/etc/xl2tpd/xl2tpd.conf
Afegeix la següent línia:unix authentication = yes
i elimina la següent línia:refuse pap = yes
/etc/ppp/options.xl2tpd
Afegeix la següent línia:login
i assegura’t de no afegir la següent línia (a sota diu que l’has d’afegir, però no si vols utilitzar l’autenticació UNIX):require-mschap-v2
/etc/pam.d/ppp
Canvia a això:
auth required pam_nologin.so
auth required pam_unix.so
account required pam_unix.so
session required pam_unix.so
Afegeix el següent a /etc/ppp/pap-secrets
:
* l2tpd "" *
Habilita i Inicia els Serveis
chkconfig xl2tpd on
chkconfig ipsec on
service ipsec start
service xl2tpd start
Opcional
/etc/sysctl.conf
Canvia o afegeix les següents línies.
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.all.log_martians = 0
net.ipv4.conf.default.log_martians = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.icmp_ignore_bogus_error_responses = 1
Després, executa sysctl -p
Solució de problemes
Per veure si la teva configuració d’IPsec sembla correcta, executa la següent comanda:
ipsec verify
També pots habilitar el registre a /etc/ipsec.conf
establint plutodebug com a “control”. Això registrarà missatges a /var/log/pluto.log
. Hi ha un fitxer de registre addicional a /var/log/ppp.log
.