GNT sans publicité, site mobile, fonctionnalitées exclusives...

Iptables - redirection de port

Le
Droopy191
Salut,

Je débute avec iptables. J'ai réussi à mettre en place une passerelle
qui fait du nat. Sur cette passerelle, un serveur ssh en écoute sur le
port 22. Je voudrais coté WAN uniquement rediriger le port 14722 vers le
port 22 de la passerelle.

J'ai réussi à faire ce que veux de la facon suivante mais je m'interroge
si c'est la bonne manière:
J'autorise le port 22 en entrée, je redirige le port 14722 vers le port
22 du serveur, mais je suis obligé de dropper le port 22 classique car
sinon le serveur est aussi accessible sur le port 22.

De plus la régle PREROUTING + DROP est noté dépréciée.

# drop du port 22
iptables -t nat -I PREROUTING -i $WAN_interface -p tcp --dport ssh -j DROP
# transfert de port sur la passerelle pour le coté WAN
iptables -t nat -I PREROUTING -i $WAN_interface -p tcp --dport 14722 -j
REDIRECT --to-ports ssh
# Connexions ssh depuis internet sur la passerelle
iptables -A INPUT -i $WAN_interface -p tcp --dport ssh -m conntrack
--ctstate NEW -j ACCEPT


Comment feriez vous ?
Serait il plus adapté de faire une redirection de port classique comme
pour une machine du LAN ?

--
DR
Lire les 10 réponses

Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Pascal Hambourg
Le #21200701
Salut,

Droopy191 a écrit :

Je débute avec iptables. J'ai réussi à mettre en place une passerelle
qui fait du nat. Sur cette passerelle, un serveur ssh en écoute sur le
port 22. Je voudrais coté WAN uniquement rediriger le port 14722 vers le
port 22 de la passerelle.



Les goûts et les couleurs...

J'ai réussi à faire ce que veux de la facon suivante mais je m'interroge
si c'est la bonne manière:
J'autorise le port 22 en entrée, je redirige le port 14722 vers le port
22 du serveur,



Jusque là c'est bon.

mais je suis obligé de dropper le port 22 classique car
sinon le serveur est aussi accessible sur le port 22.



En effet, puisque la redirection a lieu avant le filtrage.

De plus la régle PREROUTING + DROP est noté dépréciée.

# drop du port 22
iptables -t nat -I PREROUTING -i $WAN_interface -p tcp --dport ssh -j DROP



C'est mal. La table nat n'est pas faite pour le filtrage, et il y a un
risque d'effet de bord. La table filter est là pour ça.

# transfert de port sur la passerelle pour le coté WAN
iptables -t nat -I PREROUTING -i $WAN_interface -p tcp --dport 14722 -j
REDIRECT --to-ports ssh
# Connexions ssh depuis internet sur la passerelle
iptables -A INPUT -i $WAN_interface -p tcp --dport ssh -m conntrack
--ctstate NEW -j ACCEPT

Comment feriez vous ?



Le plus simplement, je demanderais directement à sshd d'écouter sur le
port 14722 au lieu du port 22.
Sinon, mais c'est un peu plus compliqué, il est possible de marquer les
paquets dans la chaîne PREROUTING de la table mangle (donc avant nat)
avec la cible MARK en fonction du port de destination et de filtrer en
fonction de la marque avec la correspondance mark dans la chaîne INPUT.

Serait il plus adapté de faire une redirection de port classique comme
pour une machine du LAN ?



Que veux-tu dire exactement ?
Droopy191
Le #21201261
Le 15/02/2010 08:11, Pascal Hambourg a écrit :
J'ai réussi à faire ce que veux de la facon suivante mais je m'interroge
si c'est la bonne manière:
J'autorise le port 22 en entrée, je redirige le port 14722 vers le port
22 du serveur,



Jusque là c'est bon.

mais je suis obligé de dropper le port 22 classique car
sinon le serveur est aussi accessible sur le port 22.



En effet, puisque la redirection a lieu avant le filtrage.

De plus la régle PREROUTING + DROP est noté dépréciée.

