[iptables]mon script , mais ça marche po

bonjour,
j'ai mis un script iptables sur mon serveur debian avec:
1 eth0 pour internet
1 eth1 pour le lan1
1 eth2 pour le lan 2
le lan 1 et le lan 2 vont sur internet [ sa ça marche]
le poste du lan 1 va sur le serveur en ssh [ sa ça marche]
sur le serveur en mode console aller sur internet [ sa ça marche pas] (exemple aptitude pour mis a jour)

quelqu'un pourrait il me dire et m'indiquer la regle pour que ,à partir du serveur, j'aille sur le net ?
et est ce que mon script est correct ?

mon script
#!/bin/sh

#reinitialisation
# Reset counters
iptables -Z
iptables -Z -t mangle
iptables -Z -t nat

# Flush rules
iptables -F
iptables -F -t nat
iptables -F -t mangle

#je bloque tout
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
echo 1 > /proc/sys/net/ipv4/ip_forward



#accepte connex lo
iptables -A INPUT -i lo -j ACCEPT



iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 192.168.1.20



#Pour la premiere carte vers eth0
iptables -A FORWARD -i eth1 -o eth0 -m state --state ! INVALID -j ACCEPT
iptables -A FORWARD -o eth1 -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

#Pour la seconde carte vers eth0
iptables -A FORWARD -i eth2 -o eth0 -m state --state ! INVALID -j ACCEPT
iptables -A FORWARD -o eth2 -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

# ssh
iptables -A INPUT -p tcp -m tcp -s 192.168.223.42 --dport 22 -j ACCEPT

43 réponses

Résumé de la discussion

Le problème porte sur un serveur Debian multi‑NIC ne parvenant pas à sortir vers Internet depuis le LAN, malgré une règle NAT et des règles de forwarding configurées dans iptables. Les règles FORWARD permettent déjà d’accepter le trafic LAN vers eth0, mais l’orientation des lignes ESTABLISHED,RELATED est inversée dans certaines règles, ce qui bloque les retours et l’accès extérieur. Il est recommandé d’utiliser MASQUERADE sur eth0 et de corriger les FORWARD pour autoriser NEW de eth1 et eth2 vers eth0, puis ESTABLISHED,RELATED dans le sens retour, tout en conservant le forward par défaut.

