[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

    0
    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

      @+
      0
      1. Modérateur
        de rien :-)

        bonne continuation
        0
        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
          0
          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 !
            0
            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
              0
              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
                
                0
                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
                  0
                  1. Modérateur
                    Qui a le droit d'admin sur les machines de ton LAN à part toi?
                    0
                    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?!
                      0
                      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
                        0
                        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é?
                          0
                          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
                            0
                            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 :-))
                              0
                          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
                            
                            0
                            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
                              @+
                              0
                              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
                                0
                                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
                                  0
                                  1. Modérateur
                                    Salut,

                                    regarde ici emule lowid
                                    0
                                    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
                                      0
                                      • 1
                                      • 2
                                      • 3