Tux aux hermines
Accueil du site > Les Documentations > FTP derrière un firewall

Triturer son LAN...

FTP derrière un firewall

Comment se faire facilement un serveur FTP derrière un firewall

samedi 16 novembre 2002, par Emmanuel « manproc » Prochasson

Après deux jours de dur labeurs, des recherches dans tous les sens et un soutien moral de Linux-Nantes, finalement ca marche. Je me dit que si je peux épargner 20h de recherche a quelqu’un...

Note : l’article ici décrit la configuration d’un firewall avec ipchains (noyaux 2.2.x) avec un noyau 2.4.x on utilise iptable, mais comme je n’y connais rien, on ne traitera que d’ipchains :)

Mise à jour (Avril 2004) : j’ai du apprendre aussi iptable, donc le sujet est aussi traité dans ce document.

Voila, vous avez décidé de vous faire un petit serveur ftp privé pour, par exemple, partager vos photos de vacances avec vos amis et votre famille.

Mais voila, vous avez beau faire tourner le serveur sur une machine de votre réseau, de l’exterieur, les gens n’ont pas le droit d’y acceder...

Reprenons depuis le début, d’abord, il vous faut un serveur ftp. Il parait que proftpd est pas mal, c’est celui que j’ai mis et ca à l’air de tourner.

Installation de Proftpd

Il est disponible je pense en standard dans toutes les bonnes distributions qui se respecte, dans mon cas un :

apt-get install proftpd

a fait l’affaire.

Pour ( démarrer | arreter | redemarrer ) le service, il vous suffit de faire /etc/init.d/proftpd ( start | stop | restart ). Vous pouvez tester que le serveur fonctionne en faisant, en ligne de commande :

ftp localhost

On vous demande alors un login, rentrez le votre, puis votre mot de passe, vous devriez alors avoir la possibilité de vous ballader dans vos fichiers personnels.

Configuration du Firewall

Bon, c’est maintenant qu’il faut mettre les mains dans le cambouis.

D’abord un peu de théorie. Le protocole FTP est un peu particulier dans le sens qu’il necessite au moins 2 port d’ouvert :
- Le port 21, dit port de commande
- Le port 20, dit port de donnée

Il peut fonctionner de deux facons différentes
- En mode actif, le client ouvre des ports sur sa machine au fur et a mesure de ses besoins.
- En mode passif, le serveur ouvre ses ports en fonction de ses propres besoin.

On va traiter le cas du mode passif parce que c’est 1) beaucoup plus compliqué 2) donc beaucoup plus marrant 3) plus interessant 4) et que de toute facon, pour le mode actif il suffira de s’arreter a un moment de la configuration :)

-  ouverture des ports

pour commencer, on va devoir ouvrir les ports 20 et 21 au niveau du firewall.

Avec ipchains ca donne :

ipchains -A forward -p TCP -s 0.0.0.0/0 -d ip_serveur_local 20 21 -j ACCEPT

En principe, par défaut les port >1024 sont ouvert, mais sait-on jamais :

ipchains -A forward -p TCP -s 0.0.0.0/0 -d ip_serveur_local 60000:60500 -j ACCEPT

Avec iptables, c’est un peu plus subtil, on commence par les ports 20 et 21 :

iptables -A BAD-LAN -p tcp —dport ftp -j ACCEPT

iptables -A BAD-LAN -p tcp —dport ftp-data -j ACCEPT

