Problème ftp sur VM proxmox sans ipfailover


#1

Bonjour,

j’ai récemment installé une VM debian sur un serveur avec Proxmox. Je n’ai pas d’ip failover, aussi j’ai créé un lan avec proxmox de la manière suivante :
création d’une nouvelle interface réseau avec la configuration suivante :

address  192.168.0.254
       netmask  255.255.255.0
       broadcast 192.168.0.255
       bridge-ports none
       bridge-stp off
       bridge-fd 0
       post-up echo 1 > /proc/sys/net/ipv4/ip_forward
       post-up iptables -t nat -A POSTROUTING -s '192.168.0.0/24' -o vmbr0 -j MASQUERADE
       post-down iptables -t nat -D POSTROUTING -s '192.168.0.0/24' -o vmbr0 -j MASQUERADE
       post-up iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 80 -j DNAT --to 192.168.0.2:80
       post-down iptables -t nat -D PREROUTING -i vmbr0 -p tcp --dport 80 -j DNAT --to 192.168.0.2:80
       post-up iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 443 -j DNAT --to 192.168.0.2:443
       post-down iptables -t nat -D PREROUTING -i vmbr0 -p tcp --dport 443 -j DNAT --to 192.168.0.2:443
       post-up iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 38202 -j DNAT --to 192.168.0.2:21
       post-down iptables -t nat -D PREROUTING -i vmbr0 -p tcp --dport 38202 -j DNAT --to 192.168.0.2:21
       post-up iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 38203 -j DNAT --to 192.168.0.2:22
       post-down iptables -t nat -D PREROUTING -i vmbr0 -p tcp --dport 38203 -j DNAT --to 192.168.0.2:22

Ensuite, sur la VM, j’ai configuré l’interface réseau pour être dans le même lan et utiliser 192.168.0.254 pour accéder à internet.
Ca fonctionne, pas de problème à ce niveau.
La redirection des ports 80 et 443 vers la VM fonctionnent nickel.
J’accède en ssh à la VM sans problème avec la redirection du port 38203 du serveur.
Par contre, je n’arrive pas à me connecter en ftp avec filezilla. Plus précisément, je me connecte, mais au moment de récupérer le contenu du dossier, plantage :

    |Statut :|Connecté|
    |---|---|
    |Statut :|Récupération du contenu du dossier...|
    |Statut :|Le serveur a envoyé une réponse passive avec une adresse non routable. Adresse remplacée par celle du serveur.|
    |Commande :|LIST|
    |Erreur :|La connexion des données ne peut pas être établie : ECONNREFUSED - Connexion refusée par le serveur|

Dans le fichier de log de la VM, rien de particulier, il est juste indiqué

Sat Jan 12 11:55:33 2019 [pid 8121] CONNECT: Client "XXXXXX"
Sat Jan 12 11:55:33 2019 [pid 8120] [[spoiler]YYYYY[/spoiler]] OK LOGIN: Client "XXXXXX"

Je ne vois pas trop quoi faire, quelqu’un pourrait-il m’aider ?
Merci d’avance.

Neibaf


#2

Tu découvres que le NAT et le protocole FTP ne font pas bon ménage ou quoi ? D’autant plus quand on utilise un port non standard.

Le NAT a besoin d’une béquille pour gérer correctement le protocole FTP. Pour netfilter, celle-ci est fournie par le module du noyau nf_nat_ftp. Pour être efficace, il faut l’associer au port utilisé par la connexion de commande FTP. Cela se fait avec la cible CT d’iptables. Il faut aussi que la connexion de commande soit en clair et non chiffrée par TLS/SSL (donc adieu la confidentialité du mot de passe).

Autrement, on peut gérer le protocole FTP à la main :

  • spécifier une plage de ports passifs dans le serveur FTP
  • rediriger cette plage de ports avec des règles DNAT
  • configurer le serveur FTP pour annoncer l’adresse IP externe du NAT comme adresse passive.

Note : le mode actif FTP éviterait tous ces tracas côté serveur mais les reporterait côté client s’il est lui-même derrière un NAT. Avec un port de commande non standard, il n’y a quasimement aucune chance que cela fonctionne (pas pris en charge par le NAT des routeurs domestiques et autres box internet).


#3

Bonjour,

alors oui, je mets beaucoup de temps à répondre, et oui, je découvre certaines choses, et je ne suis pas près de m’arrêter ! Mais ça ne veut pas dire que je suis plus con qu’un autre… ;-).

Alors, en essayant de bien comprendre tes remarques, j’ai modifié 2 choses :

  • pasv_min_port et pasv_max_port dans le fichier de conf de vsftpd, en laissant une marge de 7 ports
  • j’ai redirigé les mêmes ports depuis la machine serveur proxmox vers la VM

Et ça marche, donc merci :slight_smile: