Probleme VSFTPD en mode passif

bonsoir a tous,

J’ai un serveur dédié sous debian avec vsftpd qui tourné, mais ça c’était avant.

le serveur tourné comme un charme puis l’hébergeur a migré l’ip serveur, jusque la pas de problème j’ai fait le nécessaire seulement depuis cette migration plus moyen d’utiliser vsftpd en mode passif seul le mode actif fonctionne…

la config n’a pas bougé, j’ai supprimé les règles IPTables puis recrée.
le module ip_conntrack_ftp et ip_nat_ftp je n’arrive pas a les charger la commande se termine bien mais avec lsmod rien.

le log client (FTP Rush):
[1] PASV
[1] 227 Entering Passive Mode (195,154,000,000,212,161)
[1] Ouverture de la connexion IP: 195.154.000.000 PORT: 54433

résultat de la commande watch lsof -i
vsftpd 4887 root 6u IPv4 32737 0t0 TCP coucou.dedibox.fr:54433 (LISTEN)

j’en conclus au vu des log que client et serveur sont d’accord sur le port mais que la liaison ne se fait pas, donc problème de routage mais du a quoi pas iptables les règles sont appliquer, les modules non chargé ??

si vous avez une pistes je prend car la je séche.

Et en mode passif étendu (EPSV) avec un client qui le supporte comme tnftp ?

Quelles règles exactement ? Et sans filtrage, en acceptant tout pour les tests ?

Les modules ont changé de nom depuis longtemps, ils commencent par “nf_” au lieu de “ip_”. Les anciens noms ne sont plus que des alias. Si ton serveur ne fait pas de NAT tu n’as pas besoin du module nf_nat_ftp, seul le module nf_conntrack_ftp est utile pour que le suivi de connexion reconnaisse les connexions de données FTP dans l’état RELATED.

La nouvelle adresse IP de ton serveur est vraiment 195.154.0.0 ?
Tu n’aurais pas fixé l’adresse IP passive dans le fichier de configuration de vsftpd à une mauvaise valeur ?

Le nom coucou.dedibox.fr ne résoud pas.

Je cherche a avoir un serveur FTP passe partout.
donc EPSV si je peut éviter.

j’ai essayer en supprimant tout les règles et autoriser tout, rien
les règles que j’utilise :
iptables -A INPUT -i ppp0 -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o ppp0 -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i ppp0 -p tcp --sport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -o ppp0 -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -i ppp0 -p tcp --sport 49152:65535 --dport 49152:65535 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o ppp0 -p tcp --sport 49152:65535 --dport 49152:65535 -m state --state ESTABLISHED,RELATED -j ACCEPT

ah oui effectivement j’étais pas réveille module bien charger.

non bien-sur que l’ip n’est pas 195.154.000.000 je l’ai fixer dans la config (pasv_address=195.154.000.000) pour voir mais ne change rien.

le nom coucou.dedibox.fr ne résoud pas c’est normale le vrai ne commence pas par coucou…

t’envoie la bonne ip et nom en mp.

[quote=“cedmar”]Je cherche a avoir un serveur FTP passe partout.
donc EPSV si je peut éviter.[/quote]
vsftp supporte les deux. Utiliser EPSV permettrait de voir si le problème vient de l’adresse passive (non applicable en EPSV) ou des règles iptables (applicable en EPSV et PASV).

Ces règles sont pour un poste client connecté avec une liaison point à point (VPN PPTP, ADSL PPPoE…) pas pour un serveur.

Quand tu maquilles des noms de domaines ou adresses IP, merci de le préciser.
Me transmettre les vrais ne me sert pas à grand-chose car ton serveur ne permet pas l’accès anonyme. L’adresse passive retournée dans la réponse à la commande PASV correspond-elle bien à l’adresse IP du serveur ?

pourrais tu me dire si coté serveur il y a une modification a faire pour utiliser EPSV ?
j’ai tester avec filezilla la commande EPSV voici le log :
Réponse : 230 Login successful.
Commande : OPTS UTF8 ON
Réponse : 200 Always in UTF8 mode.
Statut : Connecté
Commande : EPSV
Réponse : 229 Entering Extended Passive Mode (|||59026|).

délai d’attente expiré et il ne se passe rien de plus.

quel règles j’aurais du utiliser alors ?

désoler, je pensait que ça ce comprendrais tout seul.

