URL: https://linuxfr.org/forums/linux-noyau/posts/acceder-a-un-serveur-ftp-depuis-une-passerelle Title: accéder à un serveur ftp depuis une passerelle Authors: jseb Date: 2017年05月13日T16:25:01+02:00 License: CC By-SA Tags: iptables, netfilter, ftp et nat Score: 1 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 ```shell 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 ```shell 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 ```shell 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 ```shell 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.