Iptables - Rediriger tous un traffic sauf un port

Bonjour à tous, et toutes,

J’ai quelques difficultés à configurer mon iptables. Je commence doucement à comprendre le fonctionnement d’iptables, mais je n’arrive pas à mettre en place la configuration que je voudrais.

Ce que je cherche à faire:

  • J’ai un serveur avec deux interfaces: eth0, tun0
  • Je veux que tous le trafic (sauf port 22) arrivant sur eth0 soit envoyé à une ip sur tun0
  • Mais dans le même temps, je veux accéder à mon serveur sur le port 22 depuis eth0 ou tun0

Ce que j’ai essayé jusque là:
J’ai un peu tâtonné plusieurs choses, mais la config qui me paraissait la plus logique est la suivante

iptables -t filter -A INPUT -p tcp -i tun0 --dport 22 -j ACCEPT
iptables -t filter -A INPUT -p tcp -i eth0 --dport 22 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp -i eth0 -j DNAT --to-destination 10.0.1.5

Résultat, tous le trafic est bien redirigé vers la bonne machine, mais ma connexion sur le port 22 est aussi redirigé vers ma machine sur tun0.
Donc conclusion, iptable priorise le PREROUTING (il me semble avoir vu un schéma montrant cela) et mes règles INPUT ne sont pas traités.

Donc est-ce que quelqu’un peut m’indiquer une piste? Je pense qu’il faut que je trouve un paramètre sur PREROUTING disant “tous sauf …” OU je me trompe complétement sur les règles à appliquer.

Merci d’avance :slightly_smiling:

Bon, j’ai déjà (je pense) avancé un peu.

Mes nouvelles règles:

iptables -t nat -A PREROUTING -i eth0 -s 1.2.3.4 -p tcp -j ACCEPT
iptables -t nat -A PREROUTING -i tun0 -p tcp -j ACCEPT
iptables -t nat -A PREROUTING -i eth0 -p tcp -j DNAT --to-destination 10.0.1.5

Du coup, je redirige tous vers mon interface tun0 sauf quand:

  • la connexion vient de l’interface tun0
  • la connexion vient d’une ip bien précise

Dites moi si la méthode n’est pas correct, mais je pense que c’est bon.

Dernière chose que je voudrais faire. Je voudrais que la connexion arrivant de la machine 1.2.3.4 soit acceptée seulement sur le port 2222. Dans le cas contraire, les paquets sont envoyés sur l’interface tun0 à la machine 10.0.1.5.

Donc pour cela, j’accepte les paquets venant de la machine 1.2.3.4, ca c’est OK (voir règle PREROUTING plus haut)
Il faudrait que je rejette tous les paquets (sauf port 2222) vers l’interface tun0, ip 10.0.1.5

Donc voilà, j’en suis là, si vous avez des suggestions, n’hésitez pas.

Il ne s’agit pas de priorité mais d’ordre de traversée des chaînes : d’abord PREROUTING puis INPUT ou FORWARD selon la décision de routage. Mais l’inverse n’aurait rien changé : ACCEPT ne fait que laisser le paquet poursuivre son chemin vers la chaîne suivante.

[quote=“leeoon”]Du coup, je redirige tous vers mon interface tun0 sauf quand:

  • la connexion vient de l’interface tun0
  • la connexion vient d’une ip bien précise

Dites moi si la méthode n’est pas correct, mais je pense que c’est bon.[/quote]
Première remarque, cela ne correspond pas au cahier des charges énoncé dans le premier message qui disait “sauf le port 22” et non “sauf une adresse particulière”.

Seconde remarque, tes règles ne concernent pas “tout” mais seulement les paquets TCP.

Troisième remarque, il y avait plus simple en une seule règle :

[quote=“leeoon”]Dernière chose que je voudrais faire. Je voudrais que la connexion arrivant de la machine 1.2.3.4 soit acceptée seulement sur le port 2222. Dans le cas contraire, les paquets sont envoyés sur l’interface tun0 à la machine 10.0.1.5.

Donc pour cela, j’accepte les paquets venant de la machine 1.2.3.4, ca c’est OK (voir règle PREROUTING plus haut)
Il faudrait que je rejette tous les paquets (sauf port 2222) vers l’interface tun0, ip 10.0.1.5[/quote]
Ton usage des termes “accepter” et “rejeter” est impropre. Dans le contexte d’iptables, ils ont des sens bien définis (cibles ACCEPT et REJECT). D’après ce que je comprends, tu veux seulement faire du DNAT, ce qui n’a rien à voir avec le fait que les paquets soient acceptés ou non. Le NAT se passe dans la table “nat” alors que le filtrage (ACCEPT, DROP, REJECT) se passe dans la table “filter”.

Si je comprends bien ta demande :

iptables -t nat -A PREROUTING -i eth0 -s 1.2.3.4 -p tcp --dport 2222 -j RETURN iptables -t nat -A PREROUTING -i eth0 -j DNAT --to 10.0.1.5

Salut,

je proposerais :

Il me semble que de ne pas préciser de port les inclus tous, et qu’en en précisant un, seulement celui-ci sera accepté. @ voir avec les collègues… @ toute