Redirection de port Iptables

Bonjour,

en faites je cherche à rediriger mes port ftp 20 et 21 sur les port pasv_min_port=30000
pasv_max_port=30999 dans iptables , j'utilise vsftpd, et ubuntu gutsy merci de votre aide

--

L.A Guette de Haut
Configuration: Linux
Firefox 2.0.0.8

21 réponses

Résumé de la discussion

La problématique porte sur la redirection des ports FTP 20 et 21 vers une plage de ports passifs 30000 à 30999 via iptables, avec le serveur vsftpd sur Ubuntu Gutsy. Des réponses suggèrent d'activer le module ip_conntrack_ftp et de vérifier son chargement avec lsmod, puis d'autoriser les ports passifs en ajoutant une règle iptables adaptée. L'exemple proposé consiste à accepter le trafic TCP sur la plage 30000-30999 via une règle INPUT, après l'installation et la vérification du module ip_conntrack_ftp chargé correctement. Plusieurs messages montrent des essais concrets en mode passif, avec des messages PASV et des échecs de connexion sur les ports passifs malgré le port 21 ouvert.

Bobot (l’IA à votre service)
  1. Modérateur
    Non, le wap c'est has-been, maintenant ya internet sur les téléphones ;-)

    Peut être même ave le WPA, pour être secure... ;-)
    Quoique un telephone avec wifi.....
    1. Modérateur
      Ave Cesar alors ;-))

      pffffff tupain de dyslexisme doigteux à la noix ;-((
  2. Modérateur
    Par contre il n'arrivait pas à lister un repertoire.
    ce n'est pas forcement à cause de firewall, ça peut être aussi à cause de client
    1. Modérateur
      M'enfin perso je pencherai plus pour une mauvaise configuration (et je dirai même erreur dans la mise en place) de vsftpd, en me basant sur cette discussion, qu'un problème d'iptables et FTP passif ;-\

      Bonne fin d'après-midi à vous ;-))
      1. Modérateur
        Ah oui d'accord.
        Bah peut être...
        Mais il arrivait à se connecter quand même...Par contre il n'arrivait pas à lister un repertoire.
        Ca signifie que les commandes de base marchent bien (port 21) mais dés qu'il y a des données qui transitent, rien ne va plus (ports passifs).
        C'est donc au niveau des ports passifs qu'il fallait faire quelque chose, mais on ne saura pas au final.

        Mériterai peut être un article dans la faq, qu'est ce que vous en pensez?
    2. Modérateur
      :-)

      En fait ça m'enerve il ya toujours une part de mystère pour moi dans cette histoire de ftp passif. J'ai l'impression de bien visualiser ce qui se passe et pourtant ça foire....
      1. j'ai installer pureftp finalement kilian et ça marche du tonerre
        1. Modérateur
          Et j'imagine que si tu fais ls dans ce shell ftp, il n'y arrive pas.
          Donc voilà il arrive à aller sur le port 21 mais pas sur les ports passifs.

          Et si tu rajoutes cette règle?
          iptables -A INPUT -i eth0 -p tcp --dport 30000:30999 -j ACCEPT
          1. en tout cas avec tes regles kilian Gtftp le repond

            Chargement du répertoire / depuis le serveur (LC_TIME=fr_FR.UTF-8)
            PASV

            227 Entering Passive Mode (87,88,62,133,120,57)
            Ne peut créer une connexion : Connexion refusée

            et par contre en console voilà Password:
            230 Login successful.
            Remote system type is UNIX.
            Using binary mode to transfer files.
            ftp>
            1. Modérateur
              Ben ya beaucoup de choses.
              Faut tester...j'ai pas le courage de tout lire :-)
              1. Ha ok excuse kilian , voilà dc à present mon iptables

                #!/bin/bash

                # Charger les modules conntrack
                modprobe ip_conntrack_ftp
                modprobe ip_conntrack_ftp
                modprobe ipt_conntrack
                modprobe ip_conntrack
                modprobe ip_nat_ftp

                #activation du forward
                echo 1 > /proc/sys/net/ipv4/ip_forward

                #Anti Spoofing
                if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]
                then
                for filtre in /proc/sys/net/ipv4/conf/*/rp_filter
                do
                echo 1 > $filtre
                done
                fi

                # pas de icmp
                echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
                echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

                # Nous vidons toutes les chaines
                iptables -F

                # Nous supprimons les chaines non standards
                iptables -X

                # Par defaut tout est ferme
                iptables -P INPUT DROP
                iptables -P OUTPUT ACCEPT
                iptables -P FORWARD DROP

                #Accept CHAINE
                iptables -t nat -F
                iptables -t nat -X

                iptables -t nat -P PREROUTING ACCEPT
                iptables -t nat -P POSTROUTING ACCEPT
                iptables -t nat -P OUTPUT ACCEPT

                # La machine locale est sure
                iptables -A INPUT -i lo -j ACCEPT
                iptables -A OUTPUT -o lo -j ACCEPT

                # Resolution DNS pour le firewall
                iptables -A INPUT -i eth0 --protocol udp --source-port 53 -j ACCEPT
                iptables -A OUTPUT -o eth0 --protocol udp --destination-port 53 -j ACCEPT
                iptables -A INPUT -i eth0 --protocol tcp --source-port 53 -j ACCEPT
                iptables -A OUTPUT -o eth0 --protocol tcp --destination-port 53 -j ACCEPT

                # Messenger
                iptables -A INPUT -p tcp --sport 1863 -j ACCEPT
                iptables -A OUTPUT -p tcp --dport 1863 -j ACCEPT

                # Messenger Transfert Files

                # Heure GMT Online
                iptables -A INPUT -i eth0 --protocol udp --source-port 123 -m state --state ESTABLISHED -j ACCEPT
                iptables -A OUTPUT -o eth0 --protocol udp --destination-port 123 -m state --state NEW,ESTABLISHED -j ACCEPT

                # CUPS (imprimante)
                iptables -A INPUT -p tcp --dport 631 -m state --state NEW -j ACCEPT

                # P2P
                iptables -A INPUT -p tcp --dport 7564 -j ACCEPT
                iptables -A OUTPUT -p tcp --sport 7564 -j ACCEPT
                iptables -A INPUT -p udp --dport 7574 -j ACCEPT
                iptables -A INPUT -p udp --sport 7574 -j ACCEPT

                # ftp
                iptables -A INPUT -i eth0 -p tcp -m state --state ESTABLISHED, RELATED -j ACCEPT
                iptables -A INPUT -i eth0 -p tcp --dport 21 -j ACCEPT
                iptables -A INPUT -i eth0 -p tcp --dport 20 -j ACCEPT

                # connexions Firewall-Internet (www)
                iptables -A OUTPUT -p tcp --dport 80 -o eth0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
                iptables -A OUTPUT -p tcp --dport 443 -o eth0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
                iptables -A INPUT -p tcp --sport 80 -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
                iptables -A INPUT -p tcp --sport 443 -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

                # connexions firewall -Internet (pop)
                iptables -A OUTPUT -p tcp --dport 110 -o eth0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
                iptables -A INPUT -p tcp --sport 110 -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
                iptables -A OUTPUT -p tcp --dport 995 -o eth0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
                iptables -A INPUT -p tcp --sport 995 -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

                # connexions firewall-Internet (imap)
                iptables -A OUTPUT -p tcp --dport 143 -o eth0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
                iptables -A INPUT -p tcp --sport 143 -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

                # connexions firewall-Internet (imaps)
                iptables -A OUTPUT -p tcp --dport 993 -o eth0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
                iptables -A INPUT -p tcp --sport 993 -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

                # connexions firewall-Internet (smtp)
                iptables -A OUTPUT -p tcp --dport 25 -o eth0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
                iptables -A INPUT -p tcp --sport 25 -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
                iptables -A OUTPUT -p tcp --dport 465 -o eth0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
                iptables -A INPUT -p tcp --sport 465 -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

                # ping (accept les ping vers l'exterieur, mais pas entrant (flood))
                iptables -A OUTPUT -p icmp -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
                iptables -A INPUT -p icmp -m state --state RELATED,ESTABLISHED -j ACCEPT
                iptables -A INPUT -p icmp -m state --state NEW -m limit --limit 10/min -j ACCEPT

                # IRC
                iptables -A INPUT -p tcp --source-port 6667 -m state --state ESTABLISHED -j ACCEPT
                iptables -A OUTPUT -p tcp --destination-port 6667 -m state --state NEW,ESTABLISHED -j ACCEPT

                # Fin de fichier

                sinon mon vsftpd.conf il a l'air convenable kilian ? plus haut je l'ai posté
                1. Modérateur
                  Nan, on dirait que t'as pas vraiment lu mon message...
                  iptables -P INPUT DROP
                  iptables -P OUTPUT ACCEPT #Pour l'instant on ne s'encombre pas à filtrer ce qui sort
                  iptables -P FORWARD DROP
                  
                  #Ne pas oublier le RELATED, important car elle permet de laisser entrer une connexion liée à une autre
                  iptables -A INPUT -i eth0 -p tcp -m state --state ESTABLISHED, RELATED -j ACCEPT 
                  #Une règle pour le port 21
                  iptables -A INPUT -i eth0 -p tcp --dport 21 -j ACCEPT

                  Comme je t'ai dit, pas besoin des règles sur les port 30000 etc... Le module ip_conntrack_ftp s'en chargera.
                  Pour le port 20 je sais pas, au pire rajoute une ligne pour le port 20:
                  iptables -A INPUT -i eth0 -p tcp --dport 20 -j ACCEPT
                  1. # Par defaut tout est ferme
                    iptables -P INPUT DROP
                    iptables -P OUTPUT DROP
                    iptables -P FORWARD DROP

                    comme ceci ?

                    iptables -A INPUT -i eth0 -p tcp -m state --state ESTABLISHED -j ACCEPT
                    iptables -A INPUT -i eth0 -p tcp --sport 30000:30999 --dport 30000:30999 -m state --state ESTABLISHED,RELATED -j ACCEPT
                    iptables -A OUTPUT -o eth0 -p tcp --sport 30000:30999 --dport 1024:30999 -m state --state ESTABLISHED -j ACCEPT

                    enfin comme ça

                    iptables -A OUTPUT -p tcp --dport 21 -o eth0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
                    iptables -A INPUT -p tcp --sport 21 -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
                    iptables -A OUTPUT -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
                    iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
                    iptables -A INPUT -i eth0 -p tcp --sport 30000:30999 --dport 30000:30999 -m state --state ESTABLISHED,RELATED -j ACCEPT
                    iptables -A OUTPUT -o eth0 -p tcp --sport 30000:30999 --dport 1024:30999 -m state --state ESTABLISHED -j ACCEPT

                    1. Modérateur
                      Quelques commentaires:
                      modprobe ip_nat_ftp

                      Ca t'en a pas besoin sur ton ordinateur, seul le routeur qui est devant toi en a besoin, mais à priori les modem s'en chargent tout seuls.

                      iptables -A INPUT -i eth0 -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT

                      Inutile ici de préciser que le port source est le 21.
                      Et d'ailleurs :
                      iptables -A INPUT -i eth0 -p tcp -m state --state ESTABLISHED -j ACCEPT

                      Ceci est une ligne vitale car elle signifie: pour toute connexion déjà initialisée auparavant => j'accepte. Oui si la connexion a déjà été intialisée ça signifie à priori qu'il n'y a pas de danger, et c'est une règle necessaire pour que toute communication se passe bien.

                      Pour ce qui est des règles OUTPUT, je te suggère de ne pas en mettre pour l'instant est d'accepter que tout ce qui sort est permis par défaut:
                      iptables -P OUTPUT ACCEPT

                      D'ailleurs tes règles ne servent à rien si tu ne mets pas une politique de refus par défaut pour ce qui rentre:
                      iptables -P INPUT DROP


                      Donc comme je le disais teste d'abord sans règles d'OUPUT. Si ça marche, tu peux commencer à en mettre. Surtout que là tu filtres ce qui ne vient pas du port 21. Et je ne suis pas sûr que tout ce qui sortira viendra du port 21.

                      Ensuite comme je t'ai dis si tu as chargé ip_conntrack_ftp, tes règles d'entrée en multiport sont inutiles. Le firewall fera ça dynamiquement. Ensuite je ne sais pas si c'est une bonne idée de choisir des ports aussi haut. Choisit peut être une rangée du genre 1024 à 1100.
                      1. Ouai en tappant ces commandes çe me dit rien , ça me remet ma ligne user@gniagnia

                        mais

                        user@gniagnia:~$ lsmod|grep ftp
                        nf_nat_ftp 4352 0
                        nf_nat 20140 3 nf_nat_ftp,nf_conntrack_netlink,iptable_nat
                        nf_conntrack_ftp 11136 1 nf_nat_ftp
                        nf_conntrack 65288 8 nf_nat_ftp,nf_conntrack_netlink,xt_state,iptable_nat,nf_nat,nf_conntrack_ipv4,xt_conntrack,nf_conntrack_ftp

                        ma config vsftpd.conf

                        # Ceci configure vsFTPd en mode "standalone"
                        listen=YES

                        # On désactive les connexions anonymes
                        # et on active les non-anonymes(c'est le cas des utilisateurs virtuels):
                        anonymous_enable=NO
                        local_enable=YES

                        # Pour des raisons de sécurité on interdit toute action d'écriture:
                        write_enable=NO
                        anon_upload_enable=NO
                        anon_mkdir_write_enable=NO
                        anon_other_write_enable=NO

                        # 'guest_enable' est très important: cela active les utilisateurs virtuels!
                        # 'guest_username' fait correspondre tous les utilisateurs virtuels à
                        # l'utilisateur 'virtual' que nous avons défini plus haut, et au home
                        # correspondant: '~virtual/'.
                        guest_enable=YES
                        guest_username=virtual

                        # On veut que les utilisateurs virtuels restent chez eux: '~virtual/'
                        # (attends, on leur a fait un toît, c'est pas pour rien!)
                        chroot_local_user=YES

                        # On défini le nombre maximum de sessions à 200(les nouveaux clients recevront
                        # un message du genre: "erreur: serveur occupé").
                        # On défini le nombre maximum de sessions par IP à 4
                        max_clients=200
                        max_per_ip=4
                        pasv_promiscuous=YES
                        pasv_enable=YES
                        pasv_min_port=30000
                        pasv_max_port=30999
                        pasv_address=My fucking Ip adresse
                        port_promiscuous=YES
                        1. Modérateur
                          De ce côté là ça m'a l'air bon. Maintenant la config de Vsftpd est toujours un peu délicate...
                          On verra.
                      2. comme ça kilian ça va

                        # Charger les modules conntrack
                        modprobe ip_conntrack_ftp
                        modprobe ip_conntrack_ftp
                        modprobe ipt_conntrack
                        modprobe ip_conntrack
                        modprobe ip_nat_ftp

                        # Ftp
                        iptables -A INPUT -i eth0 -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT
                        iptables -A INPUT -i eth0 -p tcp --dport 21 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
                        iptables -A OUTPUT -o eth0 -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT
                        iptables -A INPUT -i eth0 -p tcp --dport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT
                        iptables -A OUTPUT -o eth0 -p tcp --sport 20 -m state --state ESTABLISHED -j ACCEPT
                        iptables -A INPUT -p tcp -m multiport --dports 30000:30999 -m state --state NEW -j ACCEPT
                        iptables -A INPUT -p tcp -m multiport --dports 30000:30999 -m state --state RELATED -j ACCEPT
                        iptables -A INPUT -p tcp -m multiport --dports 30000:30999 -m state --state ESTABLISHED -j ACCEPT
                        1. Modérateur
                          D'abord tu le charges (en root):
                          modprobe ip_conntrack_ftp

                          Et s'il y a pas d'erreur alors c'est bon.

                          Mais si tu veux vraiment vérifier, tu peux utiliser la commande lsmod pour lister les modules chargés:
                          lsmod | grep ip_conntrack_ftp
                          1. comment je fais pour voir si les module ip_conntrack_ftp se charge correctement avec iptables kilian?
                            • 1
                            • 2