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. finalement c'est ok, j'ai mi en place les régle de lamij20 et en mode actif tout marche!!

    merciiiii !!
    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. 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. Contributeur
        Au fiat, c'est quoi le message d'erreur que tu reçois ?
        1. 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. 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. 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,

              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. 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
                  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. 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. Contributeur
                    Bonjour,

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

                    a+