PPTP : Point-to-Point Tunneling Protocol (Microsoft)

15 septembre 2006

Télécharger en PDF


Table des matières

I.Fonctionnement 1

II.Implémentation Linux 3

1Client 3

2Serveur 4

III.Et iptables dans tout ça... 5

1Pare-feu serveur 5

a)Établissement de la connexion et tunnel PPP/GRE 5

b)Filtrage du trafic à destination du serveur par le tunnel 6

c)Filtrage du trafic à travers le tunnel vers le réseau interne du serveur 6

2Pare-feu client 7

IV.Configuration du client Windows 7

V.Bibliographie 9


I.Fonctionnement


Le principe du protocole PPTP (RFC2637) (Point To Point Tunneling Protocol) est de créer des trames avec le protocole PPP et de les crypter puis de les encapsuler dans un paquet IP.

Cela permet de relier les deux réseaux par une connexion point-à-point virtuelle acheminée par une connexion IP sur Internet. Cela fait croire aux deux réseaux qu'ils sont reliés par une ligne directe.



On garde, ainsi les adresses des réseaux physiques dans la trame PPP cryptées et cette trame est acheminée normalement sur Internet vers l'autre réseau.



Il permet les opérations suivantes :



La connexion se passe donc ainsi :




On obtient donc une connexion PPP au dessus de la connexion Internet ou Ethernet qui nous donne accès au serveur VPN pptpd. Cette connexion PPP obtient une IP de la plage définie dans la configuration de pptpd. Sur le serveur, on a une connexion de son IP publique vers l'IP virtuelle du client et sur le client c'est l'inverse.



Voici ce que cela donne avec un ping vers une machine derrière le serveur:

11:00:17.003113 IP IP_client > IP_serveur: GREv1, call 128, seq 120, length 101: compressed PPP data

11:00:17.503088 IP IP_client > IP_serveur: GREv1, call 128, ack 116, no-payload, length 12

11:02:12.840243 IP IP_serveur > IP_client: GREv1, call 0, seq 135, ack 139, length 105: compressed PPP data



On voit donc uniquement les paquets cryptés.



Un paquet d'une connexion PPTP ressemble donc à ceci :




Il est encore beaucoup utilisé du fait qu'il est nativement intégré aux systèmes Windows. Mais les protocoles tels que IPSec ou OpenVPN sont bien meilleurs en sécurité et en performances.



II.Implémentation Linux

1Client



Il existe un client PPTP pour Linux acceptant ce protocole de Microsoft : pptp-client (http://pptpclient.sourceforge.net/). Sous Debian le paquetage s'appelle pptp-linux et sous Fedora pptp.



Les étapes d'installation générale sont les suivantes (pour plus de détails voir sur le site de pptp-client) :

Le serveur PPTP peut être indistinctement sur un serveur Windows ou Linux.

2Serveur



Le principal serveur PPTP pour Linux est PopTop. Le paquetage s'appelle pptpd sous Debian. Sous Fedora, vous devez le télécharger depuis le site www.poptop.org.

Il requière pour son installation une partie des étapes d'installation du client PPTP (voir plus haut) :

#### /etc/pptp.conf ####
# Fichier d'options de PPTP
option /etc/ppp/pptpd-options
# Adresse IP publique du serveur PPTP

# que l'on est en train de configurer
localip IP_serveur_VPN
# Plage d'adresses IP à attribuer aux clients qui se connectent
remoteip plage_IP_VPN # par ex: 192.168.0.239-243,192.168.0.245
####

# Nom local pour la connexion PPTP

# (doit correspondre au second champ des lignes de /etc/ppp/chap-secrets)

name nomVPN


# Encryption

# Debian: on systems with a kernel built with the package

# kernel-patch-mppe >= 2.4.2 and using ppp >= 2.4.2, ...

# indique l'authentification pur PPTP

# {{{

refuse-pap

refuse-chap

refuse-mschap

# Utiliser obligatoirement MS-CHAPv2 [Microsoft

# Challenge Handshake Authentication Protocol, Version 2] pour authentification.

require-mschap-v2

# Utiliser un exncryptage MPPE 128-bit

# (MPPE nécessite l'utilisation de MSCHAP-V2 durant l'authentification)

require-mppe-128

# }}}


# Options réseaux et de routage


# permet d'indiquer des DNS primaire et secondaire

# pour les clients PPTP (Linux ou Windows)

#ms-dns IP_dns_primaire

#ms-dns IP_dns_secondaire


# permet d'indiquer des serveurs WINS primaire et secondaire

# pour les clients Windows

#ms-wins IP_wins_primaire

#ms-wins IP_wins_secondaire


# Ajouter une entrée dans la table ARP [Address Resolution Protocol] locale

# avec l'adresse IP et l'adresse MAC Ethernet des clients connectés

# Cela permet de faire comme si le client était sur le réseau interne du serveur

# uniquement nécessaire si le serveur ne fait pas passerelle

proxyarp


# Debian: do not replace the default route

nodefaultroute


# Miscellaneous


# Create a UUCP-style lock file for the pseudo-tty to ensure exclusive

# access.

lock

# Disable BSD-Compress compression

nobsdcomp


#### /etc/ppp/chap-secrets ####
# Il peut y avoir aussi les identifiants de connexion Internet ADSL du serveur

# utilisateur nom VPN mot de passe @IP source
utilisateur nomVPN motdepasse *

####



III.Et iptables dans tout ça...

1Pare-feu serveur

a)Établissement de la connexion et tunnel PPP/GRE



