Partage
  • Partager sur Facebook
  • Partager sur Twitter

Firewall sur réseaux

Problème sur un firewall pour un réseaux

Sujet résolu
    4 octobre 2016 à 14:57:15

    Bonjour,

    Je veux créer un réseau sécurisé, j'ai utilisé un pc pour qu'il fasse réseau/firewall.
    J'ai réussi a créer un routeur qui redistribuent internet a d'autre  ordinateur internet, Le problème viens quand je créer le firewall...
    Je créer mon firewall, sur le pc routeur, tout marche, les ports qui ne sont pas ouverts sont bien bloquées et ceux ouverts sont bien ouverts. Le problème se situent sur l'ordinateur qui se trouve derrière, le routeur, il capte bien internet avant le lancement du firewall, et après, il a toujours une ip mais n'a plus accès par exemple au port HTTPS comme il devrait.

    Le firewall actuel est :

    "

    #!/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 22 -j ACCEPT

    # SSH    ---   
        sudo iptables -t filter -A FORWARD -p tcp --dport 22 -j ACCEPT

    # SSH    ---   
        sudo iptables -t filter -A OUTPUT -p tcp --dport 22 -j ACCEPT

    # DNS    ---   
        sudo iptables -t filter -A INPUT -p tcp --dport 53 -j ACCEPT

    # DNS    ---   
        sudo iptables -t filter -A FORWARD -p tcp --dport 53 -j ACCEPT

    # DNS    ---   
        sudo iptables -t filter -A OUTPUT -p tcp --dport 53 -j ACCEPT

    # DNS    ---   
        sudo iptables -t filter -A INPUT -p udp --dport 53 -j ACCEPT

    # DNS    ---   
        sudo iptables -t filter -A FORWARD -p udp --dport 53 -j ACCEPT

    # DNS    ---   
        sudo iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT

    # HTTP    ---   
        sudo iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT

    # HTTP    ---   
        sudo iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT

    # HTTP    ---   
        sudo iptables -t filter -A FORWARD -p tcp --dport 80 -j ACCEPT

    # FTP    ---   
        sudo iptables -t filter -A INPUT -p tcp --dport 20:21 -j ACCEPT

    # FTP    ---   
        sudo iptables -t filter -A OUTPUT -p tcp --dport 20:21 -j ACCEPT

    # FTP    ---   
        sudo iptables -t filter -A FORWARD -p tcp --dport 20:21 -j ACCEPT

    # MAIL_STMP    ---   
        sudo iptables -t filter -A INPUT -p tcp --dport 25 -j ACCEPT

    # MAIL_STMP    ---   
        sudo iptables -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT

    # MAIL_STMP    ---   
        sudo iptables -t filter -A FORWARD -p tcp --dport 25 -j ACCEPT

    # MAIL_POP3    ---   
        sudo iptables -t filter -A INPUT -p tcp --dport 110 -j ACCEPT

    # MAIL_POP3    ---   
        sudo iptables -t filter -A OUTPUT -p tcp --dport 110 -j ACCEPT

    # MAIL_POP3    ---   
        sudo iptables -t filter -A FORWARD -p tcp --dport 110 -j ACCEPT

    # MAIL_IMAP    ---   
        sudo iptables -t filter -A INPUT -p tcp --dport 143 -j ACCEPT

    # MAIL_IMAP    ---   
        sudo iptables -t filter -A OUTPUT -p tcp --dport 143 -j ACCEPT

    # MAIL_IMAP    ---   
        sudo iptables -t filter -A FORWARD -p tcp --dport 143 -j ACCEPT

    # NTP    ---   Horloge du serveur
        sudo iptables -t filter -A OUTPUT -p udp --dport 123 -j ACCEPT

    # HTTPS    ---   
        sudo iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT

    # HTTPS    ---
        sudo iptables -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT

    # HTTPS    ---
        sudo iptables -t filter -A FORWARD -p tcp --dport 443 -j ACCEPT

    "

    Merci beaucoup pour votre aides et pour vos conseils !

    -
    Edité par MaximeCare 5 octobre 2016 à 10:06:22

    • Partager sur Facebook
    • Partager sur Twitter
      4 octobre 2016 à 17:23:28

      Salut,

      Les règles doivent être appliquées pour la chaine FORWARD, là tu autorises uniquement les requêtes qui vont vers ton routeur ou qui sont initialisées de ton routeur, mais pas celles qui sont routées à travers. L'utilité se limite à la machine sur laquelle tu rentres les règles en somme.

      Or vu que ta chaine FORWARD a une politique de DROP par défaut, tu droppes tous les paquets qui sont routés.

      Par contre, quel est l'intérêt de faire ça ? Tu n'as pas de box ?

      • Partager sur Facebook
      • Partager sur Twitter
      System test engineer
        5 octobre 2016 à 9:21:37

        J'ai effectivement pensé après coup d'appliquer a la chaine FORWARD les règles. Mais rien ne change, la solution serait de ne pas drop la chaine FORWARD? Pour moi le but de cette commande est d'ajouter de la sécurité en réinitialisant tout au début des règles.

        Mais du coup, quand je drop les FORWARD, je drop aussi les ordinateur? Je ne drop pas que les règles existante ?

        • Partager sur Facebook
        • Partager sur Twitter
          5 octobre 2016 à 9:49:17

          Non, il faut bien DROP la chaine FORWARD puis appliquer tes règles ensuite. Par exemple, pour SSH :

          sudo iptables -t filter -A FORWARD -p tcp --dport 22 -j ACCEPT

          Il faut aussi virer les règles OUTPUT à moins que tu aies besoin que ton routeur accède à Internet.

          Et les chaines INPUT doivent être en phase avec les ports ouverts sur ton routeur. Si tu n'as pas de serveur DNS dessus, pas besoin d'ouvrir le port DNS en INPUT.

          Est-ce que ton routeur a directement accès à Internet ou est devant une box ?

          Voilà un schéma très complet du workflow d'iptables. Si tu regarde du côté de la table "filter" (celle que tu utilises), tu peux voir que les chaines INPUT et OUTPUT correspondent à des trames qui rentrent dans les couches supérieures de la machine ou qui en sortent. Donc les paquets que tu routes ne passent jamais par là.

          Tu peux aussi utiliser la commande

          iptables -nvL

          qui te permet de connaitre les rules hits, c'est à dire le nombre de fois où un paquet correspond à une règle. Ça te permettra de troubleshooter ton setup.

          • Partager sur Facebook
          • Partager sur Twitter
          System test engineer
            5 octobre 2016 à 10:07:52

            Je compte effectivement virer les règles OUTPUT, j'applique aussi déjà les règles sur le FORWARD (je vais update le message initial du topic avec le firewall actuel)

            Pour la connection internet, je suis en direct, je ne passe pas par une box.


            Pour ce qui est de la commande iptables -nvL, je ne vois pas d'incohérence majeure qui pourrait faire disfonctionner le firewall.

            """

            Chain INPUT (policy DROP 59 packets, 3684 bytes)
             pkts bytes target     prot opt in     out     source               destination        
             7595 6161K ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
                0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0          
                0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0          
                0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:22
                0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:53
               18  1134 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:53
                0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80
                0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpts:20:21
                0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:25
                0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:110
                0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:143
                0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:443

            Chain FORWARD (policy ACCEPT 662 packets, 786K bytes)
             pkts bytes target     prot opt in     out     source               destination        
                0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:22
                0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:53
                0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:53
                6   759 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80
                0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpts:20:21
                0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:25
                0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:110
                0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:143
              408 34046 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:443

            Chain OUTPUT (policy DROP 4 packets, 292 bytes)
             pkts bytes target     prot opt in     out     source               destination        
             6461  646K ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
                0     0 ACCEPT     all  --  *      lo      0.0.0.0/0            0.0.0.0/0          
                0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0          
                0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:22
                0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:53
              585 39132 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:53
               53  3180 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80
                0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpts:20:21
                0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:25
                0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:110
                0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:143
                0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:123
              197 11820 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:443

            """

            • Partager sur Facebook
            • Partager sur Twitter
              5 octobre 2016 à 10:49:27

              Alors si tu as accès directement à internet c'est différent. Tu es obligé de faire du NAT (cf la table "nat") pour passer de tes adresses privées locales à ta seule adresse publique. Je t'invite à lire ceci.

              • Partager sur Facebook
              • Partager sur Twitter
              System test engineer
                5 octobre 2016 à 14:51:41

                Pour que ça soit plus pratique je suis passé derrière une box free.

                J'avais pourtant appliqué tout ce que le lien indiquait sans succès...

                J'ai entendue parler du PAT ça pourrait avoir un lien?

                • Partager sur Facebook
                • Partager sur Twitter
                  5 octobre 2016 à 15:58:09

                  NAT/PAT c'est la même chose (N = network, P = port)

                  Il faut que tu continues à faire du troubleshooting de ton côté, je pense pas que tu sois loin de voir où est l'erreur.

                  -
                  Edité par Doezer 5 octobre 2016 à 15:58:47

                  • Partager sur Facebook
                  • Partager sur Twitter
                  System test engineer
                    5 octobre 2016 à 16:15:02

                    Tu n'as pas de règle ESTABLISHED,RELATED pour FORWARD... donc seuls les premiers paquets de connexions passeront (edit, j'ai vu par la suite que c'était corrigé)

                    Par la suite tu as mis la politique par défaut de FORWARD à ACCEPT, donc ton firewall est une passoire, ce qui n'est pas son rôle :o

                    De manière générale, comprendre la différence entre INPUT, OUTPUT et FORWARD est juste hyper important pour être sûr de ce que l'on fait. Cela reste vrai pour tous les autres aspects du filtrage, qui sous netfilter reste un sujet très complexe.

                    Si tu es derrière ta freebox, il faut nater comme le dit Doezer, sinon ta freebox ne connaitra pas le réseau derrière ton firewall.

                    iptables -t nat -A POSTROUTING -o eth? -j ACCEPT

                    Bon et au passage, utilise les états sur toutes tes règles, là tu n'utilises pas NEW, et filtre mieux, notamment les flags TCP avec --syn.

                    • Partager sur Facebook
                    • Partager sur Twitter
                      6 octobre 2016 à 10:24:58

                      Pour le ETABLISHED,RELATED pour FORWARD, est bien présente.

                      pour ce qui est de la politique par défaut du FORWARD à ACCEPT, il me semble pas le mettre, mais j'ai l'impression que c'est a ce niveaux que mon problème se situe, au niveaux des règles ETABLISHED,RELATED et sudo iptables -t filter -A FORWARD -i lo -j ACCEPT. Pour moi la première est assez floue et la deuxième vas en local accepté tout sur le FORWARD, mais que en local.

                      J'ai utilisé la fonction :
                      iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

                      quel est la différence entre le -j ACCEPT  ?

                      Par contre je n'ai jamais vue l'utilisation de NEW, quel est le but exactement ?

                      Pour ce qui est de mon code il ressemble actuellement à :
                      """

                      #!/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 -A FORWARD -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
                          sudo iptables -t filter -A FORWARD -i 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 22 -j ACCEPT

                      # SSH    ---  
                          sudo iptables -t filter -A FORWARD -p tcp --dport 22 -j ACCEPT

                      # SSH    ---  
                          sudo iptables -t filter -A OUTPUT -p tcp --dport 22 -j ACCEPT

                      # DNS    ---  
                          sudo iptables -t filter -A INPUT -p tcp --dport 53 -j ACCEPT

                      # DNS    ---  
                          sudo iptables -t filter -A FORWARD -p tcp --dport 53 -j ACCEPT

                      # DNS    ---  
                          sudo iptables -t filter -A OUTPUT -p tcp --dport 53 -j ACCEPT

                      # DNS    ---  
                          sudo iptables -t filter -A INPUT -p udp --dport 53 -j ACCEPT

                      # DNS    ---  
                          sudo iptables -t filter -A FORWARD -p udp --dport 53 -j ACCEPT

                      # DNS    ---  
                          sudo iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT

                      # HTTP    ---  
                          sudo iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT

                      # HTTP    ---  
                          sudo iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT

                      # HTTP    ---  
                          sudo iptables -t filter -A FORWARD -p tcp --dport 80 -j ACCEPT

                      # FTP    ---  
                          sudo iptables -t filter -A INPUT -p tcp --dport 20:21 -j ACCEPT

                      # FTP    ---  
                          sudo iptables -t filter -A OUTPUT -p tcp --dport 20:21 -j ACCEPT

                      # FTP    ---  
                          sudo iptables -t filter -A FORWARD -p tcp --dport 20:21 -j ACCEPT

                      # MAIL_STMP    ---  
                          sudo iptables -t filter -A INPUT -p tcp --dport 25 -j ACCEPT

                      # MAIL_STMP    ---  
                          sudo iptables -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT

                      # MAIL_STMP    ---  
                          sudo iptables -t filter -A FORWARD -p tcp --dport 25 -j ACCEPT

                      # MAIL_POP3    ---  
                          sudo iptables -t filter -A INPUT -p tcp --dport 110 -j ACCEPT

                      # MAIL_POP3    ---  
                          sudo iptables -t filter -A OUTPUT -p tcp --dport 110 -j ACCEPT

                      # MAIL_POP3    ---  
                          sudo iptables -t filter -A FORWARD -p tcp --dport 110 -j ACCEPT

                      # MAIL_IMAP    ---  
                          sudo iptables -t filter -A INPUT -p tcp --dport 143 -j ACCEPT

                      # MAIL_IMAP    ---  
                          sudo iptables -t filter -A OUTPUT -p tcp --dport 143 -j ACCEPT

                      # MAIL_IMAP    ---  
                          sudo iptables -t filter -A FORWARD -p tcp --dport 143 -j ACCEPT

                      # NTP    ---   Horloge du serveur
                          sudo iptables -t filter -A OUTPUT -p udp --dport 123 -j ACCEPT

                      # HTTPS    ---  
                         sudo iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT

                      # HTTPS    ---
                          sudo iptables -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT

                      # HTTPS    ---
                          sudo iptables -t filter -A FORWARD -p tcp  --dport 443 -j ACCEPT
                      """

                      Merci encore a vous pour vôtres aides!

                      • Partager sur Facebook
                      • Partager sur Twitter
                        6 octobre 2016 à 10:36:40

                        MASQUERADE = translation d'adresse (NAT). Tu masques l'adresse source locale en utilisant l'adresse source globale (celle du routeur). Renseigne toi sur le NAT car sans plus d'infos ça va te paraitre sortir de nulle part.
                        • Partager sur Facebook
                        • Partager sur Twitter
                        System test engineer
                          6 octobre 2016 à 11:12:16

                          Je comprend le NAT (a peut près), c'était plus sur la différence entre le MASQUERADE et le ACCEPT qu'y m'enbetais et le fait que plus haut on me conseille d'utiliser le ACCEPT.

                          • Partager sur Facebook
                          • Partager sur Twitter
                            6 octobre 2016 à 11:50:25

                            Ce sont deux types de décision différentes, mais MASQUERADE on le met dans la chaine POSTROUTING justement parce que c'est situé après la décision de routage et après les décisions de "pare-feu" (FORWARD). Si tu regardes le schéma que j'avais donné, sur le chemin de tes paquets, la table nat.POSTROUTING est la dernière par laquelle ils passeront.
                            • Partager sur Facebook
                            • Partager sur Twitter
                            System test engineer
                              6 octobre 2016 à 11:54:01

                              C'est moi qui ai fait une erreur, c'est bien MASQUERADE et non ACCEPT :-°

                              Ensuite tu dois mettre la politique par défaut de FORWARD à DROP, sinon ton firewall laisse tout passer.

                              iptables -P FORWARD DROP

                              Pour la règle qui laisse tout passer sur lo, c'est une bonne idée car dans l'environnement graphique il peut y avoir des applis qui discutent entre elles par le réseau en local. Voir même des services réseau.

                              NEW est une précision sur un état, comme ESTABLISHED ou RELATED ou INVALID. Les état permettent de simplifier grandement l'écriture des règles de filtrage (je suis en train de faire un tuto dessus, mais ça prend du temps...) 

                              Le but d'un firewall est de bloquer exactement ce que tu veux. Si tu ne précises pas NEW, n'importe qui pourra envoyer des paquets quelconques en plein milieu d'une conversation. De même si tu ne précises pas pour TCP --syn, on pourra te scanner avec des attaques de type xmas ou autres flags bizarres.

                              Le but d'une règle est d'être la plus stricte possible.

                              Par exemple si je prends ta première règle pour SSH:

                              sudo iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT

                              Tu pourrais plutôt l'écrire comme ceci:

                              sudo iptables -t filter -A INPUT -p tcp --dport 22 -m state --state NEW --syn -j ACCEPT

                              Ainsi tu te prémunis contre la réception de paquets bizarres.

                              • Partager sur Facebook
                              • Partager sur Twitter
                                6 octobre 2016 à 15:34:38

                                Merci a vous mon problème a été résolue ! ;)

                                Pour ce qui est de ton tuto Elatitte je veux bien un mp si ça te dérrange pas quand tu l'aura post !

                                J'ai appliqué tout les conseils et ça marche parfaitement avec plus de sécurité qu'au début !

                                Merci beaucoup ! :D

                                • Partager sur Facebook
                                • Partager sur Twitter

                                Firewall sur réseaux

                                × 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