Installer un serveur L2TP/IPSec

Installer un serveur L2TP/IPSec

09/12/2017 1 Par Vincent

Dans ce tutorial, nous allons voir comment mettre en place un VPN L2TP/IPSec.

J’ai choisi de faire un second tuto sur les VPNs pour la raison suivante : OpenVPN c’est beaucoup plus sécurisé, c’est vrai mais c’est la galère à installer sur un appareil mobile de type téléphone Android ou Apple. L’avantage du VPN IPSec, c’est que le protocole est géré nativement par beaucoup de systèmes d’exploitation : Windows, MacOS, Android, iOS… Il n’y a donc qu’à configurer le client et ça tourne.

Installation des packages sur le serveur

Nous avons besoin forcement d’un serveur qui supportera en réalité deux services : IPSec pour le montage du tunnel et L2TP pour le cryptage avancé des données.

On commence pour installer les services :

apt-get update
apt-get upgrade
apt-get install strongswan ppp xl2tpd

Configuration IPSEC

Pour la configuration IPsec, on va modifier dans un premier temps le fichier /etc/ipsec.conf

version 2.0

config setup
  virtual-private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12,%v4:!192.168.42.0/24,%v4:!192.168.43.0/24
  protostack=netkey
  nhelpers=0
  interfaces=%defaultroute
  uniqueids=no

conn shared
  left=%defaultroute
  leftid=123.456.123.456
  right=%any
  encapsulation=yes
  authby=secret
  pfs=no
  rekey=no
  keyingtries=5
  dpddelay=30
  dpdtimeout=120
  dpdaction=clear
  ike=3des-sha1,3des-sha2,aes-sha1,aes-sha1;modp1024,aes-sha2,aes-sha2;modp1024,aes256-sha2_512
  phase2alg=3des-sha1,3des-sha2,aes-sha1,aes-sha2,aes256-sha2_512
  sha2-truncbug=yes

conn l2tp-psk
  auto=add
  leftprotoport=17/1701
  rightprotoport=17/%any
  type=transport
  phase2=esp
  also=shared

conn xauth-psk
  auto=add
  leftsubnet=0.0.0.0/0
  rightaddresspool=192.168.43.10-192.168.43.250
  modecfgdns1=8.8.8.8
  modecfgdns2=8.8.4.4
  leftxauthserver=yes
  rightxauthclient=yes
  leftmodecfgserver=yes
  rightmodecfgclient=yes
  modecfgpull=yes
  xauthby=file
  ike-frag=yes
  ikev2=never
  cisco-unity=yes
  also=shared

Détail de la config :

– leftid= correspond à l’IP de votre serveur

Ensuite on modifie la clé partagée IPSEC dans le fichier /etc/ipsec.secrets

123.456.123.456  %any  : PSK "superclepsk"

Détail de la config :

– à nouveau, 123.456.123.456 est l’IP de votre serveur ;

– superclepsk : il s’agit de la clé de sécurité, attention à mettre quelque chose de solide.

Les tunnels IPSec purs utilisent les ports UDP 500 et UDP 4500 si vous voulez ajouter des règles de firewall sur votre serveur (ou votre client).

Configuration L2TP

Maintenant on passe à la configuration de xl2tpd, le service L2TP.

Pour cela on commence par modifier le fichier /etc/xl2tpd/xl2tpd.conf

[global]
port = 1701

[lns default]
ip range = 10.0.1.10-10.0.1.100
local ip = 10.0.1.1
require chap = yes
refuse pap = yes
require authentication = yes
name = VPN
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes

Détail de la config :

– port = 1701, correspond au port L2TP. A débloquer dans le firewall ;

– ip range = 10.0.1.10-10.0.1.100, correspond à la plage des ip pour les clients du vpn ;

– local ip = 10.0.1.1, correspond à l’IP du serveur dans le vpn.

Pour le fonctionnement de L2TP, nous avons besoin du port UDP 1701.

Il reste deux fichiers à éditer :

  • le fichier /etc/ppp/chap-secrets
  GNU nano 2.2.6                                                                 File: chap-secrets

# Secrets for authentication using CHAP
# client  server  secret  IP addresses
"superutilisateur" VPN "supermotdepasse" "10.0.1.10"

Détail de la config :

– superutilisateur : c’est le login que vous allez utiliser en plus de la clé ipsec ;

– supermotdepasse : c’est le mot de passe associé au login ;

– VPN : c’est le nom du VPN, ce nom doit être strictement identique au paramètre name = dans le fichier /etc/xl2tpd/xl2tpd.conf ;

– l’IP : correspond à l’IP que vous attribuez à l’utilisateur dont vous venez de déclarer le login/mot de passe. Vous pouvez mettre une astérisque si vous ne voulez pas affecter d’IP.

Vous pouvez ajouter des utilisateurs supplémentaires en ajoutant des lignes en dessous.

  • le fichier /etc/ppp/options.xl2tpd

+mschap-v2
ipcp-accept-local
ipcp-accept-remote
ms-dns 8.8.8.8
ms-dns 8.8.4.4
noccp
auth
mtu 1280
mru 1280
proxyarp
lcp-echo-failure 4
lcp-echo-interval 30
connect-delay 5000

Maintenance, notre serveur est configuré.

Routage du traffic et démarrage des services.

Pour que l’on puisse sortir sur internet une fois le tunnel connecté, il faut créer un règle de NAT :

iptables -t nat -A POSTROUTING -s 10.0.1.0/24 -j MASQUERADE

On peut aller démarrer ou redémarrer les services :

/etc/init.d/ipsec restart
/etc/init.d/xl2tpd restart

Configuration du client : Exemple sous Android

Il ne nous reste plus qu’à configurer notre périphérique pour accéder au tunnel.

Vous avez besoin des éléments suivants :

  • l’adresse ip de votre serveur, dans notre cas : 123.456.123.456
  • la clé PSK(pre-shared key) de votre service IPSEC : superclepsk
  • du couple login/mot de passe que vous avez choisi pour L2TP : superutilisateur & supermotdepasse

La configuration sous Android se passe en deux temps :

  • On configure IPsec après avoir choisi le type de tunnel : L2TP/IPsec

  • On renseigne les identifiants de connexion.

  • On termine par : se connecter et le tour est joué.

Pour vérifier le fonctionnement, chercher des sites du type : DNS Leak, Show my Ip… pour voir si votre IP correspond bien à celle de votre serveur et non celle de votre fournisseur d’accès.

PS: Dans ce tuto, on parle de sécurisation de l’accès internet et de la protection de la vie privée. En aucun cas d’anonymat. Pourquoi ? Parceque si vous installez ce service sur votre propre serveur, c’est bien vous le propriétaire… Vous n’êtes donc pas anonyme. Les plaintes iront à votre fournisseur de serveur à la place de votre fournisseur internet, mais le résultat est le même, vous restez responsable.

Mon travail repose sur l’excellent script trouvé sur Github qui permet la mise en place d’un VPN identique basé sur Libreswan et xl2tpd. C’est par ici : https://github.com/hwdsl2/setup-ipsec-vpn