Ici, BAD-LAN définis un chemin de l’extérieur vers le réseau local (définis par exemple par
iptables -A INPUT -i eth1 -j BAD-LAN
(avec ici eth1 l’interface relié à internet).

Mais iptables permet de "suivre" les connections, et plutôt que de laisser tout les ports entre 60000 et 60500 ouvert, on précise qu’il s’ouvre uniquement pour une connection déjà établis (sur le port 20 et 21, mais c’est automatique) :

iptables -A BAD-LAN -p tcp —dport 60000:65500 -m state —state NEW,RELATED,ESTABLISHED -j ACCEPT

-  redirection de ports

Maintenant, vous vous demandez peut-etre comment quelqu’un de l’exterieur qui veut se connecter a votre serveur va pouvoir acceder a la machine en question dans votre réseau local. En effet, de l’exterieur (sur internet), vous n’avez qu’une adresse IP, mais votre réseau comporte plusieurs machine. On va donc faire de la redirection de ports

Quand la passerelle recevra une requete sur le port 21 (ou 20), elle devra la rediriger vers la machine qui heberge le serveur. Pour ca on utilise ipmasqadm.

# redirige les port 20 et 21 sur le serveur
ipmasqadm autofw -A -r tcp 20 21 -h 192.168.0.200
# Remplacez 192.168.0.200 par l’adresse de votre serveur

# Et on fait de meme pour les ports entre 60000 et 60500 # Choix arbitraire de ports pour le mode Passif # redirige les ports entre 60000 et 60500 sur le serveur ipmasqadm autofw -A -r tcp 60000 60500 -h 192.168.0.200

Avec iptables :

iptables -t nat -A PREROUTING -i eth1 -p tcp —dport ftp -j DNAT —to-destination ip_serveur_local

iptables -t nat -A PREROUTING -i eth1 -p tcp —dport ftp-data -j DNAT —to-destination ip_serveur_local

iptables -t nat -A PREROUTING -i eth1 -p tcp —dport 60000:65500 -j DNAT —to-destination ip_serveur_local

Voila, ca devrait etre tout au niveau du firewall.

Configuration de proftpd

Il y a une foultitude d’options pour proftpd, et plein de documentation sur le site :). Dans notre cas, pour que ca passe il suffira de rajouter quelques lignes :

# Pour indiquer la plage de ports qu’on lui a reservé
PassivePorts                   60000 60500
# Pour le masquerading
MasqueradeAddress               VOTRE_IP_SUR_INTERNET

comme ca, ca devrait marcher. si vous n’avez pas une ip fixe, ce n’est pas très pratique d’éditer a la main le fichier de configuration a chaque changement d’ip. Vous pouvez alors vous inscrire sur www.dyndns.org pour associez un nom de domaine (au hasard manproc.dyndns.org) a votre ip.

Ainsi dans le fichier de configuration de proftpd, vous pourrez mettre :

# Pour le masquerading
MasqueradeAddress               votre_dns.dyndns.org

Voila, bon courage :)

