Skip to content

Serveur VPN avec l2tp et ipsec

Julien Thomas edited this page Feb 7, 2016 · 17 revisions

table des matières

architecture
préparer la carte SD depuis OS X
se connecter au Rpi en SSH
configurer le système
gérer les packages
installer le serveur VPN l2tp/ipsec
sécuriser avec un firewall
configurer le modem
sources

architecture

internet -------------------------------- modem -------------------------------- Rpi
                            [IP publique]       [192.168.1.254]                  [192.168.1.253]

préparer la carte SD depuis OS X

lister les disques

$ diskutil list

copier l'image sur la carte

$ sudo dd if=[chemin de l'image] of=[carte SD] bs=1m

par exemple : carte SD = /dev/disk1

la liste des images : http://www.raspberrypi.org/downloads

se connecter au Rpi en SSH

$ ssh pi@[adresse dynamique du Rpi obtenue par DHCP]

par défaut, mot de passe du compte pi : raspberry

configurer le système

au premier démarrage

$ sudo raspi-config
  • memory split pour modifier l'allocation de la mémoire : choisir 16
  • si configure_keyboard, taper setxkbmap fr pour mettre le clavier en français

modifier le mot de passe root

$ sudo passwd root

installer l'éditeur de texte VIM

$ sudo apt-get install vim
$ sudo update-alternatives --config editor

modifier la configuration de sudo

$ sudo visudo

et supprimer la ligne concernant l'utilisateur pi

modifier la configuration réseau pour utiliser une IP fixe

$ sudo vim /etc/network/interfaces
---------
iface eth0 inet static
address 192.168.1.253
netmask 255.255.255.0
gateway 192.168.1.254
$ sudo vim /etc/resolv.conf
---------
nameserver 192.168.1.254

redémarrer les services

$ sudo /etc/init.d/networking restart

configurer ssh

$ sudo /etc/ssh/sshd_config
---------
[...]
PermitRootLogin no
[...]
X11Forwarding no
[...]
AllowUsers pi

redémarrer le service

$ sudo /etc/init.d/ssh restart

configurer le serveur de temps

$ sudo apt-get install ntpdate
$ sudo ntpdate -u ntp.ubuntu.com

gérer les packages

voir la liste des commandes apt-get exécutées

$ more /var/log/apt/history.log

cet historique permet d'identifier les packages à supprimer

supprimer des packages inutiles et de leurs dépendances

$ sudo apt-get purge --auto-remove scratch smartsim penguinspuzzle debian-reference-en dillo
$ sudo apt-get purge --auto-remove idle3 python3-tk idle python-pygame python-tk
$ sudo apt-get purge --auto-remove lightdm gnome-themes-standard gnome-icon-theme raspberrypi-artwork
$ sudo apt-get purge --auto-remove omxplayer wpagui
$ sudo apt-get purge --auto-remove gvfs-backends gvfs-fuse desktop-base lxpolkit netsurf-gtk zenity
$ sudo apt-get purge --auto-remove xdg-utils xpdf gtk2-engines alsa-utils lxde lxtask menu-xdg gksu midori
$ sudo apt-get purge --auto-remove xserver-xorg xinit xserver-xorg-video-fbdev
$ sudo apt-get purge --auto-remove dbus-x11 libx11-6 libx11-data libx11-xcb1 x11-common x11-utils
$ sudo apt-get purge --auto-remove lxde-icon-theme gconf-service gconf2-common

mettre à jour le système

$ sudo apt-get update
$ sudo apt-get upgrade

purger tous les packages qui ne sont plus utilisés

$ sudo apt-get autoremove

installer le serveur VPN l2tp/ipsec

installer les packages

$ sudo apt-get install openswan xl2tpd ppp lsof

éditer les fichiers de configuration

$ sudo vim /etc/ipsec.secrets
---------
192.168.1.254 %any : PSK "[clé secrète]"
$ sudo vim /etc/ipsec.conf
---------
version 2.0

config setup
        nat_traversal = yes
        virtual_private=%v4:192.168.1.0/16
        oe = off
        protostack = netkey

include /etc/ipsec.d/l2tp-psk.conf
$ sudo vim /etc/ipsec.d/l2tp-psk.conf
---------
conn L2TP-PSK-NAT
        rightsubnet = vhost:%priv
        also = L2TP-PSK-noNAT

conn L2TP-PSK-noNAT
        authby = secret
        pfs = no
        auto = add
        keyingtries = 3
        # we cannot rekey for %any, let client rekey
        rekey = no
        # l2tp-over-ipsec is transport mode
        type = transport
        # Apple iOS doesn't send delete notify so we need dead peer detection to detect vanishing clients
        dpddelay = 15
        dpdtimeout = 30
        dpdaction = clear
        # route and protocol
        left = 192.168.1.253
        leftprotoport = 17/1701
        leftnexthop = 192.168.1.254
        right = %any
        rightprotoport = 17/%any
$ sudo vim /etc/xl2tpd/xl2tpd.conf
---------
[global]
ipsec saref = yes

[lns default]
ip range = 192.168.1.231-192.168.1.235
local ip = 192.168.1.253
refuse chap = yes
refuse pap = yes
require authentication = yes
ppp debug = yes
pppoptfile = /etc/ppp/options
length bit = yes
$ sudo vim /etc/ppp/options
---------
require-mschap-v2
ms-dns 192.168.1.254
asyncmap 0
auth
crtscts
lock
hide-password
modem
debug
name l2tpd
proxyarp
lcp-echo-interval 30
lcp-echo-failure 4
$ sudo vim /etc/ppp/chap-secrets
---------
# Secrets for authentication using CHAP
# client        server  secret                  IP addresses
[login]         *       [password]              *
$ sudo vim /etc/sysctl.conf
---------
kernel.printk = 3 4 1 3
net.ipv4.ip_forward = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
vm.swappiness=1
vm.min_free_kbytes = 8192
$ sudo vim /etc/rc.local
---------
for vpn in /proc/sys/net/ipv4/conf/*; do
  echo 0 > $vpn/accept_redirects;
  echo 0 > $vpn/send_redirects;
done
$ sudo update-rc.d -f ipsec remove
$ sudo update-rc.d ipsec defaults

redémarrer les services

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

vérifier la configuration

$ sudo ipsec verify

sécuriser avec un firewall

$ sudo apt-get install shorewall
$ sudo vim /etc/default/shorewall
---------
[...]
startup=1
[...]
$ sudo vim /etc/shorewall/zones
---------
#ZONE          TYPE             OPTIONS             IN           OUT
#                                                   OPTIONS      OPTIONS
fw             firewall
net            ipv4
vpn            ipv4
$ sudo vim /etc/shorewall/interfaces
---------
#ZONE   INTERFACE       BROADCAST       OPTIONS
net     eth0            detect          dhcp,routefilter,tcpflags
vpn     ppp+            -
$ sudo vim /etc/shorewall/policy
---------
#SOURCE         DEST            POLICY          LOG LEVEL       LIMIT:BURST
fw              all             ACCEPT
net             all             DROP            info
vpn             fw              ACCEPT
vpn             net             ACCEPT

# The FOLLOWING POLICY MUST BE LAST
all             all             REJECT          info
$ sudo vim /etc/shorewall/rules
---------
#ACTION         SOURCE  DEST    PROTO   DEST    SOURCE
#                                       PORT(S) PORT(S)

# Drop Ping from the "bad" net zone.. and prevent your log from being flooded
Ping(ACCEPT)    net     fw

# Permit all ICMP traffic FROM fw TO net
ACCEPT          fw      net     icmp

# Permit SSH connection FROM net TO fw
ACCEPT          net     fw      tcp     22

# Permit l2tp/ipsec VPN FROM net TO fw
ACCEPT          net     fw      udp     500
ACCEPT          net     fw      udp     1701
ACCEPT          net     fw      udp     4500

vérifier la configuration

$ sudo shorewall check

redémarrer le service

$ sudo /etc/init.d/shorewall restart

configurer le modem

ajouter des règles NAT des ports 1701, 500 et 4500 vers le Rpi (192.168.1.253)

sources