je peut te donner des ID si ça peut aider.

oui les adresses corresponde bien.

Donne la sortie de [mono]iptables-save[/mono] du serveur.
Teste sans aucun filtrage, avec tout à ACCEPT.

Sortie de iptables-save :

[code]# Generated by iptables-save v1.4.8 on Sat Jun 14 18:22:49 2014
*mangle
:PREROUTING ACCEPT [21385:1712493]
:INPUT ACCEPT [15516:1369127]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [3184:406418]
:POSTROUTING ACCEPT [3184:406418]
COMMIT

Completed on Sat Jun 14 18:22:49 2014

Generated by iptables-save v1.4.8 on Sat Jun 14 18:22:49 2014

*nat
:PREROUTING ACCEPT [10541:970216]
:POSTROUTING ACCEPT [665:51194]
:OUTPUT ACCEPT [665:51194]
COMMIT

Completed on Sat Jun 14 18:22:49 2014

Generated by iptables-save v1.4.8 on Sat Jun 14 18:22:49 2014

*filter
:INPUT ACCEPT [128:11577]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [41:3506]
:fail2ban-ssh - [0:0]
-A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh
-A INPUT -i eth0 -p tcp -m tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --sport 20 -m state --state RELATED,ESTABLISHED - j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --sport 49152:65535 --dport 49152:65535 -m state --state ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --sport 49152:65535 --dport 49152:65535 -m state --state ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --sport 80 -m state --state ESTABLISHED
-A OUTPUT -o eth0 -p tcp -m tcp --dport 21 -m state --state NEW,ESTABLISHED -j A CCEPT
-A OUTPUT -o eth0 -p tcp -m tcp --dport 20 -m state --state ESTABLISHED -j ACCEP T
–state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -o eth0 -p tcp -m tcp --sport 49152:65535 --dport 49152:65535 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -o eth0 -p tcp -m tcp --dport 80 -m state --state NEW,ESTABLISHED
-A OUTPUT -o lo -j ACCEPT
-A fail2ban-ssh -s 27.251.28.59/32 -j DROP
-A fail2ban-ssh -j RETURN
COMMIT

Completed on Sat Jun 14 18:22:49 2014[/code]

aucun filtrage et tout accepter :

[code]

Generated by iptables-save v1.4.8 on Sat Jun 14 18:33:04 2014

*mangle
:PREROUTING ACCEPT [40:3006]
:INPUT ACCEPT [35:2646]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [16:1888]
:POSTROUTING ACCEPT [16:1888]
COMMIT

Completed on Sat Jun 14 18:33:04 2014

Generated by iptables-save v1.4.8 on Sat Jun 14 18:33:04 2014

*nat
:PREROUTING ACCEPT [9:926]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT

Completed on Sat Jun 14 18:33:04 2014

Generated by iptables-save v1.4.8 on Sat Jun 14 18:33:04 2014

*filter
:INPUT ACCEPT [31:2396]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [13:1420]
COMMIT

Completed on Sat Jun 14 18:33:04 2014[/code]

toujours pas possible en PASV ni en EPSV

J’en profite pour te mettre la config serveur si ça peut servir :

[code]## section des paramétres principale du serveur ##

listen=YES
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
ftpd_banner=Bienvenue sur le service ftp.
session_support=YES

Section mode passif

pasv_enable=YES
port_enable=YES
pasv_min_port=49152
pasv_max_port=65535
pasv_address=195.154.000.000
pasv_addr_resolve=YES

Section Sécurite du serveur

chroot_local_user=YES

Section gestion des utilisateurs

local_root=/Serveur
guest_enable=YES
guest_username=ftp
local_enable=YES
local_umask=077

Section gestion des anonymes

anonymous_enable=NO
write_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
anon_upload_enable=NO
anon_umask=022
hide_ids=YES

Section gestion des logs

log_ftp_protocol=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES[/code]

Ce jeu de règles n’a aucun effet : toutes les politiques par défaut sont à ACCEPT et il n’y a aucune règle DROP ou REJECT, sauf pour une adresse bannie par fail2ban. Donc le blocage ne vient pas de là.

Tu as vérifié le pare-feu du côté du poste client ?

