Overblog Tous les blogs
Editer l'article Suivre ce blog Administration + Créer mon blog
MENU
gzh1.overblog.com
Publicité

iptables, la NAT et le log

Hello!

Personnellement j'ai déjà eu besoin de logger des paquets avant et après le NAT sur iptables.

Bon déjà, la NAT avec iptables c'est assez simple mais encore faut-il comprendre comment ça marche :

On utilisera deux chaînes, PREROUTING et POSTROUTING de la table NAT. Le PREROUTING est en fait associé avec le DNAT (ou NAT de l'ip de destination) et le POSTROUTING avec le SNAT (ou NAT de l'ip source).

Pour expliciter un peu de fonctionnement je vous renvoie vers ce lien qui explicite très bien le passage dans les différentes chaînes.

Les règles de NAT sont donc généralement de cette forme :

  • Pour le NAT de l'IP source :

iptables -t nat -A POSTROUTING -p tcp -s src_ip -d dst_ip --dport dst_port -j SNAT --to-source ip_src_natée

  • Pour le NAT de l'IP destination :

iptables -t nat -A PREROUTING -i eth1 -p tcp -s src_ip -d dst_ip --dport dst_port -j DNAT --to-destination ip_dst_natée

Bon génial, mais une nouvelle fois, comment fait-on pour logguer les paquets en transit afin de vérifier que la NAT est correctement réalisée ?

Il n'y a en fait pas une mais plusieurs réponses possibles. Personnellement j'utilise la table MANGLE qui permet selon la doc officielle d'iptables "d'altérer des paquets" ; En fait toute modification dans un paquet pourra être réalisée ici (attention toutefois on n'utilise pas mangle pour le forward ou snat/dnat!).

J'utilise cette table car elle offre une très bonne visibilité en termes de logging.

Exemple de règle :

  • Je log tout ce qui passe dans la chaîne POSTROUTING de la table mangle en destination du port "dst_port" :

iptables -t mangle -v -A POSTROUTING -j LOG -p tcp --destination-port dst_port --log-prefix 'mangle-POSTROUTING'

  • Je log tout ce qui passe dans la chaîne PREROUTING de la table mangle en destination du port "dst_port" :

iptables -t mangle -v -A PREROUTING -j LOG -p tcp --destination-port dst_port --log-prefix 'mangle-PREROUTING'

Dans les logs (par exemple /var/log/messages par défaut sous Debian/Squeeze) on obtient pour une connexion sortante de 1.1.1.1 vers 2.2.2.2 (DNAT en 3.3.3.3) :

Jul  9 11:49:02 vm-iptables kernel: [...] mangle-POSTROUTINGIN= OUT=eth1 SRC=1.1.1.1 DST=2.2.2.2 LEN=60 TOS=0x10 PREC=0x00 TTL=62 ID=65028 DF PROTO=TCP SPT=46194 DPT=80 WINDOW=5840 RES=0x00 SYN URGP=0 
Jul  9 11:49:26vm-iptables kernel: [...] mangle-PREROUTINGIN=eth1 OUT=  SRC=1.1.1.1 DST=3.3.3.3 LEN=60 TOS=0x10 PREC=0x00 TTL=63 ID=65029 DF PROTO=TCP SPT=46194 DPT=80 WINDOW=5840 RES=0x00 SYN URGP=0

Petit ajout : ne pas oublier quand on a des serveurs en multi-leg avec des pattes d'admin et prod dissociées de désactiver le routage des paquets entre ces interfaces (si interface admin = eth0) :

iptables -A FORWARD -i eth0 -j DROP
iptables -A FORWARD -o eth0 -j DROP

Pour conclure, ceci n'était qu'un très humble post sur iptables .... Si vous êtes plus intéressés par ce produit je ne peux que vous rediriger vers la bible absolue d'Oskar Andreasson ... Et bien entendu, si vous avez des solutions alternatives que vous trouvez plus optimale que celle-ci n'hésitez pas à les poster ! !

Bonne semaine à tous !

Publicité
Partager cet article
Repost0
Pour être informé des derniers articles, inscrivez vous :
Commenter cet article