I. Introduction

Voici une courte introduction pour expliquer ce qu’est L2TP et IPSEC.

L2TP est un protocole réseau utilisé pour la création de VPN.

PPP définit un mécanisme d’encapsulation pour le transport de paquets à travers la couche de liaison (couche n°2, Layer 2 en anglais) de point à point. De manière instinctive, un utilisateur va se connecter au travers de la couche de liaison à un serveur via une connexion ADSL, il appliquera ensuite le mécanisme PPP par dessus cette même connexion. Dans cette configuration, le point de terminaison de PPP et de L2 sera exactement le même (par exemple un serveur physique).

L2TP va étendre le modèle PPP en autorisant les points de terminaison de PPP et de L2 à être différents (tant que ces points de terminaison peuvent communiquer entre eux par un échange de paquets réseaux). L2TP va donc autoriser la connexion avec la couche de laison à un concentrateur (par exemple un serveur qui sert de concentrateur de couche de laision, L2) et autorisera les paquets (PPP) à avoir un point de terminaison différent.

L2TP a évolué, dans sa version v1 et v2 il était défini pour transporter seulement les connexions PPP. Depuis qu’il est passé en v3, il peut transporter n’importe quel autre protocole de niveau 2.

Un paquet L2TP est envoyé sur le réseau via un paquet UDP.

Voici un schéma d’un paquet L2TP :

Shema L2TP

Mais L2TP ne chiffre rien, tout circule en clair !

C’est là qu’intervient IPSEC, il va encapsuler le paquet UDP en plaçant une un IPSEC header avant l’UDP header puis en ajoutant également deux blocs IPSEC après le PPP Payload : un bloc de fin puis un bloc d’authentification pour IPSEC. Il a pour but de chiffrer tout le paquet UDP qu’il englobe.



II. Se connecter au serveur

Repris du tuto de Magicalex

Pour se connecter à un serveur dédié distant, on utilise le plus souvent le protocole SSH. Les logiciels compatibles sont nombreux, mais le plus utilisé reste Putty avec sa variante portable : Kitty.

Télécharger KiTTY

Il y a 2 choses à savoir avec les terminaux SSH :
1. Les mots de passe n’apparaissent pas à l’écran quand on les tape (pas de * non plus)
2. Pas de CTRL+C/CTRL+V pour copier/coller, pour copier : on fait une sélection et cette dernière est automatiquement copier; pour coller : bouton droit. C’est simple non?

Bon, maintenant on se connecte:
- Host Name (or IP adress) : Adresse IP du serveur
- Port : On laisse à 22 et Connexion type SSH
Pour ne pas avoir à retaper ces informations, on peut enregistrer notre session. Pour cela, on clique sur ‘Saved Sessions’, puis on tape le nom de la session (ex: mabox) et on clique sur Save.
Bien mettre le format de caractère en UTF-8 pour ne pas avoir des soucis de copier/coller
Config KiTTY

Il ne nous reste plus qu’à cliquer sur Open pour ouvrir la session.

login as: root
root@XX.XX.XX.XX’s password: (…)

Et voila vous êtes loggé dans votre serveur via SSH.

Sous mac et linux

Ouvrir un terminal puis lancer cette commande :
ssh root@XX.XX.XX.XX -p 22

III. Installation - IPSEC

Pour la partie IPSEC, nous allons installer Openswan :
apt-get update
apt-get install openswan
A la réponse :
Faut-il utiliser un certificat X.509 existant avec cet hôte ?
Répondez : Non

Modifier le fichier de configuration de ipsec /etc/ipsec.conf :
>/etc/ipsec.conf
nano /etc/ipsec.conf
Recopiez cette configuration là : (respectez les tabulations)
version 2.0
config setup
	nat_traversal=yes
	virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/24,%v4:172.16.0.0/12
	oe=off
	protostack=netkey
	plutoopts="--interface=<nom_de_la_carte_réseau>"
conn L2TP-PSK-NAT
	rightsubnet=vhost:%priv
	also=L2TP-PSK-noNAT
