11.4. FTP dans un cluster LVS

Le protocole de transfert de fichier (File Transport Protocol ou FTP) est un ancien protocole multi-ports complexe qui offre un certain nombre de défis à un environnement de grappe. Pour comprendre la nature de ces défis, vous devez tout d'abord comprendre certains éléments essentiels à propos du fonctionnement de FTP.

11.4.1. Fonctionnement de FTP

Dans la plupart des autres relations client-serveur, la machine cliente établit une connexion vers le serveur sur un port spécifique et ensuite le serveur répond au client sur ce même port. Lorsqu'un client FTP se connecte à un serveur FTP, il établit une connexion vers le port de contrôle FTP 21. Ensuite, le client annonce au server FTP s'il souhaite établir une connexion active ou passive. Le type de connexion choisi par le client détermine le type de réponse du serveur et les ports sur lesquels les transactions seront effectuées.

Il existe deux types de connexions aux données, à savoir :

Connexions actives

Lorsqu'une connexion active est établie, le serveur ouvre une connexion aux données vers le client, du port 20 vers un port à haute capacité sur la machine cliente. Toute donnée du serveur est ensuite transférée sur cette connexion.

Connexions passives

Lorsqu'une connexion passive est établie, le client demande au serveur FTP d'établir un port pour les connexions passives, qui peuvent avoir lieu sur tout port supérieur à 10.000. Le serveur se lie alors à ce port pour la durée de cette session spécifique et relaie en retour le numéro de ce port au client. Le client ouvre alors le port qui vient d'être lié pour la connexion aux données. Chaque requête faite par le client engendre une connexion aux données séparée. La plupart des clients FTP modernes essaient d'établir une connexion passive à FTP.

Il convient de noter ici deux points importants à propos de la mise en grappe :

  1. Le client détermine le type de connexions, pas le serveur. Dans de telles circonstances, et afin de clusteriser FTP de façon efficace, vous devez configurer les routeurs LVS de manière à ce qu'ils traitent aussi bien les connexions actives que les connexions passives.

  2. La relation client/serveur FTP peut potentiellement ouvrir un grand nombre de ports que l'Outil de configuration de Piranha et IPVS ignorent.

11.4.2. Impact sur le routage LVS

La transmission de paquets IPVS ne permet que des connexions entrant et sortant du cluster, sur la base de la reconnaissance du numéro de port ou de la balise pare-feu. Si un client extérieur au cluster essaie d'ouvrir un port qui n'est pas configuré pour une réponse IPVS, la connexion sera abandonnée. De même, si le serveur réel essaie d'ouvrir la connexion vers l'Internet sur un port qui n'est pas reconnu par IPVS, la connexion sera abandonnée. Ceci implique que toutes les connexions de clients FTP sur l'Internet doivent avoir la même balise pare-feu et que toutes les connexions venant du serveur FTP doivent être transmises correctement vers l'Internet en utilisant des règles de filtrage pour les paquets réseau.

11.4.3. Création des règles de filtrage des paquets réseau

Avant d'assigner toute règle iptables pour le service FTP, consultez les informations contenues dans la Section 11.3.1 à propos des services et des techniques multi-ports utilisés pour vérifier les règles de filtrage des paquets réseau déjà en place.

Ci-dessous se trouvent des règles assignant la même balise pare-feu, soit 21, au trafic du service FTP. Afin que ces règles puissent fonctionner correctement, vous devez également utiliser la sous-section VIRTUAL SERVERS (Serveurs virtuels) de l'Outil de configuration de Piranha pour configurer un serveur virtuel pour le port 21 avec une valeur équivalente à 21 dans le champ Firewall Mark (Balise pare-feu). Pour de plus amples informations, consultez la Section 12.6.1.

11.4.3.1. Règles pour les connexions actives

Les règles pour les connexions actives demandent au noyau d'accepter et de transmettre les connexions arrivant à l'adresse IP flottante interne sur le port 20 — le port de données du service FTP.

iptables
/sbin/iptables -t nat -A POSTROUTING -p tcp \
               -s n.n.n.0/24 --sport 20 -j MASQUERADE

Dans les commandes iptables ci-dessus, la série n.n.n devrait être remplacée par les trois premières valeurs de l'adresse IP flottante pour l'interface du réseau interne de l'interface NAT, définie dans le panneau intitulé GLOBAL SETTINGS (Paramètres globaux) de l'Outil de configuration de Piranha. Ces commandes permettent au routeur LVS d'accepter des connexions sortantes venant des serveurs réels reconnus par IPVS.

11.4.3.2. Règles des connexions passives

Les règles des connexions passives assignent les balises pare-feu appropriées aux connexions venant de l'Internet et à destination de l'IP flottante pour le service sur une vaste gamme de ports — de 10,000 à 20,000.

AvertissementAttention
 

Si vous limitez la gamme des ports pour les connexions passives, vous devez également configurer le serveur VSFTP de telle sorte qu'il utilise la gamme équivalente des ports. Pour ce faire, ajoutez les lignes suivantes au fichier /etc/ftpaccess :

pasv_min_port=10000
pasv_max_port=20000

Vous devez également contrôler l'adresse que le serveur affiche au client pour les connexions FTP passives. Dans un système LVS routé avec NAT, ajoutez la ligne suivante dans /etc/vsftpd.conf afin d'écraser l'adresse IP du serveur réel par la VIP, que le client voit lors de la connexion. Par exemple :

pasv_address=X.X.X.X

Remplacez X.X.X.X par la VIP du système LVS.

Pour la configuration d'autres serveurs FTP, reportez-vous à la documentation appropriée.

Cette gamme devrait être suffisamment vaste pour répondre à la plupart des situations ; vous pouvez toutefois augmenter ce nombre et inclure tous les ports non-sécurisés en remplaçant 10000:20000 par 1024:65535 dans les commandes ci-dessous.

iptables
/sbin/iptables -t mangle -A PREROUTING -p tcp \
               -d n.n.n.n/32  \
               --dport 21 -j MARK --set-mark 21
/sbin/iptables -t mangle -A PREROUTING -p tcp \
               -d n.n.n.n/32 \ 
               --dport 10000:20000 -j MARK --set-mark 21

Dans les commandes iptables ci-dessus, la série n.n.n.n devrait être remplacée par l'adresse IP flottante pour le serveur virtuel FTP défini dans la sous-section VIRTUAL SERVERS (Serveurs virtuels) de l'Outil de configuration de Piranha. Ces commandes assignent à tout trafic en direction de l'IP flottante sur des ports appropriés, une balise pare-feu équivalente à 21, qui est à son tour reconnue par IPVS et transmise de manière appropriée.

AvertissementAttention
 

Les commandes ci-dessus sont mises en oeuvre immédiatement, mais ne sont pas maintenues pendant la ré-initialisation du système. Pour garantir la restauration des paramètres des filtres des paquets réseau après une ré-initialisation, consultez la Section 11.5

Finalement, vous devrez vous assurer que le service approprié est bien réglé pour être activé aux niveaux d'exécution adéquats. Pour obtenir de plus amples informations sur le sujet, consultez la Section 10.1.