Poptop

Les tunnels PPTP sont des tunnels qui sont intégrés nativement dans la plupart des OS depuis une dizaine d’années. S’appuyant sur PPP et ajoutant une couche d’authentification plus robuste voire du chiffrement, ils permettent aux utilisateurs distants de pouvoir se connecter à leur réseau d’entreprise.

Installation:

Sous Debian tapez la commande suivante:

aptitude install pptpd radiusclient1

Sous FreeBSD:

cd /usr/ports/net/poptop
make install clean

Configuration du service PPTPD

Ouvrez/créez le fichier /usr/local/etc/pptpd.conf (/etc/pptpd.conf sous Debian) et insérez les lignes suivantes:

#
# PPTPD configuration
#

name pptpd

# Authentication
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
require-mppe-128

plugin radius.so
plugin radattr.so

# Routing
proxyarp
nodefaultroute

# Misc
nobsdcomp
noipparam
logwtmp

Le nom est très important, car c’est ce nom qui permettra de faire le lien entre pptpd et pppd. Si le lien est incorrect et qu’il manque un label, l’erreur suivante apparaîtra dans les logs:

pptp: Configuration label not found

L’authentification est configurée au niveau de sécurité maximal sur MSChapv2, et on refuse explicitement toutes les autres méthodes. On active le chiffrement MPPE-128 bits sur la connexion et enfin on fait le lien avec le plugin du serveur radius.

Les options suivantes permettent

  • aux requêtes ARP d’aboutir (proxyarp)
  • de ne pas distribuer la route par défaut (nodefaultroute)
  • de ne pas utiliser la compression BSD (nobsdcomp) afin d’être interopérable
  • de loguer les connexion en WTMP (logwtmp)

Configuration de PPP (sous FreeBSD uniquement)

Adressage et tunnel

Ouvrez maintenant le fichier /etc/ppp/ppp.conf et ajoutez les lignes suivantes:

loop:
    set timeout 0
    set log phase chat connect lcp ipcp command
    set device localhost:pptp
    set dial
    set login
    set ifaddr 10.4.7.250 10.4.7.1-10.4.7.200 255.255.255.255
    add default HISADDR
    set server /tmp/loop "" 0177

loop-in:
    set timeout 0
    set log phase lcp ipcp command
    allow mode direct

pptp:
    load loop
    disable pap
    disable ipv6cp
    enable proxy
    accept dns
    enable MSChapV2
    enable mppe
    set dns 129.175.196.160
    set device !/etc/ppp/secure
    set radius /etc/ppp/radius.conf

Dans le label loop, changez les IP de ifaddr par celles que vous souhaitez, la première étant l’adresse du tunnel VPN. Il est important que le masque soit 255.255.255.255 afin que vous n’ayez pas de mauvaise surprise !

Dans le label pptp, spécifiez un serveur DNS afin que le client l’utilise de manière préférable à celui de sa connexion physique (accept dns puis set dns ), activez MSChapv2 (enable MSChapV2) et MPPE (enable mppe). On a désactivé IPCP pour IPv6 ici car notre réseau ne le supporte pas (disable ipv6cp).

Créez maintenant le fichier /etc/ppp/secure et insérez les lignes suivantes:

#!/bin/sh
exec /usr/sbin/ppp -direct loop-in

et rendez le exécutable:

chmod +x /etc/ppp/secure

Ceci permettra à PPP de créer une interface de loopback direct pour relier le tunnel et l’interface physique du serveur.

Authentification

Pour terminer on va configurer le serveur Radius en créant le fichier /etc/ppp/radius.conf

auth 10.4.3.1:1812 radPwd
acct 10.4.3.2:1813 radPwd2

Activation du service & NAT

Il faut maintenant nater le trafic du tunnel (à moins que vous ne souhaitiez le router), grâce à Packet Filter. Ouvrez le fichier pf.conf et ajoutez la ligne suivante:

nat on em0 inet proto { tcp, udp, icmp } from 10.4.7.0/24 to any -> <ip publique>

Editez le fichier /etc/rc.conf afin d’ajouter les lignes suivantes:

gateway_enable="YES"
pptpd_enable="YES"

Ensuite rechargez vos règles Packet Filter, activez le routage et lancez le service:

pfctl -f /etc/pf.conf
sysctl -w net.inet.ip.forwarding=1
service pptpd start

Configuration de PPP (Debian uniquement)

Adressage des clients

Dans le fichier /etc/pptpd.conf ajoutez les lignes suivantes permettant de configurer l’IP du tunnel et des clients:

localip 10.4.7.250
remoteip 10.4.7.1-250

Authentification

On va maintenant configurer l’authentification radius, ouvrez le fichier /etc/radiusclient/radiusclient.conf et modifiez les lignes suivantes:

authserver      10.4.3.1:1812
acctserver      10.4.3.2:1813

Ouvrez maintenant le fichier /etc/radiusclient/servers et ajoutez les mots de passe de vos serveurs radius

10.4.3.1 radPwd
10.4.3.2 radPwd2

Activation du service & NAT

Activez le routage en éditant le fichier /etc/sysctl.conf:

net.ipv4.ip_forward=1

puis ajoutez la ligne suivante au fichier /etc/rc.local (permettant le nat au démarrage)

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

et exécutez les lignes suivantes pour prendre en compte la configuration et lancer le service

sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
service pptpd start

Sources

PPTPD + FreeRadius + MySQL