Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Probleme configuration iptables

19 réponses
Avatar
olaf
Bonjour,

Je vous expose la situation :

Ma connexion Internet est delivrée par une C-Box qui fait office de
routeur. Je souhaite cependant gerer les fonctions de routage sur un
serveur Linux.
J'ai donc installé un serveur sous Linux (Debian sarge) avec 2 cartes
ethernet (eth1 vers la CBox et eth0 vers le LAN), une branchée
directement sur la CBox et une seconde sur le LAN.

Donc, la CBox recoit elle l'adresse IP publique, j'ai donc defini sa
patte interne en 192.168.30.1 et je lui ai indiqué de rediriger toutes
les requetes sur 192.168.30.3 (qui est l'adresse de eth1 sur le serveur)

Jusque là, tout se passe à peu pret normalement :
Les services tournant sur la carte eth1 du serveur sont bien visible
depuis l'Internet.

Le problème arrive dés que je tente de faire du NAT.
Voici les commandes iptables que je tappe :

# iptables -A INPUT -p tcp -m tcp -i eth1 --dport 3389 -j ACCEPT
Pour ouvrir le port 3389 sur la carte eth1
# iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 3389 -J DNAT --to
192.168.0.39

pour rediriger vers l'adresse 192.168.0.39 de mon lan.

J'avais deja fait ce genre d'operation auparavant sans le moindre
probleme, mais là, ca ne fonctionne pas.

Quand j'essai de me connecter de l'exterieur, la tentative tombe en timeout.
Si je passe un nmap de l'exterieur, je vois le port 3389 comme filtered.

Je ne comprend pas bien ce qu'il se passe, si quelqu'un a une idée.

D'avance merci !

10 réponses

1 2
Avatar
Pascal Hambourg
Salut,


Le problème arrive dés que je tente de faire du NAT.

# iptables -A INPUT -p tcp -m tcp -i eth1 --dport 3389 -j ACCEPT
Pour ouvrir le port 3389 sur la carte eth1
# iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 3389 -J DNAT --to
192.168.0.39

pour rediriger vers l'adresse 192.168.0.39 de mon lan.


Rappel : la chaîne INPUT d'iptables ne voit passer que les paquets
entrants à destination de la machine. Les paquets entrants à destination
d'une autre machine traversent la chaîne FORWARD.

http://www.netfilter.org/documentation/HOWTO/fr/packet-filtering-HOWTO-6.html

Avatar
olaf
Salut,


Le problème arrive dés que je tente de faire du NAT.

# iptables -A INPUT -p tcp -m tcp -i eth1 --dport 3389 -j ACCEPT
Pour ouvrir le port 3389 sur la carte eth1
# iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 3389 -J DNAT
--to 192.168.0.39

pour rediriger vers l'adresse 192.168.0.39 de mon lan.


Rappel : la chaîne INPUT d'iptables ne voit passer que les paquets
entrants à destination de la machine. Les paquets entrants à destination
d'une autre machine traversent la chaîne FORWARD.

http://www.netfilter.org/documentation/HOWTO/fr/packet-filtering-HOWTO-6.html



Donc, je dois rajouter la meme regle vers la chaine FORWARD ?


Avatar
Pascal Hambourg

# iptables -A INPUT -p tcp -m tcp -i eth1 --dport 3389 -j ACCEPT
Pour ouvrir le port 3389 sur la carte eth1
# iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 3389 -J DNAT
--to 192.168.0.39
pour rediriger vers l'adresse 192.168.0.39 de mon lan.


Rappel : la chaîne INPUT d'iptables ne voit passer que les paquets
entrants à destination de la machine. Les paquets entrants à
destination d'une autre machine traversent la chaîne FORWARD.


Donc, je dois rajouter la meme regle vers la chaine FORWARD ?


Non, tu dois la *déplacer* dans la chaîne FORWARD. En effet cette règle
n'a rien à faire dans la chaine INPUT. Au passage, tu peux ajouter la
correspondance sur l'interface de sortie "-o eth0". Et ne pas oublier
d'autoriser les paquets de réponse dans l'autre sens, toujours dans la
chaîne FORWARD.



Avatar
olaf

# iptables -A INPUT -p tcp -m tcp -i eth1 --dport 3389 -j ACCEPT
Pour ouvrir le port 3389 sur la carte eth1
# iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 3389 -J DNAT
--to 192.168.0.39
pour rediriger vers l'adresse 192.168.0.39 de mon lan.


Rappel : la chaîne INPUT d'iptables ne voit passer que les paquets
entrants à destination de la machine. Les paquets entrants à
destination d'une autre machine traversent la chaîne FORWARD.


Donc, je dois rajouter la meme regle vers la chaine FORWARD ?


Non, tu dois la *déplacer* dans la chaîne FORWARD. En effet cette règle
n'a rien à faire dans la chaine INPUT. Au passage, tu peux ajouter la
correspondance sur l'interface de sortie "-o eth0". Et ne pas oublier
d'autoriser les paquets de réponse dans l'autre sens, toujours dans la
chaîne FORWARD.


Gasp...
Cela ne passe toujours pas...
Voici ce que j'ai indiqué comme regles :

iptables -A FORWARD -p tcp -m tcp -i eth1 --dport 3389 -j ACCEPT
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 3389 -j DNAT --to
192.168.0.39

Mais le port en question n'apparait toujours pas ouvert de l'exterieur.




Avatar
Pascal Hambourg

Voici ce que j'ai indiqué comme regles :

iptables -A FORWARD -p tcp -m tcp -i eth1 --dport 3389 -j ACCEPT


Ça n'a rien à voir avec ton problème, mais tu peux ajouter "-o eth0" et
"-d 192.168.0.39" pour que la règle n'autorise que les connexions
redirigées par la règle DNAT.

iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 3389 -j DNAT --to
192.168.0.39

Mais le port en question n'apparait toujours pas ouvert de l'exterieur.


Tu es sûr que la C-box redirige bien tout vers le serveur ?
Tu as bien une règle qui accepte les paquets retour dans l'autre sens ?
Pas de règle placée avant qui pourrait bloquer les paquets ?
Que donne un tcptraceroute sur le port 3389 depuis l'extérieur ?

Avatar
Francis Chartier
Dans l'article <452e12d6$0$23131$,
écrivait...

Gasp...
Cela ne passe toujours pas...
Voici ce que j'ai indiqué comme regles :

iptables -A FORWARD -p tcp -m tcp -i eth1 --dport 3389 -j ACCEPT
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 3389 -j DNAT --to
192.168.0.39

Mais le port en question n'apparait toujours pas ouvert de l'exterieur.


C'est une erreur de copier-coller votre --to 192.168.0.39 ?

Il me semble que la syntaxe correcte est --to-destination xx.xx.xx.xx

Enfin, en tout cas c'est ce que dit le man, et je n'ai jamais essayé
autrement.

--
Francis Chartier

Avatar
olaf

Voici ce que j'ai indiqué comme regles :

iptables -A FORWARD -p tcp -m tcp -i eth1 --dport 3389 -j ACCEPT


Ça n'a rien à voir avec ton problème, mais tu peux ajouter "-o eth0" et
"-d 192.168.0.39" pour que la règle n'autorise que les connexions
redirigées par la règle DNAT.

iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 3389 -j DNAT --to
192.168.0.39

Mais le port en question n'apparait toujours pas ouvert de l'exterieur.


Tu es sûr que la C-box redirige bien tout vers le serveur ?


Quand le service est sur la box Linux, le port apparait bien en open
(resultat d'un nmap depuis l'exterieur)
Quand le service est sur une machine du LAN et que j'applique ces
regles, le service apparait, mais en "filtered"

Tu as bien une règle qui accepte les paquets retour dans l'autre sens ?


Quelle regle dois je appliquer pour cela ?

Pas de règle placée avant qui pourrait bloquer les paquets ?


Il ne semble pas

Que donne un tcptraceroute sur le port 3389 depuis l'extérieur ?


tcptraceroute 213.223.113.149 3389
Selected device eth0, address 192.168.0.1, port 38252 for outgoing packets
Tracing the path to mx.cadic.fr (213.223.113.149) on TCP port 2021, 30
hops max
1 192.168.0.254 0.953 ms 0.521 ms 0.489 ms
2 82.226.126.254 30.491 ms 29.728 ms 30.128 ms
3 vlq-6k-2-a5.routers.proxad.net (213.228.4.254) 32.592 ms 29.737
ms 44.086 ms
4 * * *
5 * * *
6 Ten9-1.th21-co-1.n9uf.net (84.96.235.37) 152.681 ms * 31.513 ms
7 V4090.abv1-co-1.n9uf.net (62.39.148.18) 30.784 ms * 30.860 ms
8 V4069.abv1-co-1.n9uf.net (62.39.148.101) 31.142 ms * 45.928 ms
9 34.243.96-84.rev.gaoland.net (84.96.243.34) 32.208 ms 31.021 ms
31.348 ms
10 195.115.106.77 31.257 ms 31.668 ms 31.037 ms
11 213.223.42.85 31.241 ms 31.313 ms 30.926 ms
12 * * *
13 213.223.113.149 49.599 ms 83.431 ms 50.134 ms
14 * * *
15 * 213.223.113.149 52.911 ms !H *


Avatar
olaf


C'est une erreur de copier-coller votre --to 192.168.0.39 ?


oui


Il me semble que la syntaxe correcte est --to-destination xx.xx.xx.xx


Vous avez raison.

Avatar
Pascal Hambourg

C'est une erreur de copier-coller votre --to 192.168.0.39 ?

Il me semble que la syntaxe correcte est --to-destination xx.xx.xx.xx


--to est un raccourci aussi bien pour --to-destination (avec la cible
DNAT) que pour --to-source (avec la cible SNAT).

Avatar
Pascal Hambourg

Tu as bien une règle qui accepte les paquets retour dans l'autre sens ?


Quelle regle dois je appliquer pour cela ?


Ça dépend de ce que tu as déjà. Si tu as déjà la règle classique :
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
alors ça suffit.

Que donne un tcptraceroute sur le port 3389 depuis l'extérieur ?


tcptraceroute 213.223.113.149 3389
Selected device eth0, address 192.168.0.1, port 38252 for outgoing packets
Tracing the path to mx.cadic.fr (213.223.113.149) on TCP port 2021, 30
hops max


Hein ? Port 2021 ou 3389 ?

10 195.115.106.77 31.257 ms 31.668 ms 31.037 ms
11 213.223.42.85 31.241 ms 31.313 ms 30.926 ms
12 * * *


Bizarre, cette absence de réponse en 12.

13 213.223.113.149 49.599 ms 83.431 ms 50.134 ms


Ça doit être la réponse de la Cbox.

14 * * *
15 * 213.223.113.149 52.911 ms !H *


Et ça doit être la réponse de la passerelle Linux.
!H signifie "Host unreachable", réponse typique quand l'adresse IP de
destination n'est pas connectée et ne répond pas aux requêtes ARP. Mais
ça peut aussi être un filtrage. La machine a bien pour adresse
192.168.0.39 ? A-t-elle des règles de filtrage ?


1 2