Choix d'implémentaiton de FTP derrière un FW



  • Suite à notre échange sur le non fonctionnement de FTP, voici une représentation graphique qui pourrait vous aider à prendre une décision.
    Les 4 diagrammes montrent respectivement

    • FTP actif sans firewall
    • FTP passif sans FW
    • FTP actif avec FW (SPI)
    • FTP passif avec FW (SPI)

    j'ai mis des ports au hasard coté client et serveur.

    • coté client, le port data (flèches vertes) est normalement "port commande +1"
    • coté serveur, en mode passif, le port data est un port random > 1023 mais certain serveurs FTP permettent de réduire le range de ce port. la taille du range ayant un impact direct sur le nombre de connexions simultanées possibles.

    En mode actif:
    la connexion est à l'initiative du client  ;) pour la partie commande (flèches rouges) mais c'est ensuite le serveur qui établi une session sur un port random du client  :o
    sur le schéma ça fonctionne mais si le client ne dispose pas d'une adresse IP publique, ça ne marche pas tout seul. C'est potentiellement compliqué en terme de NAT (car FTP requière 2 sessions différentes)

    En mode passif:
    le client établi les connexions, à la fois pour la partie commande et data.
    Il faut noter que le mode passif est le mode de repli (normalement) obligatoire si le mode actif ne fonctionne pas. C'est également le mode noté comme préféré par les clients FTP comme FileZilla.

    Dès lors qu'on introduit un FW de type SPI (State-full Packet Inspection), compte tenu du sens d'établissement des connexions, et comme indiqué dans la doc pfSense, coté serveur le mode actif est plus simple à gérer mais il ne fonctionne pas coté client (car bien sûr j'ai lis un FW coté client  ;D)
    Coté client le mode passif est plus simple mais il ne fonctionne pas coté serveur.

    Il n'y a donc pas de solution simple  ::)

    Compte tenu du fait que le mode passif est le mode de repli et qu'il est celui largement promu par les clients FTP, et que par ailleurs, en cas d'hébergement d'un serveur FTP, on ne contrôle souvent pas ce qui se passe coté client (et que le mode actif sera assez probablement bloqué coté client), il conviendrait de privilégier le mode passif, en terme de design car c'est très probablement celui qui va être exécuté.

    Comme expliqué succinctement dans le morceau de doc "pfSense", en mode passif, il faut quelques adaptations pour faire un forward vers le serveur et il faut trouver un équilibre entre un grand nombre de connexions et l'ouverture du FW pour cette IP.

    Avec un seul serveur FTP, c'est réalisable.
    Dès qu'il y a plusieurs serveur FTP hébergés, ça devient plus problématique, un peu à la manière des serveurs web mais avec un degré de compléxité supplémentaire lié à la nature du protocole FTP.

    Dans ce cas, il est préférable de se tourner vers des solutions de type reverse proxy.
    Il y a de nombreux serveur "reverse proxy FTP" sur le web.

    Un exemple ici qui est intéressant car il ne discute pas que de FTP  ;)

    I hope this helps  8)