J'ai posé la question sur les forums de Smoothwall Express mais ils sont naturellement réticents à fournir une aide trop importante. Après tout, ils veulent vraiment vendre la version commerciale.
Je dois fournir un VPN L2TP/IPSEC pour le support à distance d'une nouvelle machine que nous allons bientôt acquérir (nous n'avons pas le choix pour cette partie). Comme l'utilisateur distant doit également être authentifié par rapport à Active Directory, je dois exécuter le VPN sur notre serveur Windows (2003), plutôt que directement sur le pare-feu.
Étant donné que Smoothwall Express n'a pas la possibilité de transférer des protocoles à partir de son interface de gestion normale, cela doit être fait en modifiant les paramètres iptables dans le dossier rc.firewall.up
. C'est là que réside mon problème. Je ne connais pas iptables et je pense que même si je prends le temps de me documenter sur le sujet, les risques de me planter sont importants.
La section suivante existe actuellement dans rc.firewall.up
:
# IPSEC
/sbin/iptables -N secin
/sbin/iptables -A secin -i ipsec0 -j ACCEPT
/sbin/iptables -A INPUT -j secin
/sbin/iptables -N secout
/sbin/iptables -A secout -i ipsec0 -j ACCEPT
/sbin/iptables -A FORWARD -j secout
[quelques trucs sans rapport ici]
# IPSEC
/sbin/iptables -N ipsec
/sbin/iptables -A ipsec -p udp --destination-port 500 -j ACCEPT
/sbin/iptables -A ipsec -p udp --destination-port 4500 -j ACCEPT
/sbin/iptables -A ipsec -p 50 -j ACCEPT
/sbin/iptables -A ipsec -p 51 -j ACCEPT
/sbin/iptables -A block -i ppp0 -j ipsec
/sbin/iptables -A block -i ippp0 -j ipsec
if [ "$RED_DEV" != "" ]; then
/sbin/iptables -A block -i $RED_DEV -j ipsec
fi
Sauf erreur de ma part, le deuxième bock fera en sorte que le trafic que je veux faire suivre soit avalé à la place. J'ai essayé de commenter le deuxième bloc et d'ajouter celui-ci, qui est adapté des lignes requises pour le PPTP passthrough (qui fonctionne) et de ce que j'ai pu obtenir de diverses sources :
# L2TP/IPSEC
/sbin/iptables -N l2tp
/sbin/iptables -A l2tp -p udp --destination-port 500 --dst 192.169.0.7 -j ACCEPT
/sbin/iptables -A l2tp -p udp --destination-port 1701 --dst 192.169.0.7 -j ACCEPT
/sbin/iptables -A l2tp -p udp --destination-port 4500 --dst 192.169.0.7 -j ACCEPT
/sbin/iptables -A l2tp -p 50 --dst 192.169.0.7 -j ACCEPT
/sbin/iptables -A l2tp -p 51 --dst 192.169.0.7 -j ACCEPT
/sbin/iptables -I FORWARD -j l2tp
/sbin/iptables -t nat -N l2tp
/sbin/iptables -t nat -A l2tp -i $RED_DEV -p tcp --dport 500 -j DNAT --to 192.169.0.7:500
/sbin/iptables -t nat -A l2tp -i $RED_DEV -p tcp --dport 1701 -j DNAT --to 192.169.0.7:1701
/sbin/iptables -t nat -A l2tp -i $RED_DEV -p tcp --dport 4500 -j DNAT --to 192.169.0.7:4500
/sbin/iptables -t nat -A l2tp -i $RED_DEV -p 50 -j DNAT --to 192.169.0.7
/sbin/iptables -t nat -A l2tp -i $RED_DEV -p 51 -j DNAT --to 192.169.0.7
/sbin/iptables -t nat -A PREROUTING -j l2tp
.. mais ça ne marche pas. Où est-ce que je me suis trompé ?
Incidemment, $RED_DEV
se traduit par l'interface publique et évidemment 192.168.0.7
est mon serveur VPN.
Mise à jour :
Il s'avère que les paramètres ci-dessus fonctionnent - en quelque sorte. Je teste ceci depuis chez moi, où j'ai un MacBook et plusieurs machines Windows XP. Je peux me connecter sans problème à partir du Mac mais je ne peux pas me connecter à partir d'une des machines Windows. Malheureusement, la société de machinerie qui a besoin de ce VPN pour l'assistance à distance n'utilise que Windows XP. :(