Ftp et iptables

Bonjour,

J'ai un petit soucis avec IPtables et mon serveur FTP (sur la même machine Ubuntu 8.10)
En fait je souhaite que l'on puisse se connecter à mon serveur FTP or mes règles iptables font qu'on ne peut
récupérer la liste des fichiers.
voici mes règles concernant le FTP:

#!/bin/bash

#eth0

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

iptables -A INPUT -p tcp --dport ssh -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dport 20,21 -j ACCEPT

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp -m multiport --dport 20,21 -j ACCEPT

Si quelqu'un a une idée :) parce que la je sèche complétement. MERCI !

13 réponses

Résumé de la discussion

Les règles IPtables bloquent la liste des fichiers sur un serveur FTP tournant sous Ubuntu 8.10, ce qui empêche l'affichage du répertoire. Des recommandations suggèrent d'autoriser les connexions FTP en mode actif et passif selon le serveur et d'ouvrir les ports de données (ftp-data) via des règles dédiées. Un exemple de configuration IPtables montre l'utilisation des ports ftp et ftp-data et l'activation des états ESTABLISHED/RELATED sur INPUT et OUTPUT pour autoriser le trafic. En cas de difficultés, vérifier la configuration du serveur FTP (mode passif vs actif) et la redirection NAT peut apporter une piste complémentaire.