conn L2TP-PSK-noNAT
	authby=secret
	pfs=no
	auto=add
	keyingtries=3
	rekey=no
	ikelifetime=8h
	keylife=1h
	type=transport
	left=<ip_server>
	leftprotoport=17/1701
	leftnexthop=%defaultroute
	right=%any
	rightprotoport=17/%any
	dpddelay=15
	dpdtimeout=30
	dpdaction=clear
<nom_de_la_carte_réseau> = nom de la carte réseau

Pour connaitre le nom de la carte, tapez :
ifconfig
Vous allez avoir un truc du genre :

ifconfig

Donc moi ça sera "venet0:0"

<ip_server> = l'ip du serveur

Enfin, on modifie le fichier /etc/ipsec.secrets :
>/etc/ipsec.secrets
nano /etc/ipsec.secrets
On met :
<ip_server> %any: PSK "<secret>"
<ip_server> = l'ip du serveur
<secret> = un genre de mot de passe, sécurisé le bien (Majuscules, minuscules, chiffres, caractères spéciaux)

ex : Ptjty@tyr7ze5çà"f"56 ou tu48g45''é9hn5+htkM

Vous pouvez vérifier que votre clé secrète est sécurisée ici : https://www.grc.com/haystack.htm

On lance ensuite ces deux commandes :
for each in /proc/sys/net/ipv4/conf/*; do echo 0 > $each/accept_redirects && echo 0 > $each/send_redirects; done
echo 1 > /proc/sys/net/ipv4/ip_forward
Ca sert à ce que ton réseau accepte d'aller chercher des requêtes sur le net et vous les renvoie (sans ça le vpn ne sera utile que pour des requêtes locales => pas utile quoi ^^)

Puis on vérifie si l’installation et la configuration d’ipsec est ok :
service ipsec restart
ipsec verify
On doit avoir le résultat suivant :
Checking your system to see if IPsec got installed and started correctly:
Version check and ipsec on-path [OK]
Linux Openswan U2.6.34/K2.6.32-5-xen-amd64 (netkey)
Checking for IPsec support in kernel [OK]
SAref kernel support [N/A]
NETKEY: Testing XFRM related proc values [OK]
[OK]
[OK]
Checking that pluto is running [OK]
Pluto listening for IKE on udp 500 [OK]
Pluto listening for NAT-T on udp 4500 [OK]
Two or more interfaces found, checking IP forwarding [OK]
Checking NAT and MASQUERADEing
Checking for 'ip' command [OK]
Checking /bin/sh is not /bin/dash [OK]
Checking for 'iptables' command [OK]
Opportunistic Encryption Support [DISABLED]

IV. Installation - L2TP

Pour la partie L2TP, nous allons utiliser xl2tpd :
apt-get install xl2tpd
Modifier le fichier de configuration de ipsec /etc/xl2tpd/xl2tpd.con :
nano /etc/xl2tpd/xl2tpd.conf
Recopiez cette configuration là :
[global]
ipsec saref = yes
listen-addr = <ip>
[lns default]
ip range = <ip_range_start>-<ip_range_end>
local ip = <ip_locale>
length bit = yes
require chap = yes
refuse pap = yes
require authentication = yes
ppp debug = yes
name = <name>
pppoptfile = /etc/ppp/options.xl2tpd
Remplacer :

<ip_server> = l'ip du serveur
<ip_range_start> et <ip_range_end> = une range d’adresse ip locales qui sera réservée pour les clients du VPN. Par exemple mettez 10.42.42.1 pour <ip_range_start> et 10.42.42.10 pour <ip_range_end>. Ce qui donne 10 clients (de 10.42.42.1 à 10.42.42.10) pour le VPN. On peut augmenter la range d’ip locales pour augmenter le nombre de clients VPN potentiels.
<ip_locale> = qui sera l’adresse d’interface PPP (en dehors de la range pour les clients). Par exemple 10.42.42.42
<name> = le nom du serveur. Par exemple « Mon-VPN »

On va maintenant créer le fichier suivant /etc/ppp/options.xl2tpd : :
/etc/ppp/options.xl2tpd
require-mschap-v2
ms-dns 8.8.8.8
ms-dns 8.8.4.4
asyncmap 0
auth
crtscts
mtu 1400
mru 1400
lock
hide-password
modem
debug
name l2tpd
proxyarp
lcp-echo-interval 30
lcp-echo-failure 4
ms-dns sont les DNS via lesquels le VPN va s'appuyer, en l'occurrence, ceux là sont à Google, mais vous pouvez mettre ceux que vous souhaitez.

Enfin, nous allons terminer en éditant le fichier suivant /etc/ppp/chap-secrets :
nano /etc/ppp/chap-secrets
#Secrets for authentication using CHAP
# client server secret IP addresses
<utilisateur1> <nom> <password1> 10.42.42.1
<utilisateur2> <nom> <password2> 10.42.42.2
<utilisateur1> = le nom d'utilisateur
<name> = le nom du serveur indiqué dans le fichier /etc/xl2tpd/xl2tpd.con, plus haut
<password> = indiquez un de mot de passe, sécurisé le bien (Majuscules, minuscules, chiffres, caractères spéciaux)

ex : Ptjty@tyr7ze5çà"f"56 ou tu48g45''é9hn5+htkM


V. Sécurité

Nous allons mettre les règles iptables en place pour sécuriser notre serveur VPN. Nous allons supposer que le serveur sert seulement pour le VPN, donc tous les autres flux seront bloqués !

On crée le fichier suivant /etc/init.d/firewall : (merci à Hardware)
nano /etc/init.d/firewall
#!/bin/sh
#
# Fichier de configuration du pare-feu
#
### BEGIN INIT INFO
# Provides:          firewall.sh
# Required-Start:    $syslog $network
# Required-Stop:     $syslog $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start firewall daemon at boot time
# Description:       Custom Firewall scrip.
### END INIT INFO

fw_start () {

  iptables -t filter -P INPUT DROP
  iptables -t filter -P FORWARD DROP
  iptables -t filter -P OUTPUT DROP
  iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
  iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
  iptables -t filter -A INPUT -i lo -j ACCEPT
  iptables -t filter -A OUTPUT -o lo -j ACCEPT
  iptables -t filter -A INPUT -p tcp --dport <port ssh> -j ACCEPT
  iptables -t filter -A OUTPUT -p tcp --dport <port ssh> -j ACCEPT
  iptables -t nat -A POSTROUTING -s 10.42.42.0/27 -j MASQUERADE
  iptables -A INPUT -p tcp --dport 500 -j ACCEPT
  iptables -A INPUT -p tcp --dport 4500 -j ACCEPT

}

fw_stop () {

  iptables -F
  iptables -X
  iptables -t nat -F
  iptables -t nat -X
  iptables -t mangle -F
  iptables -t mangle -X
  iptables -P INPUT ACCEPT
  iptables -P FORWARD ACCEPT
  iptables -P OUTPUT ACCEPT

}

fw_clear () {

  iptables -F
  iptables -t nat -F
  iptables -t mangle -F
  iptables -P INPUT ACCEPT
  iptables -P FORWARD ACCEPT
  iptables -P OUTPUT ACCEPT

}

case "$1" in
start|restart)
  echo -n "Démarrage du pare-feu..."
  fw_stop
  fw_start
  echo "done."
  ;;
stop)
  echo -n "Arrêt du pare-feu..."
  fw_stop
  echo "done."
  ;;
clear)
  echo -n "RAZ des règles..."
  fw_clear
  echo "done."
  ;;
*)
  echo "Usage: $0 {start|stop|restart|clear}"
  exit 1
  ;;
esac
exit 0
<port ssh> = par votre port ssh (/etc/ssh/sshd_config) => Etape très importante sinon vous ne pourrez plus vous connecter…

On lance le firewall et on l’ajoute aux scripts de démarrage :
chmod +x /etc/init.d/firewall
update-rc.d firewall defaults

VI. Conclusion

On lance maintenant IPSEC et L2TP et on les ajoute au démarrage :
/etc/init.d/ipsec start
/etc/init.d/xl2tpd start

update-rc.d ipsec defaults
update-rc.d xl2tpd defaults
Si les services sont déjà démarrés, vous aurez juste des warnings, rien de bien méchant !

Voilà, c’est terminé !

Merci à mon bro', il se reconnaitra peut être

Si vous avez des remarques, des questions, des compliments ... ça se passe ici : http://mondedie.fr/d/6261/1
Répondre…