Règles de routage simple pour iptables
Un petit billet dédié pour mon ami foireatout qui aurait besoin de connaître quelques commandes afin d’implémenter des règles pour bien débuter dans ce monde 🙂 Les règle ci-dessous sont très loin d’exploiter toute la puissance de netfilter 😉
Pour faire court, iptables est un logiciel libre qui va permettre de gérer le framework netfilter qui implémente un pare-feu (à partir du noyau 2.4).
[adinserter block= »1″]
Pour notre exemple, notre machine est frontale et possède deux interfaces réseau : WAN (eth0) et LAN (eth1)
Sur l’interface WAN (eth0) plusieurs adresses IP publiques sont directement reliées :
eth0 => 91.xx.xx.80
eth0:0 => 91.xx.xx.82
eth0:1 => 91.xx.xx.83
eth0:2 => 91.xx.xx.84
L’adresse de notre interface LAN eth1 est 192.168.1.254 et notre réseau 192.168.1.0/24
Parmi les machines qui sont sur le LAN nous avons :
machine | utilisation | adresse ip | ip publique à utiliser | redirection de ports | nat d’adresse ip | |
www | serveur web | 192.168.1.10 | 91.xx.xx.84 | – | 91.xx.xx.84 | |
asterisk | serveur sip | 192.168.1.11 | 91.xx.xx.82 | UDP : 10000-20000,5060 | – | |
srvtse | serveur TSE | 192.168.1.12 | 91.xx.xx.80 | TCP : 3389 | – | |
srvmail | Serveur mail | 192.168.1.13 | 91.xx.xx.83 | TCP : 25,110,143 | – | |
admin | Machine administration | 192.168.1.20 | 91.xx.xx.80 | – | – |
Avant de commencer
Le travail ci-dessous va utiliser la table NAT qui permet d’effectuer de la traduction d’adresses réseau (le NAT) pour les paquets. Ensuite nous allons utiliser les chaines POSTROUTING, PREROUTING et les cibles SNAT, DNAT et MASQUERADE.
Chaine PREROUTING et cible DNAT
Dans la chaine PREROUTING (avant routage) on ne peut modifier que l’adresse de destination (et les numéros de ports au cas où ils seraient déja utilisés), d’ou l’utilisation de la cible DNAT (NAT de destination).
Chaine POSTROUTING et cible SNAT
Dans la chaine POSTROUTING (après routage) on ne peut modifier que l’adresse source, d’ou l’utilisation de la cible SNAT (NAT source).
Cible MASQUERADE
Cette cible permet de déterminer l’adresse IP de sortie pour chaque paquet, ce qui est moins performant car il va vérifier l’interface de sortie pour chaque connexion. MASQUERADE est utilisée dans le cas d’une adresse IP publique dynamique, dans le cas d’IP fixe nous préfèrerons utiliser la cible SNAT en spécifiant l’adresse IP de sortie.
[nice_info]Si déja vous êtes perdu(e) attaquez-vous à iptables-tutorial de Oskar Andreasson à cette adresse : http://www.inetdoc.net/guides/iptables-tutorial/[/nice_info]
Simple passerelle
La machine admin a simplement besoin d’utiliser notre serveur en tant que passerelle :
iptables -t nat -A POSTROUTING -s 192.168.1.20/32 -o eth0 -j SNAT --to-source 91.xx.xx.80 |
ou en utilisant la cible MASQUERADE :
iptables -t nat -A POSTROUTING -s 192.168.1.20/32 -o eth0 -j MASQUERADE |
[nice_info]Si toutefois vous deviez permettre à tout votre réseau 192.168.1.0/24 d’utiliser le serveur en passerelle, remplacez simplement 192.168.1.20/32 par 192.168.1.0/24[/nice_info]
NAT d’adresse IP publique
La machine www doit avoir une IP publique nattée (91.xx.xx.84).
Les commandes suivantes sont pour permettre les connexions entrantes et la seconde les connexions sortantes
iptables -t nat -A PREROUTING -d 91.xx.xx.84/32 -i eth0 -j DNAT --to-destination 192.168.1.10 iptables -t nat -A POSTROUTING -s 192.168.1.10/32 -o eth0 -j SNAT --to-source 91.xx.xx.84 |
Redirection de ports
Le serveur TSE utilise l’IP publique 91.xx.xx.80 et on veut rediriger le port 3389 TCP :
iptables -t nat -A PREROUTING -d 91.xx.xx.80/32 -i eth0 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 192.168.1.12:3389 iptables -t nat -A POSTROUTING -s 192.168.1.12/32 -o eth0 -j SNAT --to-source 91.xx.xx.80 |
Le serveur de mail utilise l’IP publique 91.xx.xx.83 et les ports TCP 25, 110 et 143 :
iptables -t nat -A PREROUTING -d 91.xx.xx.83/32 -i eth0 -p tcp -m tcp --dport 25 -j DNAT --to-destination 192.168.1.13:25 iptables -t nat -A PREROUTING -d 91.xx.xx.83/32 -i eth0 -p tcp -m tcp --dport 110-j DNAT --to-destination 192.168.1.13:110 iptables -t nat -A PREROUTING -d 91.xx.xx.83/32 -i eth0 -p tcp -m tcp --dport 143 -j DNAT --to-destination 192.168.1.13:143 iptables -t nat -A POSTROUTING -s 192.168.1.13/32 -o eth0 -j SNAT --to-source 91.xx.xx.83 |
Le serveur asterisk utilise l’IP publique 91.xx.xx.82 et on veut rediriger le port 5060 UDP :
iptables -t nat -A PREROUTING -d 91.xx.xx.82/32 -i eth0 -p udp -m udp --dport 5060 -j DNAT --to-destination 192.168.1.11:5060 iptables -t nat -A POSTROUTING -s 192.168.1.11/32 -o eth0 -j SNAT --to-source 91.xx.xx.82 |
Redirection d’une plage de ports
Le serveur asterisk utilise l’IP publique 91.xx.xx.82 et on veut rediriger la plage de ports 10000 à 20000 UDP :
iptables -t nat -A PREROUTING -d 91.xx.xx.82/32 -i eth0 -p udp -m udp --dport 10000:20000 -j DNAT --to-destination 192.168.1.11:10000-20000 |
Si vous ne l’avez pas déja fait avec une autre règle (cf. la dernière règle pour la redirection de ports), entrez cette commande :
iptables -t nat -A POSTROUTING -s 192.168.1.11/32 -o eth0 -j SNAT --to-source 91.xx.xx.82 |
Démarrage machine
Si vous redémarrez votre serveur sachez que les règles iptables ne seront pas restaurées automatiquement, des outils sont là pour vous aider :
iptables-backup et iptables-restore
Bonjour,
J’ai du mal à comprendre certains points du tutoriel.
Si l’on configure une simple passerelle alors le NAT d’adresse IP publique n’est pas obligatoire dans la mesure où les machines internes pourront quand-même sortir du réseau pour aller sur internet, c’est bien ça ?
Egalement, concernant la redirection de port, est-ce possible d’avoir un détaille de ce qu’elle fait ? En détaillant les options utilisés.
J’append actuellement a maîtrise iptables mais j’ai encore des difficultés à discerner l’utilité de certaines fonctionnalités.
Quand je lis cette règle :
iptables -t nat -A PREROUTING -d 91.xx.xx.80/32 -i eth0 -p tcp -m tcp –dport 3389 -j DNAT –to-destination 192.168.1.12:3389
Je comprend que tout paquet à destination du réseau 91.xx.xx.80/32 sur le port 3389 sur le est redirigé vers l’interface eth0 en utilisant le protocole tcp (-m tcp sert à quoi ?) en passant par le port 3389 et DNAT –to-destination 192.168.1.12:3389 j’ai du mal à déterminer sa fonction même en lisant le manuel.
Si vous pouviez m’éclairer ce serait sympa 🙂