Mise en place d’un accès à un serveur FTP via HAProxy

Dans cette configuration, nous allons mettre en place un accès à un serveur FTP à travers HAProxy. Ce guide vous aidera à configurer correctement HAProxy pour gérer le trafic FTP, en particulier en mode passif, où les transferts de données se font via des ports dynamiques. Nous prendrons en compte la configuration du serveur FTP (par exemple, vsftpd) ainsi que la gestion des règles de pare-feu nécessaires pour que les connexions FTP puissent passer correctement.

Diagramme de flux (ASCII)

Voici un diagramme de flux en ASCII pour la mise en place d’un accès FTP passif via HAProxy :

FTP Client         HAProxy         vsftpd Server
    |                |                   |
1.  Connexion FTP    |                   |
    Port 21          |                   |
    |--------------->|                   |
                     |                   |
2.  Redirection      |                   |
    vers port 21     |                   |
                     |------------------>|
                     |                   |
3.  Réponse          |                   |
    FTP              |                   |
    |<---------------|                   |
                     |                   |
4.  Demande PASV     |                   |
    |--------------->|                   |
                     |                   |
5.  Renvoi IP + Port |                   |
   (port passif)     |------------------>|
                     |                   |
6.  Connexion de     |                   |
    données          |                   |
    (port passif)    |                   |
    |--------------->|                   |
                     |------------------>|

Explication du flux :

  1. Client FTP se connecte à HAProxy sur le port 21 pour établir la connexion de commande.
  2. HAProxy redirige la connexion vers le serveur vsftpd sur le port 21.
  3. Le serveur FTP répond au client via HAProxy.
  4. Le client demande à passer en mode passif (PASV).
  5. Le serveur FTP renvoie une adresse IP publique et un port passif (dans la plage 20000-21000).
  6. Le client se connecte aux ports passifs via HAProxy pour les transferts de fichiers.
  7. HAProxy redirige les connexions passives vers les ports définis sur le serveur FTP pour transférer les données.

Ce diagramme illustre les étapes du flux de communication pour établir un transfert FTP passif via HAProxy.

Prérequis :

  • HAProxy installé sur le serveur proxy.
  • vsftpd (ou tout autre serveur FTP) installé sur un serveur backend.
  • Accès administrateur pour configurer les règles de pare-feu (iptables ou autre) et la configuration réseau.

Configuration du serveur FTP (vsftpd)

Le serveur FTP vsftpd doit être configuré pour prendre en charge le mode passif. Ce mode exige que le serveur spécifie une plage de ports pour les transferts de données, et que l’adresse IP publique (ou celle de HAProxy) soit fournie au client.

Exemple de configuration vsftpd :

Dans le fichier /etc/vsftpd/vsftpd.conf, ajoutez les options suivantes :

# Activer le mode passif
pasv_enable=YES

# Spécifier une plage de ports pour les connexions passives
pasv_min_port=20000
pasv_max_port=21000

# L'adresse IP publique de HAProxy (ou l'adresse publique si le serveur est accessible directement)
pasv_address=<adresse_IP_HAProxy>

# Desactiver les connexions sur le port 20 (pas de mode actif)
connect_from_port_20=NO

Configuration de HAProxy

HAProxy doit être configuré pour rediriger à la fois le canal de commande FTP (port 21) et les connexions passives (plage de ports définie dans vsftpd) vers le serveur FTP backend.

Exemple de configuration HAProxy :

Frontend pour le canal de commande FTP (port 21) :

frontend ftp_frontend
    bind *:21
    mode tcp
    option tcplog
    default_backend ftp_backend

Backend pour le canal de commande FTP :

backend ftp_backend
    mode tcp
    option tcplog
    server ftp_server 192.168.1.100:21 check send-proxy

Frontend pour les connexions passives (plage de ports 20000-21000) :

frontend ftp_passive
    bind *:20000-21000
    mode tcp
    option tcplog
    default_backend ftp_passive_backend

Backend pour les connexions passives :

backend ftp_passive_backend
    mode tcp
    option tcplog
    server ftp_server 192.168.1.100 send-proxy

Configuration des flux réseau

Pour que les connexions FTP en mode passif fonctionnent correctement, tous les flux entre HAProxy et le serveur vsftpd doivent être ouverts sur les ports suivants :

  1. Port 21 pour le canal de commande FTP.
  2. Plage de ports passifs (dans cet exemple, de 20000 à 21000) pour les transferts de données FTP passifs.

Exemple de règles iptables pour ouvrir les flux entre HAProxy et vsftpd :

Sur le serveur FTP (vsftpd) :

# Autoriser le port 21 pour le canal de commande FTP
iptables -A INPUT -p tcp --dport 21 -j ACCEPT

# Autoriser la plage de ports passifs pour FTP (par exemple 20000-21000)
iptables -A INPUT -p tcp --dport 20000:21000 -j ACCEPT

# Autoriser les connexions établies pour FTP
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

# Activer le suivi des connexions FTP (module conntrack)
modprobe nf_conntrack_ftp

Conclusion

Pour que le FTP passif fonctionne correctement via HAProxy, il est essentiel de :

  1. Configurer vsftpd pour qu’il utilise une plage de ports passifs spécifique et renvoie l’adresse IP publique ou celle de HAProxy.
  2. Configurer HAProxy pour rediriger à la fois le port 21 et la plage de ports passifs.
  3. Ouvrir les flux réseau nécessaires entre HAProxy et le serveur FTP pour garantir que les transferts de données passifs puissent avoir lieu.

En suivant cette configuration, vous garantirez un accès FTP fluide via HAProxy avec des transferts en mode passif.