Bobot (l’IA à votre service)
  1. Contributeur
    Bonjour,

    Ca se passe dans ton fichier de configuration de ton serveur FTP.

    a+
    1. bonsoir,

      pas plus de détails ? :/ je vais quand même fouiller merci!
      1. Contributeur
        Commence déjà par donner les détails de ton fichier de config ftp, c'est pas à nous de donner des réponses détaillées à des questions qui ne le sont pas...
        1. Modérateur
          Salut,

          iptables -P INPUT DROP
          iptables -P FORWARD DROP
          iptables -P OUTPUT DROP


          Tu sais à quoi corresponds cette politique pour les chaînes iptables?
          Ca correspond au debranchement des cables ou de ton réseau.
          Donc malgré les régles iptables, tout est interdit par la politque des chaînes.

          Tu dois mettre
          iptables -P INPUT ACCEPT
          iptables -P FORWARD ACCEPT
          iptables -P OUTPUT ACCEPT
          1. Bonjour,

            Désolé de contredire, mais -P, c'est la politique *PAR DEFAUT*.
            Il n'y a rien d'incohérent la-dedans si c'est un firewall dit "trust no one" : on DROP tout SAUF ce qui correspond a certaines règles.

            "Donc malgré les régles iptables, tout est interdit par la politque des chaînes"
            ==> Non, si ca correspond à une règle ACCEPT ca va passer, sinon, si ca ne correspond à aucune règle ACCEPT, ca va dropper.

            Si tu met toutes les politiques par défaut à ACCEPT, sans aucune règle DROP ; Alors tout passe, et ce n'est plus un firewall.

            Bref, tout ca se retrouve en détail dans n'importe quel tuto iptables...

            Bisous.
            M.
          2. Modérateur
            @slutholeRe,

            Désolé de contredire, mais -P, c'est la politique *PAR DEFAUT*.
            Il n'y a rien d'incohérent la-dedans si c'est un firewall dit "trust no one" : on DROP tout SAUF ce qui correspond a certaines règles.


            Ben, comme tu veux, mais mettre la politique DROP à toutes les chaînes interdit l'accès = débranchement des cables.
          3. @lami20jEncore désolé mais non,
            Si il y a des règles ACCEPT, même avec politique DROP sur toutes les chaines, certains flux vont passer et donc ça ne correspond pas à un débranchement des cables.
          4. Modérateur
            @slutholeRe,

            Ben, si tu le dis.
            Mais en ce cas je ne suis pas le seul qui se trompe ;-)
            Voici mon 1er cours que j'ai lu sur iptables

            Le paragraphe en question (le lien http://olivieraj.free.fr/fr/linux/information/firewall/fw-03-06.html )
            Définition de la politique (cibles) par défaut : La table filter possède 3 chaînes, donc elles sont toutes les trois à initialiser. Par défaut, on décide donc de tout détruire (DROP) : 
            [root@phoenix /]# iptables -t filter -P INPUT DROP
            [root@phoenix /]# iptables -t filter -P OUTPUT DROP
            [root@phoenix /]# iptables -t filter -P FORWARD DROP
            
            A ce stade là, vous avez court-circuité tout votre système de réseau. Toutes vos connexions réseaux sont hors service. Pas un logiciel que vous utilisez ne peut accéder au réseau, ou à vous propres serveur. J'en veux pour preuve, la commande "ping localhost" ne marche même plus, et pourtant il lui en faut pour ne plus marcher ! 
            [olivier@phoenix /]$ ping localhost
            PING localhost.sky.net (127.0.0.1) 56(84) bytes of data.
            ping: sendmsg: Operation not permitted
            ping: sendmsg: Operation not permitted
            ping: sendmsg: Operation not permitted
            
            --- localhost.sky.net ping statistics ---
            3 packets transmitted, 0 received, 100% packet loss, time 2011ms
            
            


            Ben, en ce cas je dois reprendre mes cours.
          5. @slutholeSalut,

            Je suis tout à fait d'accord avec toi sluthole, un pare-feu doit tout refuser et ensuite on lui donne nos règles
            sinon ce n'et plus un firewall...

            Voici mon fichier de config vsftpd.conf mais je ne comprend pas pourquoi tout se passerais la dedans étant donné que c'est un problème de filtrage:

            #daemon en standalone
            listen=YES
            #Permet d'accepter les connexions anonymes
            anonymous_enable=NO
            #Oblige les personnes à s'identifier avec un compte utilisateur
            local_enable=YES

            # Affiche les fichiers caches
            force_dot_files=YES

            # Permission d'écriture
            write_enable=NO
            anon_upload_enable=NO
            anon_mkdir_write_enable=NO
            anon_other_write_enable=NO

            #Ecriture d'un log de fichier (je vous laisse le soin de regler ce parametre)
            #xferlog_file=/etc/vsftpd/log...

            #Banniere d'affichage a la connexion ftp
            #ftpd_banner=/etc/vsftpd/ma_banniere

            # active les utilisateurs virtuels
            guest_enable=YES
            guest_username=www-data

            # droits des fichiers uploades
            anon_umask=022

            # Permet de chrooter la connexion de l'utilisateur
            chroot_local_user=YES

            # nombre maximum de sessions à 200
            # nombre maximum de sessions par IP à 8
            max_clients=200
            max_per_ip=8

            ####################################
            # Debian customization #
            ####################################
            # Some of vsftpd's settings don't fit the Debian filesystem layout by
            # default. These settings are more Debian-friendly.
            #
            # This option should be the name of a directory which is empty. Also, the
            # directory should not be writable by the ftp user. This directory is used
            # as a secure chroot() jail at times vsftpd does not require filesystem
            # access.
            secure_chroot_dir=/var/run/vsftpd
            #
            # This string is the name of the PAM service vsftpd will use.
            pam_service_name=vsftpd
            #
            # This option specifies the location of the RSA certificate to use for SSL
            # encrypted connections.
            rsa_cert_file=/etc/ssl/certs/vsftpd.pem

            # utiliser les configurations individuelles pour chaque utilisateur
            user_config_dir=/etc/vsftpd/vsftpd_user_conf

            En attendant je vais essayer en supprimant la règle
            IPTABLES -A OUTPUT -p tcp -m multiport --dport 20,21 -j ACCEPT

            Je rappelle juste ce que je veux faire: que les machines de mon LAN et celles de l'extérieure accédent à mon serveur FTP.
        2. Modérateur
          Re,

          iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
          Cette régle n'est bonne non plus.
          Il faut mettre
          iptables -A OUTPUT -m state --state ! INVALID -j ACCEPT


          1. Modérateur
            Re,

            iptables -A OUTPUT -p tcp -m multiport --dport 20,21 -j ACCEPT
            Tu n'as pas besoin de cette régle.
            Le client se connecte sur ton serveur donc les ports 21 et 20 doivent être ouverts.
            Pour la sortie de toute façon tu peux laisser tout sortir.
            Si dans ton LAN tu as des pc qui ne doivent pas sortir sur net tu n'as qu'à rajouter des régles pour les cas particulières.
            1. si je supprime
              iptables -A OUTPUT -p tcp --dport 20 -j ACCEPT
              iptables -A OUTPUT -p tcp --dport 21 -j ACCEPT
              mon serveur ne pourra plus se connecter aux serveurs ftp genre les màj ubuntu ou encore le ftp de la freebox.
              1. Modérateur
                Re,

                Essaie tout simplement (au lieu de eth0 mets ton interface réseau) ce script basique

                iptables -P INPUT DROP 
                iptables -P FORWARD DROP 
                iptables -P OUTPUT DROP 
                
                iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
                iptables -A INPUT -i eth0 -p tcp --dport 20:21 -j ACCEPT
                iptables -A OUTPUT -o eth0 -m state --state ! INVALID -j ACCEPT

                1. salut

                  SA FONCTIONNE !!!!!!
                  j'ai ajouté ce que tu m'as filé juste au dessus et c'est OK !

                  et effectivement les lignes que j'ai ajouté en sortie sur les ports 20 et 21 ne servent à rien.
                  va falloir maintenant que je comprenne comment cela fonctionne avec ces histoires de ESTABLISHED, RELATED...

                  en tout cas merci les gars!!

                  bonne journée @+++
                2. Modérateur
                  @karonSalut,

                  ESTABLISHED, RELATED

                  Seulement les paquets provenants des nouvelles connexion initialisées par une connexion déjà existante et établie, auront la permission d'entrer.
                3. je me suis un peu emballé trop vite :( sa marche pas.

                  je vais me débrouiller et fouiller un peu plus sur le net.
                  en tout cas merci pour vos propositions!!
                4. Modérateur
                  @karonRe,

                  Ben, côté firewall c'est correct donc ce n'est lui qui pose de problèmes
                  Il faut voir une autre piste.

                  Tu n'as pas dit si tu as bien configurer ton firebox pour la rédirection de ports.
                5. @lami20jpour firefox c'est ok, en fait il utilise le mode passif,
                  j'ai du ajouter NEW à la règle:

                  iptables -A INPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

                  tout est good maintenant, mais il va vraiment falloir que j'en apprene plus sur IPTABLEs parce que là
                  j'avoue ne pas tout comprendre. en tout cas merci encore :)
              2. Modérateur
                Re,

                Et puisque tu parles de freebox, as-tu configuré la freebox pour qu'elle sache quel pc fait l'office de serveur ftp?!
                1. lami20j je vais essayer ta dernire proposition

                  foobar47 en fait la connexion se fait bien, mais c'est au moment du "LIST des répertoires"
                  il mouline et puis me renvoie un message qu'il faudra que je renote et que je posterais.
                  1. Bonsoir,

                    foobar47 en fait la connexion se fait bien, mais c'est au moment du "LIST des répertoires"
                    il mouline et puis me renvoie un message qu'il faudra que je renote et que je posterais.


                    Typique d'un ftp vers un serveur Windows. En général ils ne connaissent pas le mode passif.
                    Cela veut dire que c'est le serveur qui initialise les transferts... et le pare-feu doit accepter les connexions entrantes.

                    Essayez en mode passif, mais en général avec Windows ça ne marche pas.

                    Manu
                    1. Contributeur
                      mon serveur FTP (sur la même machine Ubuntu 8.10) 

                      Le serveur FTP n'est pas sous Windows.

                      Essaye de changer le mode sur ton client FTP.
                  2. finalement c'est ok, j'ai mi en place les régle de lamij20 et en mode actif tout marche!!

                    merciiiii !!