Bobot (l’IA à votre service)
  1. Modérateur
    Salut,
    x.x.x.x c'est l'ip de server

    Au lieu de mettre dans le script
    echo 1 > /proc/sys/net/ipv4/ip_forward

    tu peux écrire cette ligne net.ipv4.ip_forward=1 dans le fichier /etc/sysctl.conf
    #!/bin/bash
    iptables -F
    iptables -X
    iptables -P INPUT   DROP
    iptables -P OUTPUT  DROP
    iptables -P FORWARD DROP
    
    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
    
    iptables -t mangle -F
    iptables -t mangle -X
    iptables -t mangle -P PREROUTING    ACCEPT
    iptables -t mangle -P INPUT         ACCEPT
    iptables -t mangle -P OUTPUT        ACCEPT
    iptables -t mangle -P FORWARD       ACCEPT
    iptables -t mangle -P POSTROUTING   ACCEPT
    
    iptables -A INPUT -i lo -s '0.0.0.0/0' -d '0.0.0.0/0' -j ACCEPT
    iptables -A OUTPUT -o lo -s '0.0.0.0/0' -d '0.0.0.0/0' -j ACCEPT
    
    iptables -A INPUT -i eth0 -d x.x.x.x -m state --state ESTABLISHED,RELATED -j ACCEPT
    iptables -A OUTPUT -o eth0 -m state --state ! INVALID -j ACCEPT
    
    echo 1 > /proc/sys/net/ipv4/ip_forward
    
    iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 192.168.1.20
    #
    ##Pour la premiere carte vers eth0
    iptables -A FORWARD -i eth1 -o eth0 -m state --state ! INVALID -j ACCEPT
    iptables -A FORWARD -o eth1 -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
    #
    ##Pour la seconde carte vers eth0
    iptables -A FORWARD -i eth2 -o eth0 -m state --state ! INVALID -j ACCEPT
    iptables -A FORWARD -o eth2 -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
    #
    ## ssh
    iptables -A INPUT -p tcp -m tcp -s 192.168.223.42 --dport 22 -j ACCEPT

    1. bonjour

      merci a toi lam20j , trop top , hyper rapide
      le script marche impec
      merci encore car ça faisait un moment que je me cassait le c..
      et là en 2 coups de cuilleres à pot , tu me sauve la mise
      chapeau bas

      @+
      1. bonjour,

        suite à la demande express des enfants , et certains adultes
        il me demande ml--key
        je pense que c'est niette sur le forum ,
        alors comment fermer les ports sur eth1 et eth2 pour qu'il ne passe que 21,80,443 etc.. les principaux

        et me mettre un exemple d'ouverture de port pour l'eth0 exmple 4662

        merci encore
        1. Hello

          pourquoi pas une boucle dans ton script ?

          Dans le style

          for each port in ( 21, 80, 443, ... ) do

          iptables -A FORWARD -i eth1 -o eth0 -p tcp -dport $port -m state --state ! INVALID -j ACCEPT
          iptables -A FORWARD -o eth1 -i eth0 -p tcp -dport $port -m state --state ESTABLISHED,RELATED -j ACC
          #
          ##Pour la seconde carte vers eth0
          iptables -A FORWARD -i eth2 -o eth0 -p tcp -dport $port -m state --state ! INVALID -j ACCEPT
          iptables -A FORWARD -o eth2 -i eth0 -p tcp -dport $port -m state --state ESTABLISHED,RELATED -j ACC

          # + accept udp, ...
          done

          (syntaxe a revoir et attention sens dport/sport)

          Bonne journée !
          1. bonjour ,
            merci marc , j'essais de comprendre , mais je suis ni doué pour le bash et ni sur iptables

            il me faudrait un exemple concrés (si possibles , bien sur)

            comme m'avais fait lami20j qui etait parfait
            bonne journée
            1. Modérateur
              avec la variante de marc tu n'est pas obligé de taper la même ligne plusieurs fois
              en revanche si tu veux avoir les règles une par une voici un exemple

              à savoir que si tu interdit l'accès sur le ports 80 on ne peux plus accéder à web
              et tu sur de vouloir faire ça?
              ce n'est pas plutôt l'intêret d'interdire l'access à certains sites?

              il faut voir aussi la politique adoptée
              - interdire tout et laisser accès à certains ports
              - accepter tout et interdire l'accès à certains ports
              #!/bin/bash
              iptables -F
              iptables -X
              iptables -P INPUT   DROP
              iptables -P OUTPUT  DROP
              iptables -P FORWARD DROP
              
              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
              
              iptables -t mangle -F
              iptables -t mangle -X
              iptables -t mangle -P PREROUTING    ACCEPT
              iptables -t mangle -P INPUT         ACCEPT
              iptables -t mangle -P OUTPUT        ACCEPT
              iptables -t mangle -P FORWARD       ACCEPT
              iptables -t mangle -P POSTROUTING   ACCEPT
              
              iptables -A INPUT -i lo -s '0.0.0.0/0' -d '0.0.0.0/0' -j ACCEPT
              iptables -A OUTPUT -o lo -s '0.0.0.0/0' -d '0.0.0.0/0' -j ACCEPT
              
              iptables -A INPUT -i eth0 -d x.x.x.x -m state --state ESTABLISHED,RELATED -j ACCEPT
              iptables -A OUTPUT -o eth0 -m state --state ! INVALID -j ACCEPT
              
              echo 1 > /proc/sys/net/ipv4/ip_forward
              
              iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 192.168.1.20
              #
              ##Pour la premiere carte vers eth0
              iptables -A FORWARD -o eth1 -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
              iptables -A FORWARD -i eth1 -o eth0 --dport 80 -j DROP
              iptables -A FORWARD -i eth1 -o eth0 --dport 21 -j DROP
              iptables -A FORWARD -i eth1 -o eth0 --dport 443 -j DROP
              iptables -A FORWARD -i eth1 -o eth0 -m state --state ! INVALID -j ACCEPT
              #
              ##Pour la seconde carte vers eth0
              iptables -A FORWARD -o eth2 -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
              iptables -A FORWARD -i eth2 -o eth0 --dport 80 -j DROP
              iptables -A FORWARD -i eth2 -o eth0 --dport 21 -j DROP
              iptables -A FORWARD -i eth2 -o eth0 --dport 443 -j DROP
              iptables -A FORWARD -i eth2 -o eth0 -m state --state ! INVALID -j ACCEPT
              #
              ## ssh
              iptables -A INPUT -p tcp -m tcp -s 192.168.223.42 --dport 22 -j ACCEPT
              
              1. je vais essayé d'etre clair pour ma strategie

                tous les ports sont fermés pour eth1 et eth2 vers eth0 , sauf que
                l' on autorise , une fois que sur eth1 et eth2 soit connecté , les ports ftp(21),http(80), https(443), outlook(j'me rappel plus les ports),msn et puis c'est tout
                je le ferais ligne par ligne , c'est plus parlant pour moi , surtout si je doit en mettre d'autre

                et ensuite ouvrir un port 4662 sur eth0
                là aussi ligne par ligne , car je prendrais l'exemple pour en faire d'autre (ligne bien sur)

                voila , en d'autre termes je n'autorise pas eth1 et eth2 à mettre p2P
                et j'autorise le serveur à y aller

                merci

                ps - peut etre en mp
                1. Modérateur
                  Qui a le droit d'admin sur les machines de ton LAN à part toi?
                  1. Modérateur
                    Alors pourquoi tu te complique la vie?! :-))

                    si tu ne veux pas P2P alors tu n'as qu'à désinstaller les logiciels ou ne pas installer
                    les machines de ton LAN ont quoi comme OS?!
                    1. j'aime bien me compliquer la vie ,
                      j'plaisante
                      je n'ai pas acces aux autres postes , je ne suis que le mec qui autorise ou non , et je prefere gerer le serveur que les postes qui s'y connectent, pour garder une bande passante "correcte" , et faire des users et groups sur m--key pour ceux qui me demanderai pourquoi il ne peuvent pas faire marcher mumule

                      je saurais pas non plus quel OS ils ont je leur donne uniquement le gateway , l'ip et masque , dns
                      1. Modérateur
                        voila , en d'autre termes je n'autorise pas eth1 et eth2 à mettre p2P

                        je pense que tu le sais qu'on peut changer le port dans les logiciels P2P, donc si 4662 ne marchera pas, ils vont configurer un autre port
                        as-tu déjà pensé?
                        1. si je mets que
                          tous les ports sont fermés pour eth1 et eth2 vers eth0 , sauf que
                          l' on autorise , une fois que sur eth1 et eth2 soit connecté , les ports ftp(21),http(80), https(443), outlook(j'me rappel plus les ports),msn et puis c'est tout


                          le 4662 ne sert que pour le serveur
                          1. Modérateur
                            alors comment fermer les ports sur eth1 et eth2 pour qu'il ne passe que 21,80,443 etc.. les principaux

                            alors désolé, je n'ai pas vu le mot que et c'était suffisant pour inverser :-))

                            ok, je vais voir ça :-))
                        2. Modérateur
                          essaie ça (je n'ai pas testé chez moi)
                          #!/bin/bash
                          iptables -F
                          iptables -X
                          iptables -P INPUT   DROP
                          iptables -P OUTPUT  DROP
                          iptables -P FORWARD DROP
                          
                          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
                          
                          iptables -t mangle -F
                          iptables -t mangle -X
                          iptables -t mangle -P PREROUTING    ACCEPT
                          iptables -t mangle -P INPUT         ACCEPT
                          iptables -t mangle -P OUTPUT        ACCEPT
                          iptables -t mangle -P FORWARD       ACCEPT
                          iptables -t mangle -P POSTROUTING   ACCEPT
                          
                          iptables -A INPUT -i lo -s '0.0.0.0/0' -d '0.0.0.0/0' -j ACCEPT
                          iptables -A OUTPUT -o lo -s '0.0.0.0/0' -d '0.0.0.0/0' -j ACCEPT
                          
                          iptables -A INPUT -i eth0 -d x.x.x.x -m state --state ESTABLISHED,RELATED -j ACCEPT
                          iptables -A OUTPUT -o eth0 -m state --state ! INVALID -j ACCEPT
                          
                          echo 1 > /proc/sys/net/ipv4/ip_forward
                          
                          iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 192.168.1.20
                          #
                          ##Pour la premiere carte vers eth0
                          iptables -A FORWARD -o eth1 -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
                          iptables -A FORWARD -i eth1 -o eth0 --dport 80 -j ACCEPT
                          iptables -A FORWARD -i eth1 -o eth0 --dport 20:21 -j ACCEPT
                          iptables -A FORWARD -i eth1 -o eth0 --dport 443 -j ACCEPT
                          iptables -A FORWARD -i eth1 -o eth0 -j DROP
                          #
                          ##Pour la seconde carte vers eth0
                          iptables -A FORWARD -o eth2 -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
                          iptables -A FORWARD -i eth2 -o eth0 --dport 80 -j ACCEPT
                          iptables -A FORWARD -i eth2 -o eth0 --dport 20:21 -j ACCEPT
                          iptables -A FORWARD -i eth2 -o eth0 --dport 443 -j ACCEPT
                          iptables -A FORWARD -i eth2 -o eth0 -j DROP
                          #
                          ## ssh
                          iptables -A INPUT -p tcp -m tcp -s 192.168.223.42 --dport 22 -j ACCEPT
                          
                          1. bonjour ,
                            merci pour le script et la rapidité,
                            j'ai pas eu , encore ,le temps d'essayer , y a du monde chez moi
                            j'ai juste jeté un oeil
                            je le test dés que j'ai un moment "calme"
                            juste que je n'ai pas vu l'ouverture du port 4662
                            est ce volontaire ou un oubli ?

                            merci encore
                            @+
                            1. Modérateur
                              le 4662 ne sert que pour le serveur
                              non, ce n'est pas un oublie, mais ce n'est pas nécessaire de créer une règle pour ça
                              le server a déjà accès par tout (voir cette règle dans le script)
                              iptables -A OUTPUT -o eth0 -m state --state ! INVALID -j ACCEPT
                              1. bonjour
                                merci pour script ça fonctionne , sauf
                                le 4662 que me met en Lo ID ; malgré l'ouverture du port sur la neufbox

                                aurai tu une idée d'où ça vient ?

                                merci
                                1. oui , j'avais deja lu , et je m'en suis meme servi pour le reglage de ma box
                                  ils disent bien
                                  Pour y remédier, il est nécessaire d'ouvrir les ports 4662 TCP, 4672 UDP, 4661 TCP et 4665 UDP sur le pare-feu (firewall) ! Attention, si vous avez une "box" (Livebox, Freebox, 9box etc ....), celle-ci dispose aussi d'un pare-feu. 


                                  le
                                  Attention, si vous avez une "box" (Livebox, Freebox, 9box etc ....), celle-ci dispose aussi d'un pare-feu.
                                  est deja fait
                                  • 1
                                  • 2
                                  • 3