Connexion en FTP avec iptables impossible

Bonjour/bonsoir,

Je souhaite me connecter en FTP à mon serveur depuis une autre machine. J’ai récemment installé iptables pour sécuriser davantage mon serveur, et j’y ait ajouté les règles nécessaires pour effectuer ce que je veux faire, y compris donc les règles pour les ports du protocole FTP.

Simplement, la connexion à mon FTP est devenue impossible depuis le moment ou j’ai lancé mon script iptables avec mes règles. J’ai, bien sûr, ouvert les ports 20, 21, et la plage de ports du mode passif qui, dans mon cas, est 60000-60050.

voici donc les règles que j’ai ajoutées à mon script :

sudo iptables -t filter -A OUTPUT -p tcp --dport 20 -j ACCEPT
sudo iptables -t filter -A INPUT -p tcp --dport 20 -j ACCEPT
sudo iptables -t filter -A OUTPUT -p tcp --dport 21 -j ACCEPT
sudo iptables -t filter -A INPUT -p tcp --dport 21 -j ACCEPT
sudo iptables -A OUTPUT -p tcp -m tcp --dport 60000:60050 --syn -j ACCEPT
sudo iptables -A INPUT -p tcp -m tcp --dport 60000:60050 --syn -j ACCEPT

J’utilise ProFTPd comme serveur FTP, et FileZilla comme client FTP.
Je n’ai pas configuré le FTP sur TLS car, d’après ce que j’ai compris, c’est compliqué voire impossible de définir des règles iptables pour le FTP sur TLS.

Aurais-je oublié quelque chose d’important ou commis une erreur dans mes règles iptables ?

Merci par avance pour votre aide.

PS : je viens de tester la chose suivante :
J’ai commenté la ligne PassivePorts (ligne dans laquelle j’avais précisé donc les ports du mode passif), puis redémarré ProFTPd, rien ne change.

Que se passe-t-il exactement ? Est-ce que la connexion de commande (authentification) s’établit au moins et ce sont uniquement les connexions de données (listage et transfert) qui échouent ? Ou bien même la connexion de commande échoue ?

C’est mauvais.

  1. Pourquoi sudo dans un script ?
  2. On ne peut pas juger l’adéquation de l’ajout d’une règle sans connaître l’ensemble du jeu de règles. Ici, on ne voit pas les règles acceptant les paquets dans le sens retour des connexions.
    3.Sur un serveur FTP, accepter les connexions sortantes à destination des port 20 et 21 est inutile car un serveur ne fait pas de connexions vers ces ports. Il reçoit des connexions entrantes vers son port 21 et fait des connexions sortantes depuis son port 20 s’il est en mode actif.
  3. Accepter les connexions sortantes à destination des ports passifs est inutile car ces ports sont utilisés en écoute pour des connexions entrantes.

Effectivement, ma configuration iptables n’était pas logique.

Toutefois, ayant modifié à nouveau le script (j’ai également retiré les sudo, effectivement inutiles…), mais cela ne fonctionne toujours pas.

Voici une capture d’écran de la console FTP de FileZilla :

24

et voici mes nouvelles règles iptables :

iptables -t filter -A OUTPUT -p tcp --sport ftp -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport ftp -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --sport ftp-data -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport ftp-data -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 60000:60050 -j ACCEPT

OK, j’avais juste pas redémarré le script iptables… ça a l’air de fonctionner, je me connecte rapidement et je n’ai plus de messages d’erreur !
De plus, la connexion TLS fonctionne également.

Merci pour l’aide, je débute en ce qui concerne la sécurité d’un serveur Linux.

iptables -t filter -A OUTPUT -p tcp --sport ftp -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport ftp-data -j ACCEPT

La méthode recommandée pour accepter les paquets dans le sens retour est de se baser sur l’état ESTABLISHED et pas uniquement sur le port source ou destination.

Au passage, tu n’as pas ajouté de règle pour accepter les paquets retour des connexions de données passives, donc une règle générale doit déjà exister.

Ok je vais y regarder, merci pour l’aide et pour les conseils !