# drop du port 22
iptables -t nat -I PREROUTING -i $WAN_interface -p tcp --dport ssh -j DROP



C'est mal. La table nat n'est pas faite pour le filtrage, et il y a un
risque d'effet de bord. La table filter est là pour ça.


Je l'avais soupçonné comme iptables grognait sur la commande.
Mais je ne vois pas comment c'est possible, puiqu'il faut autoriser le
port 22 dans la table filter ( c'est bien le port d'écoute de ssh)
14722- > PREROUTING -> 22 -> FILTER -> ssh
22 -> FILTER -> ssh
Dans ce cas les 2 ports sont accessibles depuis le coté WAN.
Je crois que vous donnez une piste plus bas avec la table mangle.


Comment feriez vous ?



Le plus simplement, je demanderais directement à sshd d'écouter sur le
port 14722 au lieu du port 22.


Bien évidement. Mais ici, je m'applique à comprendre iptables, ne jugez
pas trop sévèrement le bien fondé de ma demande ;-)

Sinon, mais c'est un peu plus compliqué, il est possible de marquer les
paquets dans la chaîne PREROUTING de la table mangle (donc avant nat)
avec la cible MARK en fonction du port de destination et de filtrer en
fonction de la marque avec la correspondance mark dans la chaîne INPUT.



Bon il va falloir que je retourne à la doc.
Si j'ai bien compris, la table mangle sert à manipuler les paquets.

Je marque les paquets qui m'interesse pour pouvoir les filtrer à l'étape
suivante FILTER ? Ceci dit, je ne vois pas comment je vais pouvoir
distinguer les 2 types, puisque à l'arrivée dans la table MANGLE ils
seront tous les 2 sur le port 22.



Serait il plus adapté de faire une redirection de port classique comme
pour une machine du LAN ?



Que veux-tu dire exactement ?



Qq chose de ce gout la( je faire une redirection de port comme si ma
passerelle était une machine différente sur le LAN )
#iptables -t nat -A PREROUTING -i $WAN_interface -p tcp --dport 14722 -j
DNAT --to-destination 192.168.50.1:22
#iptables -A FORWARD -i $WAN_interface -p tcp --dport 22 -o
$LAN_interface -d 192.168.50.1 -m conntrack --ctstate NEW -j ACCEPT



--
DR
Pascal Hambourg
Le #21201741
Droopy191 a écrit :
Le 15/02/2010 08:11, Pascal Hambourg a écrit :

Sinon, mais c'est un peu plus compliqué, il est possible de marquer les
paquets dans la chaîne PREROUTING de la table mangle (donc avant nat)
avec la cible MARK en fonction du port de destination et de filtrer en
fonction de la marque avec la correspondance mark dans la chaîne INPUT.



Bon il va falloir que je retourne à la doc.
Si j'ai bien compris, la table mangle sert à manipuler les paquets.



Oui. Ici on va juste leur donner une marque à usage interne du noyau,
sans les modifier.

Je marque les paquets qui m'interesse pour pouvoir les filtrer à l'étape
suivante FILTER ? Ceci dit, je ne vois pas comment je vais pouvoir
distinguer les 2 types, puisque à l'arrivée dans la table MANGLE ils
seront tous les 2 sur le port 22.



Comme dit plus haut, la chaîne PREROUTING de la table mangle est
parcourue avant la chaîne de même nom de la table nat.

Qq chose de ce gout la( je faire une redirection de port comme si ma
passerelle était une machine différente sur le LAN )
#iptables -t nat -A PREROUTING -i $WAN_interface -p tcp --dport 14722 -j
DNAT --to-destination 192.168.50.1:22



Ça peut aussi marcher. Ensuite pour le filtrage la distinction peut se
faire sur l'adresse de destination. Mais attention si l'adresse interne
peut être atteinte depuis l'extérieur (qui contrôle le routage amont ?).

Encore une autre possibilité : rediriger le port 22 vers un port ou une
adresse inutilisé(e) et filtrer les paquets ensuite. On peut même
exploiter une particularité intéressante du noyau qui jette tout paquet
destiné à une adresse de loopback (127.0.0.0/8) reçu par une interface
autre que loopback (lo), ce qui économise la règle de filtrage.