#autorise les paquets PPTP (PPP/GRE) à entrer et sortir

iptables -A INPUT -p gre -j ACCEPT

iptables -A OUTPUT -p gre -j ACCEPT


#autorise la mise en place du tunnel PPTP (authentification)

iptables -A INPUT -p tcp --dport 1723 -j ACCEPT

iptables -A OUTPUT -p tcp --sport 1723 -j ACCEPT



b)Filtrage du trafic à destination du serveur par le tunnel

Pour filtrer le trafic à destination du serveur passant par le tunnel PPTP, on doit définir :

iptables -A INPUT -i pppN sélection_type_paquet -d IP_res_int_serveur -j ACCEPT

iptables -A OUTPUT -o pppN sélection_type_paquet -s IP_res_int_serveur -j ACCEPT



Par exemple, pour des pings et des connexions HTTP sur le serveur :

#autorise les pings des clients vers le serveur

iptables -A INPUT -i pppN -p icmp --icmp-type echo-request -d IP_res_int_serveur -j ACCEPT

iptables -A OUTPUT -o pppN -p icmp --icmp-type echo-reply -s IP_res_int_serveur -j ACCEPT


#autorise les connexions HTTP des clients vers le serveur

iptables -A INPUT -i pppN -p tcp --dport 80 -d IP_res_int_serveur -j ACCEPT

iptables -A OUTPUT -o pppN -p tcp --sport 80 -s IP_res_int_serveur -j ACCEPT



c)Filtrage du trafic à travers le tunnel vers le réseau interne du serveur

Le principe est le même que précédemment à l'exception que l'on utilise uniquement la chaîne FORWARD. Il faudra en plus activer l'IP forwarding/SNAT pour autoriser les paquets à traverser le serveur :

iptables -A FORWARD -i pppN sélection_type_paquet -d IP_res_int_serveur -j ACCEPT

iptables -A FORWARD -o pppN sélection_type_paquet -s IP_res_int_serveur -j ACCEPT



Activation de l'IP forwarding/SNAT :

# effectuer la NAT des paquets traversant le serveur PPTP

iptables -t nat -A POSTROUTING -s plage_IP_client_VPN -o interface_LAN -j SNAT --to-source IP_serveur_LAN


#active le forwarding

echo 1 > /proc/sys/net/ipv4/ip_forward



Par exemple, pour des pings et des connexions HTTP sur le serveur :

#autorise les pings des clients vers le LAN du serveur

iptables -A FORWARD -i pppN -p icmp --icmp-type echo-request -d Adresse_LAN_serveur -j ACCEPT

iptables -A FORWARD -o pppN -p icmp --icmp-type echo-reply -s Adresse_LAN_serveur -j ACCEPT


#autorise les connexions HTTP des clients vers le LAN du serveur

iptables -A FORWARD -i pppN -p tcp --dport 80 -d Adresse_LAN_serveur -j ACCEPT

iptables -A FORWARD -o pppN -p tcp --sport 80 -s Adresse_LAN_serveur -j ACCEPT


#autorise les résolutions DNS des clients vers le LAN du serveur

iptables -A FORWARD -i pppN -p udp --dport 53 -d Adresse_LAN_serveur -j ACCEPT

iptables -A FORWARD -o pppN -p udp --sport 53 -s Adresse_LAN_serveur -j ACCEPT

2Pare-feu client


Le pare-feu client peut se simplifier ainsi : « autorisation de tout trafic à travers le tunnel PPTP ».


Pour l'initialisation de la connexion PPTP :


#autorise les paquets PPTP (PPP/GRE) à entrer et sortir

iptables -A INPUT -p gre -j ACCEPT

iptables -A OUTPUT -p gre -j ACCEPT


#autorise la mise en place du tunnel PPTP (authentification)

iptables -A INPUT -p tcp --dport 1723 -j ACCEPT

iptables -A OUTPUT -p tcp --sport 1723 -j ACCEPT



Pour le traffic passant par le tunnel :


#autorise le trafic par le tunnel PPTP sur pppN

iptables -A INPUT -i pppN -j ACCEPT

iptables -A OUTPUT -o pppN -j ACCEPT



IV.Configuration du client Windows



Pour configurer un client PPTP sous Windows (peut varier en fonction des versions) :


























V.Bibliographie

PPTP Client

Protocole PPTP (Point-to-Point Tunneling Protocol)

Poptop - Open Source PPTP Server

sharevb