IPTABLES : redirection de port

Bonjour à tous, j’ai une petite galère iptable

En gros j’ai un raspberry sur la DMZ de la box… En gros toutes les requêtes vers mon ip publique sont redirigé vers
raspberry.

Je veux faire deux choses :

  • accèder au RPI en SSH sur port 22 depuis mon réseau local
  • accèder au RPI en SSH sur port 4221 depuis internet.

SSH n’écoutant que sur le port 22 je pensais m’en sortir avec iptables.

J’ai créé une interface eth0:1 en 10.0.0.1 puis j’ai implémenté les règles suivantes :

table filter :

iptables -P INPUT DROP iptables -A INPUT --source 192.168.0.0/24 -j ACCEPT iptables -I INPUT 2 -i eth0:1 -j ACCEPT iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
En gros je blacklist tout et je laisse lo,le lan eth0 et eth0:1 faire ce qu’ils veulent

Puis je redirige les requêtes en 4221 vers l’interface eth0:1 en 22 :
table nat :

Problème, ça ne marche pas, ça fait deux jours que je sèche et je ne trouve rien.

j’ai activé le routage, j’ai essayé en mettant l’@ de eth0 en gateway de eth0:1 j’ai essayé de redirigé vers lo…
En gros j’ai du mal à déterminer si c’est un problème de routage, de filtrage ou les deux.

Merci d’avance pour ceux qui pourront m’aider.

<mode=JP Coffe>Mais c’est de la merde tout ça !
Primo, tu peux configurer sshd pour écouter sur plusieurs ports. Exit la redirection.
Ensuite par filtrage tu n’autorises l’accès au port 22/TCP que depuis la plage d’adresses du réseau local, et l’accès au port alternatif depuis partout. Terminé.

  1. Pour quoi faire ?
  2. eth0:1 n’est pas une interface mais un alias IP. Par conséquent toute référence à cet alias dans iptables en tant qu’interface ne marchera pas.

Commentaires sur les règles :

  • L’abus de [mono]-I[/mono] est nuisible (à la compréhension et à la fiabilité). C’est utile pour insérer une règle ailleurs qu’à la fin dans un jeu de règles en place, mais dans le script de création du jeu de règles c’est juste sans intérêt.

Toutes actions inutiles (le routage ; cette machine n’est pas routeur) ou absurdes (le reste).

[quote=“PascalHambourg”]<mode=JP Coffe>Mais c’est de la merde tout ça !
Primo, tu peux configurer sshd pour écouter sur plusieurs ports. Exit la redirection.
Ensuite par filtrage tu n’autorises l’accès au port 22/TCP que depuis la plage d’adresses du réseau local, et l’accès au port alternatif depuis partout. Terminé.
[/quote]

Certes je pourrais utiliser cette solution… Mais je le faisais plus par défit histoire d’améliorer mes connaissances en réseau et en sécurité.

POur le 1) l’idée c’est de rediriger le traffic vers cette interface, interface permettant de tromper un éventuel attaquant sur la config de mon réseau local (au prompt ssh) cette interface devant ensuite répondre à la première renvoyant ensuite le traffic sur ma box.

le -I je l’avais justement mis pour insérer une règle, après je ne vois pas en quoi c’est nuisible pour le compréhension et encore moins pour la fiabilité. Mais je suis toute ouie :stuck_out_tongue:

Toutes actions inutiles (le routage ; cette machine n’est pas routeur) ou absurdes (le reste).[/quote]

Cette machine n’est certes pas un routeur, tout du moins dans son usage premier, cependant je vois pas ce qui m’empêche de lui en donner cette usage.

Mis à part j’ai plus ou moins réussis à arriver à mes fins, en gros j’ai créé une interface eth0:1 dans le même lan

iface eth0:3 inet static address 192.168.0.252 netmask 255.255.255.0

et en ajoutant la règle nat suivante :

c’est un peu cracra car l’@ 252 répond directement à ma box… l’ip de destination ne correspondant pas à l’ip source pour le retour de la requête.

Idéalement j’aimerais vraiment créer une interface virtuelle de niveau 2, je n’ai pour le moment rien trouver pour debian, si quelqu’un à une idée je prend.

Autre chose au démarrage mon interface eth0:1 ne monte pas. je suis tjrs obligé de faire un ifup… J’aimerai éviter un énième script de démarrage… Quelqu’un sait d’ou ça peut venir, en googlant je me suis rendu compte que je n’étais pas le seul mais je n’ai trouvé aucune solution.

Raison valable. J’ai moi-même fait beaucoup d’expérimentations plus ou moins idiotes pour améliorer mes connaissances.

Désolé, je n’ai strictement rien compris à cette phrase.

Et pour info, les interfaces réseau d’une même machine ne se parlent pas entre elles. Une interface, c’est pour communiquer avec l’extérieur (sauf l’interface de loopback évidemment).

Nuisible pour la lisibilité parce qu’on ne voit pas au premier coup d’oeil où se place la règle par rapport aux autres règles. Le risque d’erreur est donc plus important, d’où l’impact sur la fiabilité.

Ici, ton -I 2 insère la règle en 2e position. Il aurait suffi de -A pour obtenir le même résultat puisque la commande est en 2e position dans le script, à moins que la chaîne contienne déjà des règles que tu n’as pas montrée. Ceci dit, dans un jeu de règles sans comptage avec des cibles ACCEPT seulement, l’ordre n’a pas d’importance sur le destin des paquets.

Tu fais ce que tu veux avec ta machine bien sûr, mais je t’informe que la fonction routeur ne sert à rien pour le besoin exprimé dans cette discussion. On croit souvent à tort que la fonction routeur est nécessaire quand on veut faire une redirection, mais c’est faux : ce n’est nécessaire que si on fait une redirection vers une autre machine, donc si les paquets redirigés doivent ressortir, ce qui n’est pas le cas ici.

Répète après moi : eth0:1 n’est pas une interface mais un “alias IP”, c’est-à-dire une simple étiquette associée à une adresse IP supplémentaire affectée à l’interface eth0. Regarde la table de routage, tu n’y trouveras jamais de mention à eth0:1 ; le sous-réseau associé est routé par eth0, la seule véritable interface.
Cet artifice est nécessaire pour gérer les adresses multiples avec les vieux outils comme [mono]ifconfig[/mono], ce n’est plus le cas avec son successeur [mono]ip addr[/mono].

Le fait que l’alias IP soit dans le même sous-réseau ne change rien, le résultat est le même avec l’adresse en 10 puisque tout cela n’est qu’une cuisine interne à la machine. D’autre part, l’alias n’avait pas besoin d’être sur eth0, tu aurais pu le créer sur n’importe quelle autre interface, lo par exemple.

[quote=“ibubbl3”]c’est un peu cracra car l’@ 252 répond directement à ma box… l’ip de destination ne correspondant pas à l’ip source pour le retour de la requête.
[/quote]
Non. Le processus local sshd répond aux paquets redirigés avec l’adresse source 192.168.0.252, mais le NAT transforme automatiquement l’adresse source des paquets de réponse en 192.168.0.253 avant leur émission. Autrement ça ne pourrait pas marcher.

Note également que cette redirection seule n’empêche pas de continuer à se connecter en SSH depuis l’extérieur sur le port 22. Pour l’interdire, il faut du filtrage.

Crois-moi, ça n’a aucun intérêt pour ce que tu veux faire qui est purement un traitement de niveau 3.

Tu as bien placé la définition d’eth0:1 après celle d’eth0 et ajouté une clause “auto eth0:1” dans le fichier interfaces ?