VPN

De ClissXXI.

Sommaire

Outils de référence

IPSec

  • IPSec: utilise de nouveaux protocoles IP (AH/50 et ESP/51). Nécessite un support noyau (natif ou KLIPS(=*swan)) et un démon optionnel pour la gestion de clefs, en principe interopétables.
    • strongSwan
    • Openswan
    • intégré au noyau
    • racoon
    • ... à trier ...
    • Utilisé par L2TP/IPSec, inclus dans Woe (2K et + ?)
    • Pare-feu: protocoles IP 50/AH et 51/ESP, ports 500/udp (isakmp) et 4500/udp (ipsec-nat-t / NAT traversal); 1701/udp l2tp (?)

L2TP

IPSec est utilisé sous Windows > 2K avec L2TP.

Une page très (trop) fournie: http://www.jacco2.dds.nl/networking/openswan-l2tp.html

Implémentations:

  • xl2tpd: reprise de l'abandonné l2tpd, releases récentes (2007). *l2tpd serait le seul à proposer la gestion d'un pool d'IP, les autres solutions déléguant la chose à RADIUS.
  • l2tpns: ne fait pas client deb
  • OpenL2TP: nécessite un pilote noyau
  • Autres

PPTP

Client

  • pptpclient: client GNU/Linux [1] [2]
  • Inclus dans MS Woe depuis 95OSR2. Failles de sécurité dans la conception ainsi que dans l'implémentation, à réserver en solution de secours.

Support noyau: cf. QEMU#VPN

Configuration:

# Installer pptpclient:
aptitude install pptp-linux

# /etc/ppp/options.pptp est automatiquement créé, sinon cf [3]

# Description du VPN distant:
cat <<EOF > /etc/ppp/peers/myconnection
file /etc/ppp/options.pptp
# Username (1st field in /etc/ppp/chap-secrets)
name sylvain
# Remote name (2nd field in chap-secrets, not needed if there's "*")
remotename myconnection
# Use a command instead of a real tty
pty "pptp passerelle.vpn.net --nolaunchpppd"
EOF

# Fichier de mot de passe:
cat <<EOF > /etc/ppp/chap-secrets
sylvain myconnection mypassword
# or more simply, if "sylvain" isn't used for another connection:
sylvain * mypassword
EOF

Serveur

  • Configuration serveur: [4]
  • Pare-feu: protocole IP 47/GRE, 1723/tcp
    • Apparemment le traffic GRE est inclus dans RELATED,ESTABLISHED - sauf pour le réseau local?
    • Utiliser -i ppp+ pour une règle s'appliquant sur toutes les interfaces ppp0, ppp1, ppp2, etc.
  • Support MPPE inclus dans le noyau Linux depuis v2.6.15

Configuration serveur:

# Installer PoPToP:
aptitude install pptpd

# Authoriser l'accès vers sylvain@cliss21 pour toute adresse IP
# (recopier le chap-secrets du client et ajouter une '*' à la fin)
# Le nom du serveur peut être différent sur le serveur et le client
# mais doit correspondre à /etc/pptpd.conf:name
cat <<EOF >> /etc/ppp/chap-secrets
sylvain       pptp       motdepasse      *
EOF

# Configurer le nom du serveur distant
sed -i -e 's/^name .*$/name cliss21/' /etc/ppp/pptp-options

À creuser: accel-pptp qui annoncent de meilleurs performances via l'utilisation d'un module noyau.

Sécurité

Si vous utilisez un mot de passe qui se trouve dans le dictionnaire de l'attaquant, asleap le trouve immédiatement:

# ./genkeys -r /etc/dictionaries-common/words -f dict.dat -n dict.idx
genkeys 1.4 - generates lookup file for asleap. <jwright@hasborg.com>
Generating hashes for passwords (this may take some time) ...Done.
98570 hashes written in 0.25 seconds:  393931.74 hashes/second
Starting sort (be patient) ...Done.
Completed sort in 724210 compares.
Creating index file (almost finished) ...Done.
# time ./asleap -i eth0 -f dict.dat -n dict.idx
asleap 1.4 - actively recover LEAP/PPTP passwords. <jwright@hasborg.com>
Using the passive attack method.

Captured PPTP exchange information:
        username:          sylvain
        auth challenge:    a0aa0d2e0ca2fde8e36d6a6c69002e9e
        peer challenge:    5568ef7b804b35ac77e757aaafa64afa
        peer response:     06e1349f2a38048f3702a728e46d9c440b0cd67918d697e1
        challenge:         8e5fe08c7dcdbb6e
        hash bytes:        89f1
        NT hash:           5fd76204806b2fffa86f8fbedf9189f1
        password:          zwieback
Closing pcap ...

real    0m3.006s
user    0m0.116s
sys     0m0.004s

Également vulnérable à une attaque de type rainbow (force brute efficace pour algorithme de cryptage sans perturbation/salt), mais je n'ai pas trouvé d'outil tout prêt.

OpenVPN

  • OpenVPN: solution basée sur TLS, ne nécessite aucun support noyau. Non intégré à Woe. Clients et GUI dispos pour GNU/Linux et Woe.
    • Pare-feu: 1194/udp (+ peut-être tcp pour le transport over TCP introduit dans la 1.5)

TCP over TCP

À creuser

  • VTun: Tun/Tap apparemment bien exploité. La documentation du noyau Linux dit qu'il peut faire VPN. Je n'ai rien trouvé dans la doc :/

Vieux

  • FreeS/WAN: abandonné et continué via les forks Openswan et strongSwan.
  • secvpn: construit un VPN à base de SSH et ppp, suivant le VPN HOWTO. TCP over TCP. Vieux.

Liens

iptables -v -t nat -A PREROUTING -i ppp+ -d 10.22.8.0/24 -j NETMAP --to 192.168.1.0/24
iptables -v -t nat -A POSTROUTING -o ppp+ -s 192.168.1.0/24 -j NETMAP --to 10.22.8.0/24
Outils personnels