14 Messages de forum

  • > FTP derrière un firewall 16 novembre 2002 16:25, par BeTa

    Avec netfilter (iptables) c un truc dans le même goût (je n’ai pas lu tout l’article)... seulement on appelle cela du DNAT...

    ca donne un truc du genre
    iptables -t nat -A PREROUTING -p tcp|udp|icmp|... \
    —dport your dest port -d your original ip \
    —jump DNAT —to-destination your destination ip ;

    Sinon je conseille vivement shorewall qui est un outil permettant de faire abstration de netfilter et qui propose toutes les manipulations de DNAT/SNAT et autres firewalls de manière plus "human-readable".
    Vous pouvez trouver un ebuild à cette URL :
    [ http://pascal.terjan.free.fr/files/... ]

    Voilà... amusez vous bien ;c)

    BeTa

    Voir en ligne : Netfilter (iptables)

  • > FTP derrière un firewall 10 décembre 2002 17:50, par greg

    J’utilise Mandrake 7.2, je n’arrive pas a installer le package ipmasqadm. Cela est-il compatible ?

  • Pb de connection 16 décembre 2002 16:05, par lorymayers

    J’ai utilise cette methode (au passage, merci c super bien explique), mais g un pb :
    J’utilise un serveur ftp sous windows a l’interieur de mon lan.
    Lorsque j’essaie de me connecter au ftp, sur le serveur il m’indique "Connecte a @IP, collecte du nom d’Utilisateur". Y a t il autre chose a rediriger ou a router pour le nom d’utilisateur ? Vu que la connexion ip marche...

    Merci si vous avez une idee...

    • > Pb de connection 19 février 2003 20:24

      tir 3asba inti ou jawwik
      zeb 3lé kraymek
      bye

      Voir en ligne : zatla

      • baz 28 avril 2003 13:02, par asboun

        youh ya zebi:P

        Voir en ligne : lol

  • > FTP derrière un firewall 5 janvier 2003 14:34, par The BLION Corp.

    J’ai actuellement un problème.
    J’ai une IP dynamique.
    J’ai donc mis mon nom dyndns dans le champ masqueradeaddress...

    Sauf qu’au changement d’IP, il garde l’IP avec laquelle il s’est lancé.
    Donc, ça ne marche malheureusement pas tout seul, il faut le couper ou le patcher (ce que je tente actuellement de faire)

    • > > FTP derrière un firewall 7 mars 2003 23:58, par x3|is

      perso je lance proftpd à partir de inetd... donc du coup losrqu’un client se connecte, proftpd se lance et j’imagine qu’il resoud systématiquement l’adresse IP ! note : ça fait deja plusieurs jours que mon serveur ftp tourne grâce à la méthode donné ds l’article et ls principaux intéressés me disent que c’est ok :) Ah oui... un inconvénient de inetd (que t’as du comprendre) : il y a autant de proftpd qui se lancent que de clients... donc il peux y avoir gros pb si ton serveur est publique ;-)

      • > > > FTP derrière un firewall 8 mars 2003 14:06, par manproc

        J’ai fait ca aussi. Notament parce que proftpd déconne et refuse les connections au bout de quelques jours d’uptime. Je sais pas trop d’ou ca vient, donc j’ai utilisé xinetd (voir une bonne doc sur lea-linux.org) qui résout la problème.

  • J’en peux plus ... 5 mars 2004 17:05

    Ca fait deux jours que je bataille, c’est chaud ! Je vous explique, j’ai un reseau local en 192.168.100.X, et un linux debian noyau 2.2.21 comme firewall avec squid et samba. Je veux faire de la redirection de ports avec ipmasqadm autofw, comme dans l’article, mais ca marche pas, aucun message d’erreur dans le syslog et pourtant, j’accede pas au pc derriere le firewall, quelque soit le port testé ... Y aurais-t-il une commande pour vois si la redirection est active ???

    Merci
    Greg

  • La redirection ne marche pas ! Je suis dépité 1er mai 2004 19:24, par Freeman

    L exposé est pas mal du tout(je l’ai trouvé trop tard) ... mais

    J’expose le pb :

    La config de mon reseau est la suivante :

    — >FW=Linux Je sais pas trop quel version (Mandrake ...) Relié à internet ppp0
    — >Interface eth0 = relie à 192.168.0.25
    — >Interface eth1 = relie à 192.168.1.36

    J’ai installé un serveur ftp sur 192.168.0.25 sur le port 6666 mode PASV
    J’arrive à m’y connecter à partir de 192.168.1.36 en passant comme IP 192.168.0.25
    Je n’arrive pas à me connecter à partir de 192.168.1.36 en passant comme IP une des IPs du FireWall.
    Evidemment puisqu’il faut faire du prerouting ---> donc

    Pour faire le prerouting de n’importe qui sur mon serveur ftp 192.168.0.25, je fais les lignes suivantes :

    $IPTABLES -A FORWARD -p tcp —dport 6666 -j ACCEPT
    $IPTABLES -A FORWARD -p tcp —dport 60100:60200 -j ACCEPT

    $IPTABLES -A PREROUTING -t nat -p tcp —dport 6666 -j DNAT —to-destination 192.168.0.25
    $IPTABLES -A PREROUTING -t nat -p tcp —dport 60100:60200 -j DNAT —to-destination 192.168.0.25

    mais ça ne marche pas : meme pas possible de se connecter au serveur ftp

    Si quelqu’un pouvait me donner un élément de réponse, je serais heureux

    Xavier

    • Charge les modules ftp suivants avant le script du firewall
      modprobe ip_nat_ftp
      modprobe ip_conntrack_ftp

      pour iptables voila ce ki cloche : tes interfaces au Hook FoRWARD elles sont ou ????

      tu dois indiquer :
      iptables -A FORWARD -i eth1 -o eth0

      Pour le prerouting ton interface n’est pas spécifiée :
      iptables -t nat -A PREROUTING -i eth1 -p tcp —dport 6666 -j DNAT —to-destination 192.168.0.25:6666

      Une question : as tu fais du masquerade ???

      trax(-at-)fr.st

  • > FTP avec un firewall 26 novembre 2004 18:39, par LaMola Denis

    J’ai installé mnf mandrake (firewall) et maintenant j’aimerai installe proftp, mais chaque fois que je rentre un packge il me manque toujours quelques chose. Peux tu m’aider ??
    Ou puis je trouver proftp entier ???

    Merci

  • > FTP derrière un firewall 27 décembre 2005 21:59, par syl

    voici un petit lien qui permet de tester son ftp comme ci cela venait de l’extérieur http://www.g6ftpserver.com/fr/ftptest

    merci pour les renseignements je vais pouvoir tester sur ma machine linux

SPIP | squelette | | Plan du site | Suivre la vie du site RSS 2.0