Partage
  • Partager sur Facebook
  • Partager sur Twitter

Connexion FTP impossible avec iptables

Sujet résolu
    22 avril 2015 à 17:58:50

    Bonjour,

    Je possède un raspberry pi (sous debian) sur lequel j'ai installé proftpd dont voici le fichier proftpd.conf

    # Includes DSO modules
    Include /etc/proftpd/modules.conf
    
    # Set off to disable IPv6 support which is annoying on IPv4 only boxes.
    UseIPv6                         on
    # If set on you can experience a longer connection delay in many cases.
    IdentLookups                    off
    
    ServerName                      "Debian"
    ServerType                      standalone
    DeferWelcome                    off
    
    MultilineRFC2228                on
    DefaultServer                   on
    ShowSymlinks                    on
    
    TimeoutNoTransfer               600
    TimeoutStalled                  600
    TimeoutIdle                     1200
    
    DisplayLogin                    welcome.msg
    DisplayChdir                    .message true
    ListOptions                     "-l"
    
    DenyFilter                      \*.*/
    
    # Use this to jail all users in their homes
    DefaultRoot                     ~
    
    # Users require a valid shell listed in /etc/shells to login.
    # Use this directive to release that constrain.
    # RequireValidShell             off
    
    # Port 21 is the standard FTP port.
    Port                            21
    
    # In some cases you have to specify passive ports range to by-pass
    # firewall limitations. Ephemeral ports can be used for that, but
    # feel free to use a more narrow range.
    # PassivePorts                  55000 55100
    # MasqueradeAddress             1.2.3.4
    
    # This is useful for masquerading address with dynamic IPs:
    # refresh any configured MasqueradeAddress directives every 8 hours
    <IfModule mod_dynmasq.c>
    # DynMasqRefresh 28800
    </IfModule>
    
    # To prevent DoS attacks, set the maximum number of child processes
    # to 30.  If you need to allow more than 30 concurrent connections
    # at once, simply increase this value.  Note that this ONLY works
    # in standalone mode, in inetd mode you should use an inetd server
    # that allows you to limit maximum number of processes per service
    # (such as xinetd)
    MaxInstances                    30
    
    # Set the user and group that the server normally runs at.
    User                            proftpd
    Group                           nogroup
    
    # Umask 022 is a good standard umask to prevent new files and dirs
    # (second parm) from being group and world writable.
    Umask                           022  022
    # Normally, we want files to be overwriteable.
    AllowOverwrite                  on
    
    # Uncomment this if you are using NIS or LDAP via NSS to retrieve passwords:
    # PersistentPasswd              off
    
    # This is required to use both PAM-based authentication and local passwords
    # AuthOrder                     mod_auth_pam.c* mod_auth_unix.c
    
    # Be warned: use of this directive impacts CPU average load!
    # Uncomment this if you like to see progress and transfer rate with ftpwho
    # in downloads. That is not needed for uploads rates.
    #
    # UseSendFile                   off
    
    TransferLog /var/log/proftpd/xferlog
    SystemLog   /var/log/proftpd/proftpd.log
    
    # Logging onto /var/log/lastlog is enabled but set to off by default
    #UseLastlog on
    
    # In order to keep log file dates consistent after chroot, use timezone info
    #SetEnv TZ :/etc/localtime
    
    <IfModule mod_quotatab.c>
    QuotaEngine off
    </IfModule>
    
    <IfModule mod_ratio.c>
    Ratios off
    </IfModule>
    
    
    # Delay engine reduces impact of the so-called Timing Attack described in
    # http://www.securityfocus.com/bid/11430/discuss
    # It is on by default.
    <IfModule mod_delay.c>
    DelayEngine on
    </IfModule>
    
    <IfModule mod_ctrls.c>
    ControlsEngine        off
    ControlsMaxClients    2
    ControlsLog           /var/log/proftpd/controls.log
    ControlsInterval      5
    ControlsSocket        /var/run/proftpd/proftpd.sock
    </IfModule>
    
    <IfModule mod_ctrls_admin.c>
    AdminControlsEngine off
    </IfModule>
    
    #
    # Alternative authentication frameworks
    #
    #Include /etc/proftpd/ldap.conf
    #Include /etc/proftpd/sql.conf
    
    #
    # This is used for FTPS connections
    #
    #Include /etc/proftpd/tls.conf
    
    #
    # Useful to keep VirtualHost/VirtualRoot directives separated
    #
    #Include /etc/proftpd/virtuals.conf
    # <Anonymous ~ftp>
    #   User                                ftp
    #   Group                               nogroup
    #   # We want clients to be able to login with "anonymous" as well as "ftp"
    #   UserAlias                   anonymous ftp
    #   # Cosmetic changes, all files belongs to ftp user
    #   DirFakeUser on ftp
    #   DirFakeGroup on ftp
    #
    #   RequireValidShell           off
    #
    #   # Limit the maximum number of anonymous logins
    #   MaxClients                  10
    #
    #   # We want 'welcome.msg' displayed at login, and '.message' displayed
    #   # in each newly chdired directory.
    #   DisplayLogin                        welcome.msg
    #   DisplayChdir                .message
    #
    #   # Limit WRITE everywhere in the anonymous chroot
    #   <Directory *>
    #     <Limit WRITE>
    #       DenyAll
    #     </Limit>
    #   </Directory>
    #
    #   # Uncomment this if you're brave.
    #   # <Directory incoming>
    #   #   # Umask 022 is a good standard umask to prevent new files and dirs
    #   #   # (second parm) from being group and world writable.
    #   #   Umask                           022  022
    #   #            <Limit READ WRITE>
    #   #            DenyAll
    #   #            </Limit>
    #   #            <Limit STOR>
    #   #            AllowAll
    #   #            </Limit>
    #   # </Directory>
    #
    # </Anonymous>
    
    # Include other custom configuration files
    Include /etc/proftpd/conf.d/
    

    Sans avoir configuré iptables, le FTP est parfaitement accessible depuis un navigateur web ou filezilla mais dès que je lance mon script iptables, le FTP devient innaccessible (le navigateur mouline et filezilla indique :

    Statut :	Connecté
    Statut :	Récupération du contenu du dossier...
    Commande :	PWD
    Réponse :	257 "/" est le répertoire courant
    Commande :	TYPE I
    Réponse :	200 Type paramétré à I
    Commande :	PASV
    Réponse :	227 Entering Passive Mode (192,168,1,19,157,219).
    Commande :	MLSD

    Voici le script iptables :

    #!/bin/sh
    
    # Réinitialise les règles
    sudo iptables -t filter -F
    sudo iptables -t filter -X
    
    # Bloque tout le trafic
    sudo iptables -t filter -P INPUT DROP
    sudo iptables -t filter -P FORWARD DROP
    sudo iptables -t filter -P OUTPUT DROP
    
    # Autorise les connexions déjà établies et localhost
    sudo iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    sudo iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    sudo iptables -t filter -A INPUT -i lo -j ACCEPT
    sudo iptables -t filter -A OUTPUT -o lo -j ACCEPT
    
    # ICMP (Ping)
    sudo iptables -t filter -A INPUT -p icmp -j ACCEPT
    sudo iptables -t filter -A OUTPUT -p icmp -j ACCEPT
    
    # SSH
    sudo iptables -t filter -A INPUT -p tcp --dport 222 -j ACCEPT
    sudo iptables -t filter -A OUTPUT -p tcp --dport 222 -j ACCEPT
    sudo iptables -A OUTPUT -p tcp --dport 222 -j ACCEPT
    sudo iptables -A INPUT -p tcp --dport 222 -j ACCEPT
    # DNS
    sudo iptables -t filter -A OUTPUT -p tcp --dport 53 -j ACCEPT
    sudo iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT
    sudo iptables -t filter -A INPUT -p tcp --dport 53 -j ACCEPT
    sudo iptables -t filter -A INPUT -p udp --dport 53 -j ACCEPT
    
    # HTTP
    sudo iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
    sudo iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
    
    # FTP
    sudo iptables -t filter -A OUTPUT -p tcp --dport 20:21 -j ACCEPT
    sudo iptables -t filter -A INPUT -p tcp --dport 20:21 -j ACCEPT
    
    
    # Mail SMTP
    iptables -t filter -A INPUT -p tcp --dport 25 -j ACCEPT
    iptables -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT
    
    # Mail POP3
    iptables -t filter -A INPUT -p tcp --dport 110 -j ACCEPT
    iptables -t filter -A OUTPUT -p tcp --dport 110 -j ACCEPT
    
    # Mail IMAP
    iptables -t filter -A INPUT -p tcp --dport 143 -j ACCEPT
    iptables -t filter -A OUTPUT -p tcp --dport 143 -j ACCEPT
    
    # NTP (horloge du serveur)
    sudo iptables -t filter -A OUTPUT -p udp --dport 123 -j ACCEPT
    
    # Webiopi
    sudo iptables -A INPUT -p tcp --dport 8000 -j ACCEPT
    sudo iptables -A OUTPUT -p tcp --dport 8000 -j ACCEPT
    
    # Webmin
    sudo iptables -A INPUT -p tcp --dport 10000 -j ACCEPT
    sudo iptables -A OUTPUT -p tcp --dport 10000 -j ACCEPT
    
    # Mail
    sudo iptables -A OUTPUT -p tcp --dport 587 -j ACCEPT
    
    #Proftpd passif
    sudo iptables -A INPUT -p tcp -m tcp --dport 50000:50100 --syn -j ACCEPT
    sudo iptables -A OUTPUT -p tcp -m tcp --dport 50000:50100 --syn -j ACCEPT
    

    Merci d'avance ! :)




    • Partager sur Facebook
    • Partager sur Twitter
      23 avril 2015 à 9:28:33

      Salut,


      Si les ports passifs en commentaires sont les ports par défaut, tu as loupé un 5 dans tes règles iptables

      # PassivePorts                  55000 55100


      Ed

      • Partager sur Facebook
      • Partager sur Twitter
      Je travaille pour Sentinel Tower - Tout Monitorer !
        23 avril 2015 à 10:30:08

        Alors il y a des réglages à faire !

        Certaines règles ne sont pas en sudo, est-ce normal ?

        Tu as des règles en double, comme pour le SSH, est-ce normal ?

        Tu autorises toujours les flux dans les deux sens, cela me semble peu sécurisé ?

        Tu utilises les états pour les connexions établies, mais pas pour l'établissement ?

        Sinon tes règles FTP ont l'air correctes. Quand je faisais du filtrage il y a dix ans (pour ne pas dire 15...) il fallait activer le suivi des connexions FTP par le noyau avec un truc comme ftp_conntrack ou ip_conntrack_ftp. Mais je ne sais pas si c'est toujours d'actualité. A l'époque, si iptables n'avait pas cela il ne savait pas mettre les connexions FTP annexes en RELATED.

        • Partager sur Facebook
        • Partager sur Twitter
          25 avril 2015 à 14:45:45

          Bonjour,

          Tout d'abord merci de vos réponses rapides. J'ai rectifié mon fichier iptables que voici :

          #!/bin/sh
          
          # Réinitialise les règles
          sudo iptables -t filter -F
          sudo iptables -t filter -X
          
          # Bloque tout le trafic
          sudo iptables -t filter -P INPUT DROP
          sudo iptables -t filter -P FORWARD DROP
          sudo iptables -t filter -P OUTPUT DROP
          
          # Autorise les connexions déjà établies et localhost
          sudo iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
          sudo iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
          sudo iptables -t filter -A INPUT -i lo -j ACCEPT
          sudo iptables -t filter -A OUTPUT -o lo -j ACCEPT
          
          # ICMP (Ping)
          sudo iptables -t filter -A INPUT -p icmp -j ACCEPT
          sudo iptables -t filter -A OUTPUT -p icmp -j ACCEPT
          
          # SSH
          sudo iptables -A OUTPUT -p tcp --dport 222 -j ACCEPT
          sudo iptables -A INPUT -p tcp --dport 222 -j ACCEPT
          # DNS
          sudo iptables -t filter -A OUTPUT -p tcp --dport 53 -j ACCEPT
          sudo iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT
          sudo iptables -t filter -A INPUT -p tcp --dport 53 -j ACCEPT
          sudo iptables -t filter -A INPUT -p udp --dport 53 -j ACCEPT
          
          # HTTP
          sudo iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
          sudo iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
          
          # FTP
          sudo iptables -t filter -A OUTPUT -p tcp --dport 20:21 -j ACCEPT
          sudo iptables -t filter -A INPUT -p tcp --dport 20:21 -j ACCEPT
          
          
          # Mail SMTP
          sudo iptables -t filter -A INPUT -p tcp --dport 25 -j ACCEPT
          sudo iptables -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT
          
          # Mail POP3
          sudo iptables -t filter -A INPUT -p tcp --dport 110 -j ACCEPT
          sudo iptables -t filter -A OUTPUT -p tcp --dport 110 -j ACCEPT
          # Mail IMAP
          iptables -t filter -A INPUT -p tcp --dport 143 -j ACCEPT
          iptables -t filter -A OUTPUT -p tcp --dport 143 -j ACCEPT
          
          # NTP (horloge du serveur)
          sudo iptables -t filter -A OUTPUT -p udp --dport 123 -j ACCEPT
          
          # Webiopi
          sudo iptables -A INPUT -p tcp --dport 8000 -j ACCEPT
          sudo iptables -A OUTPUT -p tcp --dport 8000 -j ACCEPT
          
          # Webmin
          sudo iptables -A INPUT -p tcp --dport 10000 -j ACCEPT
          sudo iptables -A OUTPUT -p tcp --dport 10000 -j ACCEPT
          
          # Mail
          sudo iptables -A OUTPUT -p tcp --dport 587 -j ACCEPT
          
          #Proftpd passif
          sudo iptables -A INPUT -p tcp -m tcp --dport 55000:55100 --syn -j ACCEPT
          sudo iptables -A OUTPUT -p tcp -m tcp --dport 55000:55100 --syn -j ACCEPT
          

          J'ai également chargé deux modules :

          modprobe nf_conntrack_ftp
          modprobe nf_nat_ftp
          

          Et depuis cela marche parfaitement !

          elalitte, j'ai autorisé les flux dans les deux sens car je pensais que si une connexion entre elle doit forcément ressortir mais est-ce que je me trompe ?

          De plus je ne comprends pas l'histoire avec les connexions établies et l'établissement, peux tu m'éclairer stp ?

          Merci d'avance


          • Partager sur Facebook
          • Partager sur Twitter
            27 avril 2015 à 0:19:13

            En fait netfilter est un firewall à états, ce qui fait que tu n'as qu'à filtrer que le premier paquet d'une connexion, pour que tous les autres pessent dans l'état ESTABLISHED,RELATED. Ainsi tu n'indique que le sens que tu veux autoriser, et cela marchera car tous les autres paquets seront acceptés.
            • Partager sur Facebook
            • Partager sur Twitter

            Connexion FTP impossible avec iptables

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown