Problème FTP depuis mise en place iptables

Bonjour , je vous explique mon problème ,
Hier j’ai mis en place un firewall iptables pour bloquer certain accès depuis l’extérieur à ma machine qui est ouverte sur internet. Le parzmetrage de iptables c’est bien passé et tout mes services fonctionne comme avant , je précise que je bloque tout en input et forward et que j’autorise loutput par défaut , j’ai donc dans ma ma table des règles autorisant le trafic en input sur ma machine accès spécifiquement pour éviter l’utilisation de mon serveur dns a l’extérieur par exemple ,
Depuis que mes règles iptables sont mise en place je n’arrive plus à récupérer le contenu du dossier de mon serveur FTP
Ma config de FTP est basic avec les ports passif 5000-5100 ouvert
Je vous transmet mes règles iptables voir si vous remarquiez une grossière erreur
image

Autre point il me faudrait maintenant un pare feu ip6 mais pour le moment ce n’est pas urgent
Cordialement
Tomy

Si tu as un FTP ouvert sur internet, déjà ce n’est pas terrible, mais c’est un choix.

Mais as tu le port 21 ouvert? Car tes ports 5000-5100 ne servent qu’à la data, pas à l’ouverture de session.

Au premier coup d’oeil je relève déjà deux erreurs grossières :

  • poster une image, peu pratique, au lieu de texte
  • poster la sortie de iptables -Lv, peu lisible et incomplète, au lieu de iptables-save

Peut être pas très lisible dans mon image mais oui , le port 20 et 21 sont ouvert

# Generated by xtables-save v1.8.2 on Fri May 28 20:02:11 2021
*filter
:INPUT DROP [61059:12350754]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [35314:2372461]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -i lo -m comment --comment "Localhost input" -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -p tcp -m tcp --dport 3389 -j ACCEPT
-A INPUT -p udp -m udp --dport 3389 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 3422 -j ACCEPT
-A INPUT -p udp -m state --state RELATED,ESTABLISHED -m udp --dport 51413 -j ACCEPT
-A INPUT -s 192.168.0.0/24 -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -s 192.168.0.0/24 -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -s 9.9.9.9/32 -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -s 9.9.9.9/32 -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -s 149.112.112.112/32 -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -s 149.112.112.112/32 -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 9091 -j ACCEPT
-A INPUT -p tcp -m multiport --dports 20,21 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --sport 5000:5100 --dport 5000:5100 -m conntrack --ctstate NEW,RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
COMMIT
# Completed on Fri May 28 20:02:11 2021

Ceci est en trop. Le port source utilisé par le client est quelconque.
Si la connexions de commande FTP sur le port 21 n’est pas chiffrée avec TLS/SSL, tu pourrais utiliser le suivi de connexion FTP pour autoriser dynamiquement le port ouvert pour chaque connexion avec le module nf_conntrack_ftp. Cf. la cible CT et la correspondance helper. Ça ne marche qu’avec le FTP en clair.

Par ailleurs il y a des maladresses et des redondances, mais je ne vois rien d’autre susceptible de bloquer les connexions de données FTP.

Qu’elle que chose comme ceci ?

iptables -A FORWARD -m conntrack --ctstate RELATED -m helper --helper ftp -d $iplocalhost -p tcp --dport 21 -j ACCEPT

après a voir appliquer la règle , je ne vois pas de changement
elle ressemble a ça :

iptables -A FORWARD -m conntrack --ctstate RELATED -m helper --helper ftp -d 192.168.0.49 -p tcp --dport 21 -j ACCEPT
Statut : Connecté
Statut : Récupération du contenu du dossier…
Commande : PWD
Réponse : 257 « /home/tomy/Stockage » est le répertoire courant
Commande : TYPE I
Réponse : 200 Type paramétré à I
Commande : PASV
Réponse : 227 Entering Passive Mode (x,x,x,x,157,69).
Commande : LIST
Erreur : Les données de connexion ne peuvent pas être établies : ETIMEDOUT - Tentative de connexion expirée
Erreur : Connection interrompue après 20 secondes d’inactivité
Erreur : Impossible de récupérer le contenu du dossier

Non, le trafic ne passe pas par la chaîne FORWARD.
D’autre part il faut associer la connexion de commande au helper ftp avec la cible CT dans la table raw, ce n’est plus automatique par défaut (à moins de charger le module nf_conntrack avec le paramètre nf_conntrack_helper=1

Je répète que ça ne peut fonctionner que si la connexion de commande FTP est en clair. Est-ce le cas ?

Tu es sûr(e) d’avoir bien fixé la plage de ports passifs à 5000-5100 dans le serveur ? Le port annoncé dans la réponse PASV n’est pas dans cette plage.

j’ai réussi a faire refonctionner mon ftp en effacer toutes mes règles le concernant et en ajoutant celle ci

-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
COMMIT
et echo « 1 » > /proc/sys/net/netfilter/nf_conntrack_helper

source : https://unix.stackexchange.com/questions/93554/iptables-to-allow-incoming-ftp

Donc FTP non sécurisé, avec transmission du mot de passe en clair. C’est pour du FTP anonyme ?

Simplement pour lire des films/series dispo sur le répertoire du serveur, les identifiants sont pour mes amis pour qu’il puisse lire les fichiers directement de chez eux via vlc ou autre.
Je n’est aucune idée de ce qu’est un ftp anonyme…
j’avais bien mes ports passif config sur 5000 à 5100 mais je l’ai est commenter ,

Peu importe pour qui sont les identifiants, les mots de passe sont transmis en clair et n’importe qui sur le chemin des paquets peut les voir.

Un FTP anonyme est un serveur public ouvert à tous qui ne requiert pas d’authentification. En général il ne permet que de télécharger des fichiers, pas d’en déposer.

C’est vrai que cela serait une bonne solution à mettre en place , merci.
Après mon utilisateur ftp a comme paramètre —shell /bin/false/ .

Et est-il possible de lire le contenu du fichier/dossier depuis un ftp anonyme ?

Bien sûr. Un exemple : ftp://ftp.free.fr