Concernant le fichier de configuration de vsftpd, le texte de l’option ftpd_banner ne correspond pas exactement au texte que je reçois quand je me connecte à l’adresse que tu m’as transmise (“Bienvenue sur le service ftp de ***-***.com”). Es-tu sûr qu’il s’agit du bon fichier et qu’il a été pris en compte par vsftpd depuis son éventuelle modification ?

Je veux bien un accès anonyme ou un compte sur le serveur pour tester.

pour la bannière c’est normal j’ai effacé “de ***-***.com” (parano oui je sais …)

je vais vérifier le pare feu client, mais sans conviction.

t’envoie des id en mp.

je suis vert, tu avais raison le problème était coté client !!! et moi qui me dechiré avec le serveur …
livebox a la con c’etait sont firewall qui bloqué…

essaie quand meme de ton coté pour confirmé stp.

Tous les modes marchent bien vu d’ici : PORT (actif), PASV (passif), EPRT (actif étendu), EPSV (passif étendu). C’est quand même curieux que le firewall de la box bloque des connexions sortantes en mode passif alors qu’il gère correctement les connexions entrantes en mode actif…

Au passage, un serveur FTP qui n’est pas derrière un NAT n’a normalement pas besoin de l’option [mono]pasv_address[/mono].

ok je vais supprimé le bloc concerné dans le fichier config.

concernant iptables, que me conseille tu comme règles ?

Ah oui, j’oubliais les règles iptables. On voit bien le côté parano dont tu parlais dans ton jeu de règles : il traite séparément les paquets ESTABLISHED et RELATED de chaque type de connexion alors que d’habitude on se contente de les accepter tous ensemble avec une règle globale dans chaque chaîne, et on n’a plus qu’à traiter les paquets NEW pour chaque type de connexion (après tout, si on bloque le paquet NEW d’une nouvelle connexion, il n’y aura jamais de paquet ESTABLISHED ou RELATED pour cette connexion).

Essentiellement, il y a deux modifications à apporter :

  • changer les politiques par défaut des chaînes de la table filter à DROP (et attention de ne pas se louper à partir de ce moment, car on risque de s’enfermer dehors) ;
  • intervertir INPUT et OUTPUT.
    Il manque aussi une règle pour le trafic sur l’interface de loopback lo, qu’il faut accepter dans INPUT et OUTPUT, comme n’importe quelle interface en dépit de son fonctionnement particulier.
    Aussi, à moins que tu envisage de faire du filtrage encore plus restrictif sur une autre interface (ex : VPN), il n’est pas nécessaire de spécifier l’interface eth0 dans toutes les règles.

Voici ce que cela pourrait donner (je ne mets pas les [mono]iptables[/mono] en début de ligne) :

[code]# politiques par défaut
-P INPUT DROP
-P OUTPUT DROP

trafic local

-A INPUT -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT

connexion SSH entrante

-A INPUT -i eth0 -p tcp -m tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -o eth0 -p tcp -m tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

connexion de commande FTP entrante

-A INPUT -i eth0 -p tcp -m tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -o eth0 -p tcp -m tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT

connexion de données FTP passive entrante

-A INPUT -i eth0 -p tcp -m tcp --dport 49152:65535 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -o eth0 -p tcp -m tcp --sport 49152:65535 -m state --state ESTABLISHED -j ACCEPT

connexion de données FTP active sortante

-A OUTPUT -o eth0 -p tcp -m tcp --sport 20 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT

connexion HTTP entrante

-A INPUT -i eth0 -p tcp -m tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -o eth0 -p tcp -m tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT[/code]
Si le serveur doit faire des connexions sortantes par exemple pour télécharger ses mises à jour (DNS, HTTP(S), FTP…), il faudra ajouter les règles correspondantes. Exemple :

[code]#requête DNS sortante en UDP et TCP
-A OUTPUT -o eth0 -p udp -m udp --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p udp -m udp --sport 53 -m state --state ESTABLISHED -j ACCEPT
-A OUTPUT -o eth0 -p tcp -m tcp --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --sport 53 -m state --state ESTABLISHED -j ACCEPT

connexion HTTP(S) sortante

-A OUTPUT -o eth0 -p tcp -m multiport --dports 80,443 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INTPUT -i eth0 -p tcp -m multiport --sports 80,443 -m state --state ESTABLISHED -j ACCEPT[/code]
On peut être plus restrictif en n’acceptant les connexions sortantes que vers des adresses particulières.