#iptables -A FORWARD -i $WAN_interface -p tcp --dport 22 -o
$LAN_interface -d 192.168.50.1 -m conntrack --ctstate NEW -j ACCEPT



Ça, par contre, ce n'est pas bon. Les paquets destinés à la machine
passent par INPUT, pas par FORWARD.
Droopy191
Le #21201941
Le 15/02/2010 11:12, Pascal Hambourg a écrit :

Je marque les paquets qui m'interesse pour pouvoir les filtrer à l'étape
suivante FILTER ? Ceci dit, je ne vois pas comment je vais pouvoir
distinguer les 2 types, puisque à l'arrivée dans la table MANGLE ils
seront tous les 2 sur le port 22.



Comme dit plus haut, la chaîne PREROUTING de la table mangle est
parcourue avant la chaîne de même nom de la table nat.


J'ai beau avoir un schema du processus ;-)
http://www.csie.ntu.edu.tw/~b92035/cnl/hw1/Iptables.gif
j'avais mal compris.
J'étais sur la table mangle avant Input.
Ok


Qq chose de ce gout la( je faire une redirection de port comme si ma
passerelle était une machine différente sur le LAN )
#iptables -t nat -A PREROUTING -i $WAN_interface -p tcp --dport 14722 -j
DNAT --to-destination 192.168.50.1:22



Ça peut aussi marcher. Ensuite pour le filtrage la distinction peut se
faire sur l'adresse de destination. Mais attention si l'adresse interne
peut être atteinte depuis l'extérieur (qui contrôle le routage amont ?).


L'adresse interne n'est accessible que depuis le LAN.
L'étape suivante serait de de filtrer suivant la destination ( ip locale
192.168.50.1 accepté / ip WAN rejeté ) ?


Encore une autre possibilité : rediriger le port 22 vers un port ou une
adresse inutilisé(e) et filtrer les paquets ensuite. On peut même
exploiter une particularité intéressante du noyau qui jette tout paquet
destiné à une adresse de loopback (127.0.0.0/8) reçu par une interface
autre que loopback (lo), ce qui économise la règle de filtrage.

#iptables -A FORWARD -i $WAN_interface -p tcp --dport 22 -o
$LAN_interface -d 192.168.50.1 -m conntrack --ctstate NEW -j ACCEPT



Ça, par contre, ce n'est pas bon. Les paquets destinés à la machine
passent par INPUT, pas par FORWARD.


Ok, c'est logique une fois dit. J'avais dans l'idée de faire "ressortir"
les paquets et de les faire entrer comme si ils venaient du LAN.


merci pour vos éclaircissements



--
DR
Pascal Hambourg
Le #21217641
Droopy191 a écrit :

#iptables -t nat -A PREROUTING -i $WAN_interface -p tcp --dport 14722 -j
DNAT --to-destination 192.168.50.1:22



Ça peut aussi marcher. Ensuite pour le filtrage la distinction peut se
faire sur l'adresse de destination. Mais attention si l'adresse interne
peut être atteinte depuis l'extérieur (qui contrôle le routage amont ?).



L'adresse interne n'est accessible que depuis le LAN.



Ça dépend du routage amont.

L'étape suivante serait de de filtrer suivant la destination ( ip locale
192.168.50.1 accepté / ip WAN rejeté ) ?



Par exemple.

Ça, par contre, ce n'est pas bon. Les paquets destinés à la machine
passent par INPUT, pas par FORWARD.



Ok, c'est logique une fois dit. J'avais dans l'idée de faire "ressortir"
les paquets et de les faire entrer comme si ils venaient du LAN.



Ça ne marche pas comme ça sous Linux. Un paquet qui sort, il sort et ne
rentre pas. Seules exeptions : les paquets émis par l'interface de
loopback et les paquets émis en broadcast ou multicast, qui reviennt par
INPUT mais toujours pas par FORWARD.
Publicité
Suivre les réponses
Poster une réponse
Anonyme