Routeur linux iptables 4 interfaces réseau

Bonjour,
je suis actuellement en BTS SIO,
je dois préparer pour mon examen deux sujets techniques.

L’un des sujets que j’ai choisis de présenter est un réseau windows avec AD et un réseau pour un serveur apache et un serveur samba intégré dans l’AD.

ces 3 sous réseaux sont en
172.16.0.0/18
172.16.64.0/18
172.16.128.0/18
la passerelle étant la dernière adresse utile de chaque sous réseau.

Mon routeur sous linux à donc 4 interfaces, dont eth0 en nat sur virtualbox.

Je veux donc donner accès à internet à ces 3 sous réseau, et permettre la communication du reseau 172.16.0.0/18 au 172.16.64.0/18 et 172.16.128.0/18 mais pas de communication entre le 64.0 et 128.0.

J’ai donc fais mes recherches et mes tests, pour internet un simple

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

me permet d’accéder à internet.

Le problème étant que tout mes sous réseau communiquent entre-eux.

J’ai donc bien essayé de commencer par drop tous les traffics mais à partir de là je n’arrive plus à retrouver ne serait-ce qu’internet.

j’ai donc essayé d’autoriser le ping à nouveau avec

iptables -A OUTPUT -p icmp --icmp-type 8 -s 0/0 -d 0/0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 0 -s 0/0 -d 0/0 -m state --state ESTABLISHED,RELATED -j ACCEPT

mais ça ne fonctionne toujours pas.

Bref, je suis un peu perdus dans les iptables, j’ai bien lus et relus la doc sur le forum ubuntu ou avec man mais j’ai du mal à me faire la main.

Quelqu’un pourrait-il donc , ne pas me donner la solution, mais m’aiguiller ou me donner quelques informations sur iptables dont je serais passé à coté?

Quoi qu’il en sois je continue de chercher et de tester!

Merci d’avance.

eh bien, il suffit parfois de lire ses question pour trouver ses réponses!

j’ai finalement réussis, mais je pense que ce n’est toute fois pas optimisé question sécurité. Toute fois voici ce que j’ai réussis.

iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
iptables -A FORWARD -i eth2 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth2 -j ACCEPT
iptables -A FORWARD -i eth2 -o eth1 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth2 -j ACCEPT

eth0 -> nat
eth1 -> 172.16.0.0/28(172.16.63.254)
eth2 -> 172.16.64.0/28(172.16.127.254)

cela fonctionne, mais du coup ça veux dire que tout ce qui viens d’eth0 dont l’exterieur peut communiquer avec mes deux sous réseau non?

De plus n’y a-t-il pas un moyen de réduire les lignes? vu que eth0 doit accepter le traffic de tout le monde.

Ah ? Pourtant je ne vois rien dans tes règles concernant le trafic de la 4e interface ou du 3e sous-réseau dont tu parlais au début :

Forcément. Il faut bien laisser passer les réponses qui reviennent de l’extérieur.

Un peu, oui.

[code]iptables -P FORWARD DROP # trafic routé bloqué par défaut

trafic routé vers internet autorisé

iptables -A FORWARD ! -i eth0 -o eth0 -j ACCEPT

trafic retour d’internet routé autorisé

iptables -A FORWARD -i eth0 ! -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

trafic entre eth1 et eth2 autorisé

iptables -A FORWARD -i eth2 -o eth1 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth2 -j ACCEPT[/code]

Merci beaucoup!

oui effectivement je n’ai pas parlé du 3eme sous réseau.

pourrait tu m’expliquer le “!” dans l’iptables? je suppose que comme en programmation le “!” signifie l’inverse, mais je ne comprend pas bien son utilité ici.
Je suppose donc que la règle internet

# trafic routé vers internet autorisé
iptables -A FORWARD ! -i eth0 -o eth0 -j ACCEPT

utilise deux fois la eth0 car tout rentre et sort pas cette interface, ça paraît logique maintenant.

Pour le 3ème sous réseau (qui contient un serveur apache) j’ai rajouté ces règles:

iptables -t filter -A INPUT --dport 80 -i eth3 -j ACCEPT
iptables -t filter -A OUTPUT --dport 80 -o eth3 -j ACCEPT

cela ne laisse passer que le trafic sur le port 80,
ne devrais-je pas faire de même entre mon 1er et 2nd sous réseau et ne laisser passer que port pour samba en plus du forward ?

Merci encore.

“!” sert effectivement à inverser une condition. “! -i eth0” signifie donc “les paquets reçus par une autre interface que eth0”.

Non. Un paquet routé entre par une interface d’entrée et ressort par une interface de sortie. Un paquet peut entrer et ressortir par la même interface. Ici, il est souhaitable de ne pas accepter les paquets venant d’internet et repartant vers internet. Il y a deux chemins normaux :

  • les paquets qui entrent par eth1, eth2 ou eth3 mais pas eth0 et sortent par eth0 doivent être acceptés ;
  • les paquets qui entrent par eth0 et sortent par eth1, eth2, ou eth3 mais pas eth0 et qui sont des réponses à des paquets émis dans l’autre sens doivent être acceptés.
    Il y a donc deux règles pour traiter ces deux chemins.

Qui ne servent à rien. Les chaînes INPUT et OUTPUT ne traitent que les paquets générés par ou destinés à la machine locale. Les paquets routés, c’est-à-dire émis par et à destination d’une autre machine, sont traités dans la chaîne FORWARD. D’autre part ces règles ne laissent passer le trafic dans un sens. Il faut aussi autoriser le trafic retour.

C’est toi qui vois en fonction de tes besoins.

On le voit encore ici, avant de commencer à pisser des règles iptables il est capital de bien définir en détail tous les flux à autoriser.

Très bien, merci beaucoup pour les explications je comprend mieux le fonctionnement d’iptables maintenant.

je vais voir si je laisse les règles comme tel ou bien si je filtre vraiment les paquets, en tout cas je met en favoris ce post pour tes explications qui pourrons me resservir plus tard!

Merci.