Salut,
Troumad a �crit :
Je teste un transfert de ftp du style suivant :
iptables -t nat -A PREROUTING -j DNAT -i $NET -p TCP --dport 2211 --to-destination 192.168.1.10:21
Tu risques d'avoir des ennuis si tu fais passer du FTP sur un port non standard.
Le probl�me est que les "ls", "get" ne passent pas :( Les pwd et cd passent.
La diff�rence est que les deux premi�re commandes provoquent un transfert de donn�es sur une connexion ftp-data en mode actif ou passif selon la configuration courante.
Il me semble alors que je doit aussi faire quelque chose au niveau du port 20, mais quoi ?
Rien de sp�cial au niveau du port 20.
ftp> get bashrc local: bashrc remote: bashrc 200 PORT command successful 425 Unable to build data connection: Connection timed out
Commande PORT donc mode actif.
Rappel des faits (long, d�sol�):
En mode actif, le client envoie au serveur par la connexion de contr�le (port standard 21) une commande PORT avec son adresse et un port qu'il ouvre en �coute. Le serveur se connecte au client en utilisant l'adresse et le port destination fournis par ce dernier pour transf�rer les donn�es (get, put, ls). Normalement le serveur utilise le port source imm�diatement inf�rieur au port de la connexion FTP de contr�le, donc le port 20 si la connexion de contr�le utilise le port FTP standard.
En mode passif, le client envoie au serveur une commande PASV, � laquelle le serveur r�pond en envoyant son adresse et un num�ro de port qu'il ouvre en �coute. Ce num�ro de port dynamique n'est pas le port (FTP - 1). Ensuite le client se connecte au serveur en utilisant l'adresse et le port destination fournis par le serveur.
On comprend pourquoi le NAT sans pr�caution peut faire foirer le protocole FTP. Les adresses publiques ne correspondent pas aux adresses �chang�es dans les commandes PORT ou PASV, et les ports ne sont pas redirig�s par le NAT.
En pratique, sans dispositions particuli�res sur le routeur NAT ou le serveur :
- client derri�re un routeur NAT -> le mode actif ne marche pas
- serveur derri�re un routeur NAT -> le mode passif ne marche pas
Et quand les deux sont chacun derri�re un routeur NAT, je vous laisse deviner le carnage.
Le probl�me est connu depuis � peu pr�s aussi longtemps que le NAT existe. Certains programmes serveurs FTP ont �t� adapt�s pour pouvoir fonctionner en mode passif derri�re un routeur NAT : en mode passif, ils ne fournissent pas leur propre adresse IP dans la r�ponse � la commande PASV du client mais l'adresse publique du routeur (obtenir cette adresse publique quand elle est dynamique est un autre probl�me). Il faut aussi leur sp�cifier une plage de ports � utiliser pour les connexions de donn�es, et configurer le routeur NAT pour rediriger ces ports vers l'adresse priv�e du serveur.
Une autre approche consiste pour le routeur NAT � surveiller le contenu de la connexion FTP de contr�le, intercepter les adresses et ports des commands PORT ou PASV, et remplacer l'adresse priv�e par l'adresse publique et cr�er dynamiquement une redirection du port de la connexion de donn�es. Le programme qui r�alise cette t�che pour un protocole donn� (FTP n'est pas le seul � avoir des probl�mes avec NAT) est appel� un "helper". Dans le noyau Linux 2.4 ou 2.6, le helper NAT FTP associ� � iptables est le module ip_nat_ftp qui a lui-m�me besoin du module de suivi de connexion FTP ip_conntrack_ftp.
Pour revenir � ton cas : en mode actif sur un serveur FTP NAT� �a aurait d� passer, sauf si les connexions sortantes sont bloqu�es par le routeur NAT devant le serveur FTP ou un firewall install� sur la machine qui h�berge le serveur, ou si le client FTP est lui-m�me derri�re un routeur NAT qui ne g�re pas le protocole FTP sur le port 2211. La plupart des routeurs savent g�rer le protocole FTP mais uniquement quand la connexion de contr�le utilise le port standard 21, et parfois aussi uniquement quand c'est le client qui est derri�re le NAT.
Si le client est derri�re un routeur NAT qui ne peut �tre configur� pour suivre le le protocole FTP sur le port 2211, il faut passer en mode passif. De plus, il faut configurer le routeur NAT du serveur FTP pour prendre en compte le procole FTP. Sous Linux, c'est faisable.
Comme je ne sais pas si le helper FTP intervient avant ou apr�s le NAT pour identifier une connexion FTP de contr�le, il vaut mieux sp�cifier les deux ports 21 et 2211. Par d�faut, si on ne sp�cifie pas de liste de ports, le helper surveille le port 21.
modprobe ip_conntrack_ftp ports=21,2211 modprobe ip_nat_ftp ports=21,2211
Le chargement des modules au d�marrage peut �tre inscrit dans /etc/modules.conf au moyen de l'outil modconf.
Ensuite, il faut autoriser les connexions FTP de donn�es entrantes qui sont identifi�es par le suivi de connexion de Netfilter comme li�es aux connexions �tablies. Soit dans une r�gle particuli�re :
iptables -A FORWARD -i $NET -m state --state RELATED -p tcp --syn \ -j ACCEPT
On peut ajouter une restriction sur la plage de ports destination utilis�e par le serveur si elle est connue.
Soit dans la r�gle plus g�n�rale bien connue :
iptables -A FORWARD -i $NET -m state --state ESTABLISHED,RELATED \ -j ACCEPT
-- Pensez � lire la FAQ de la liste avant de poser une question : http://wiki.debian.net/?DebianFrench
Pensez � rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"
To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

