Bonjour,
Avec un noyau récent (4.10), je n'arrive plus à réaliser l'opération suivante qui fonctionnait parfaitement avec un noyau plus ancien (4.1 , ok il était vraiment plus ancien).
Il s'agit d'accéder à un serveur ftp qui se trouve dans mon lan, depuis une passerelle, par le port 1999.
Gateway : 192.168.4.254
FTP : 192.168.1.1
Le problème ne se produit que pour le FTP. J'ai testé avec un accès telnet sur 192.168.1.1 depuis l'extérieur, avec de la redirection de port, et ça fonctionne.
Les problèmes semblent venir du "ftp conntracking" présent dans le kernel depuis la version 4.9.
ip forwarding et nf conntracking sont activés:
net.ipv4.ip_forward = 1
net.netfilter.nf_conntrack_helper = 1
les modules chargés:
nf_nat_ftp 16384 0
nf_conntrack_ftp 20480 3 nf_nat_ftp
nf_nat 24576 5 xt_nat,nf_nat_redirect,nf_nat_ftp,nf_nat_masquerade_ipv4,nf_nat_ipv4
nf_conntrack 94208 9 nf_conntrack_ftp,nf_conntrack_ipv4,xt_helper,nf_nat_ftp,xt_CT,nf_nat_masquerade_ipv4,xt_conntrack,nf_nat_ipv4,nf_nat
iptable_raw 16384 1
iptable_nat 16384 1
nf_nat_ipv4 16384 1 iptable_nat
iptable_filter 16384 1
ip_tables 28672 3 iptable_filter,iptable_raw,iptable_nat
Côté iptables, je pense avoir fait ce qu'il faut également.
INPUT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m helper --helper ftp -j ACCEPT
iptables -A INPUT -p tcp --dport 1999 -j ACCEPT
FORWARD
iptables -A FORWARD -i $ifint -o $ifext -mstate --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i $ifext -o $ifint -mstate --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -p tcp -m tcp --sport ftp-data --dport 1999 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i $ifext -p tcp --dport 21 -d 192.168.1.1 -j ACCEPT
# everybody else on the lan can access ftp
iptables -A FORWARD -p tcp -m tcp --dport ftp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -p tcp -m tcp --sport ftp-data -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
PREROUTING
iptables -A PREROUTING -t raw -p tcp --dport 21 -j CT --helper ftp
iptables -A PREROUTING -t raw -p tcp --dport 1999 -j CT --helper ftp
iptables -t nat -I PREROUTING -j DNAT -i $ifext -p TCP --dport 1999 --to-destination 192.168.1.1:21
POSTROUTING
iptables -t nat -A POSTROUTING -o $ifext -j MASQUERADE -s 192.168.0.0/16
iptables -t nat -A POSTROUTING -d 192.168.1.1 -j SNAT --to 192.168.1.254
Si vous avez une idée de ce qui pourrait manquer, je vous en serait très reconnaissant.
Merci d'avoir lu.
# il sert à quoi ton prerouting sur -t raw
Posté par NeoX . Évalué à 2.
sur ces meme regles tu dis de passer le paquet à une table CT
mais elle n'est pas definie dans l'iptables que tu nous sors ?
sinon on est bien d'accord que tu as le reseau suivant ?
Internet <-> 192.168.4.254 [192.168.1.254] <-> LAN <-> [192.168.1.1] serveur FTP
[^] # Re: il sert à quoi ton prerouting sur -t raw
Posté par jseb . Évalué à 2. Dernière modification le 13 mai 2017 à 18:07.
Vu que tout fonctionnait en kernel 4.1, j'ai tenté de trouver ce qui pouvait changer maintenant, et je suis tombé là dessus:
https://unix.stackexchange.com/questions/93554/iptables-to-allow-incoming-ftp
Et en particulier sur cette partie:
J'avoue avoir recopié assez servilement, je pensais que cette rêgle se suffisait à elle même.
Il y a bien du passage dedans.
Sinon oui, le réseau suit bien ce schéma:
Internet <-> [192.168.1.254] Gateway <-> LAN <-> [192.168.1.1] serveur FTP
(il y a également un serveur ftp sur la gateway, mais il fonctionne correctement depuis l'extérieur).
Discussions en français sur la création de jeux videos : IRC libera / #gamedev-fr
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.