• [^] # Re: Serveur FTP derrière un NAT

    Posté par . En réponse au message Serveur FTP derrière un NAT. Évalué à 3.

    Salut,

    Il me semble qu'il ne sera pas inutile, encore une fois, de donnre quelques détails sur le fonctionnement du FTP.

    En mode actif, le client se connecte sur le port TCP 21 (ou n) du serveur. Toutes les commandes vont passer par cette connexion. Pour le transfert des données (put, get, ls, ...), le client indique au serveur le port et l'adresse IP à utiliser et le serveur établit une connexion TCP depuis le port TCP 20 (ou n-1) du serveur vers l'adresse IP et le port indiqués par le client. Pour que cela fonctionne correctement, il faut :
    - que le serveur soit accessible sur le port 21 ;
    - que le serveur puisse établir des connexions TCP ayant le port 20 comme origine ;
    - que les connexions en provenance du port 20 du serveur arrivent jusqu'au client.
    Donc, si le serveur est NATté, il faut que le routeur NATte le port 21 en entrée ainsi que le port 20 en sortie. Si le client est NATté, il faut que son routeur modifie les informations envoyées par le logiciel client (adresse IP et port à utiliser pour le canal de données) pour les remplacer par l'adresse IP publique et un port non utilisé. Il faudra également que ce routeur NATte les connexions entrantes en provenance du port 20 du serveur FTP vers le client concerné.

    En mode passif, le client se connecte sur le port 21 du serveur (comme en actif) pour établir le canal de commandes. Pour le transfert des DATA, le serveur fournit au client l'adresse IP et le port (différent à chaque fois et tout le temps différent de 20) à utiliser et le client se connecte sur cette adresse et ce port. Ce mode est plus simple à utiliser pour le client (c'est lui qui se conecte sur le serveur tout le temps : il n'y a plus de connexion du serveur sur le client), mais la seule ouverture dur port 21 en sortie ne suffira pas (et ouvrir le port 20 ne servira à rien). Côte serveur, s'il y a du NAT, il peut être suffisant de définir, dans la configuration du serveur, une plage de port à utiliser et de NATté toute cette plage vers le serveur FTP (comme l'a écrit lgmdmdlsr).

    Quoi qu'il en soit, la meilleure solution pour faire du FTP derrière un routeur qui fait du NAT est d'avoir un routeur qui supporte le protocole FTP. La plupart des routeurs actuels du marché devraient être capable de faire ça (sinon il faut en changer). En tout cas, netfilter/iptables s'en sort très bien grâce aux modules ip_conntrack_ftp et ip_nat_ftp (ouverture dynamique des ports nécessaires en fonction des échanges FTP sur le canal de commande et "masquerading" des adresses IP et des ports dans ces échanges). Je vous laisse un peu chercher dans l'abondante littérature sur le sujet pour voir comment paramétrer tout ça ;-)

    A+
    JJD