• Serveurs
  • Chaine PREROUTING iptables dans la table nat

Salut, il faut que tu mettes une destination, pour l'instant tu ne fais que les filtrer (sans règle). Soit ta destination est locale et tu ne mets alors qu'un port soit elle est distante (VPN/Tor/etc) et tu mets ip:port.

Quel est l'objectif de ton script ? Ou du moins de cette règle ?

    Aerya
    merci pour la réponse super rapide 🙂

    L'idée c'est de sécuriser* ma machine hôte tout en utilisant docker.
    Le soucis c'est que si je flush les règles iptables, ca efface les redirections docker, et je suis obligé de redémarrer le service pour remettre docker en place.

    Pour le script, je partait sur le fonctionnement suivant :
    - une chaine utilisateur au dessus de la chaine docker,
    - le script applique les règles ou les efface.
    - tester les règles sans et appliquer l'ancienne configuration après 30 sec.

    (**)Par exemple sur mon ancienne machine je limitais le nombre de connections par ip sur SSH et HTTP. Je suis curieux de savoir s'il y a des bonnes pratiques de sécurisation de la machine hôte docker autre que :
    - mise a jour régulière
    - vérifier image docker et limiter les privilèges
    - sécuriser SSH
    - supprimer les applications inutiles
    - restreindre les droits des applications

    voici mon ancien script iptables avec LXC mais incompatible avec docker : https://paste.mondedie.fr/?f6d8fddd0edae875#fVZnQRqAQOrch1oOD7j+FMsCd961VVBo1wi7nE+J9w4=

      BarbeRousse
      Finalement j'ai refais exactement la même manipulation ce matin et ça fonctionne... Je ne comprends pas ce qui s'est passé. Bref je reviendrais sur ce topique poster mon script iptables une fois terminé.

      Mais une question reste en suspend : comment faites vous pour protéger la machine hôte d'un système Docker ? Est-il nécessaire de mettre en place des règles iptables ?

      Merci 😁

      J'ai pas mal bossé sur cette problématique et ai trouvé deux solutions:
      - Un script iptables qui est exécuté à chaque up -det qui recréé autant que possible les chaines docker originales.
      - Ne rien bloquer en output.

      Pour préciser : Docker gère de base ces propres règles netfilter. C'est nécessaire à son bon fonctionnement.
      Il est possible de lui dire de ne pas toucher à netfilter, mais là, il faut faire soit même le job (ma première solution).
      C'est franchement galère dès qu'on a plus de 3-4 containers et qu'on touche souvent à son serveur.

      Sinon, on peut aussi laisser docker vivre sa vie avec netfilter et ne travailler que sur les entrées/sorties.
      Vu la destination de mon serveur et que je suis le seul à m'y connecter au niveau système, j'ai personnellement choisi cette option:

      # Set the ports you need to be open :
      PORT_OPEN[0]=80     # HTTP
      PORT_OPEN[1]=443    # HTTPS
      PORT_OPEN[2]=53     # DNS
      PORT_OPEN[3]=913    # OpenVPN
      PORT_OPEN[4]=25     # SMTP
      PORT_OPEN[5]=587    # SMTP SARTTLS
      PORT_OPEN[6]=993    # IMAPS SSL/TLS
      PORT_OPEN[7]=4190   # Sieve SARTTLS
      PORT_OPEN[8]=22     # SSH
      
      # Base iptables rules :
      iptables -F                                                              # Flush existing rules.
      iptables -X                                                              # Delete user defined rules.
      iptables -P INPUT DROP                                                   # Drop all input connections.
      iptables -P OUTPUT ACCEPT                                                  # Drop all output connections.
      iptables -P FORWARD DROP                                                 # Drop all forward connections.
      iptables -A INPUT -i lo -j ACCEPT                                        # Allow input on loopback.
      iptables -A OUTPUT -o lo -j ACCEPT                                       # Allow input on loopback.
      iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT   # Don't break established connections.
      iptables -A INPUT -p icmp -j ACCEPT                                      # Allow ping request
      
      for i in "${PORT_OPEN[@]}"; do
        iptables -A INPUT -p tcp --dport $i -j ACCEPT                          # Set specified rules.
      done
      
      iptables -A INPUT -j DROP                                                # Drop anything else
      
      netfilter-persistent save         # Save rules.
      netfilter-persistent reload       # Reload rules.
      
      systemctl stop docker
      systemctl start docker

      Évidemment, il convient de redémarrer docker après application afin qu'il recréé ces propres règles.

        zer super merci pour la réponse.
        Je mettais mon script dans /etc/network/if-pre-up/

        Dès que j'ai fini je le posterai demain ici avec son mode d'utilisation.

        Le but du script est de fonctionner avec Docker qui gère lui même ses propres règles.

        comme promis voici le script iptables. il est compatible avec docker, il faut le mettre dans le repertoire /etc/network/if-pre-up.d/
        la fonction i permet d'ajouter une regle ipv4, i6 une règle ipv6.
        script.sh clear
        permet de nettoyer les règles générés pas le scripts sans modifier les règles dockers

        script.sh stop
        effaces toutes les règles

        script.sh start (ou script.sh sans argument)
        installe toutes les règles.

        script.sh test (effectue une sauvegarde de la configuration actuelle, puis applique les règles du script, et restaure la config précédente après 30 sec)

        #!/bin/bash
        IEXT=enp4s0
        RESEAU_LOCAL="127.0.0.0/24"
        IPT=/sbin/iptables
        IPT6=/sbin/ip6tables
        
        ### FONCTIONS
        
        # Definir les règles dans cette fonction
        fw_start() {
        # Default policy
        i -P INPUT DROP
        i -P FORWARD ACCEPT
        i -P OUTPUT ACCEPT
        i6 -P INPUT DROP
        i6 -P FORWARD ACCEPT
        i6 -P OUTPUT ACCEPT
        
        #autoriser loopback
        i -t filter -A USER-INPUT -i lo -j ACCEPT
        i -t filter -A USER-OUTPUT -o lo -j ACCEPT
        
        #Ne pas casser les connexions etablies
        i -A USER-INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
        
        #allow ping
        i -t filter -A USER-INPUT -p icmp  -m limit --limit 12/s --limit-burst 3 -j ACCEPT
        i -t filter -A USER-INPUT -p igmp -s $RESEAU_LOCAL -j ACCEPT
        i -t filter -A USER-INPUT -s $RESEAU_LOCAL -m pkttype --pkt-type multicast -j ACCEPT
        i -t filter -A USER-INPUT -m pkttype --pkt-type broadcast -j ACCEPT
        
        #SSH
        i -t filter -A USER-INPUT -p tcp --dport 22 -j ACCEPT -m comment --comment "SSH"
        i6 -t filter -A USER-INPUT -p tcp --dport 22 -j ACCEPT -m comment --comment "SSH"
        
        #http/https
        i -t filter -A USER-INPUT -p tcp --dport 80 -j ACCEPT -m comment --comment "HTTP"
        i -t filter -A USER-INPUT -p tcp --dport 443 -j ACCEPT -m comment --comment "HTTPS"
        i6 -t filter -A USER-INPUT -p tcp --dport 80 -j ACCEPT -m comment --comment "HTTP"
        i6 -t filter -A USER-INPUT -p tcp --dport 443 -j ACCEPT -m comment --comment "HTTPS"
        
        #btsync
        #btsync port de communication
        i -t filter -A USER-INPUT -p tcp --dport 18899 -i $IEXT -j ACCEPT -m comment --comment "btsync externe TCP sur $IEXT"
        i -t filter -A USER-INPUT -p udp --dport 18899 -i $IEXT -j ACCEPT -m comment --comment "btsync externe UDP sur $IEXT"
        #btsync port local discovery
        i -t filter -A USER-INPUT -p tcp --dport 3838 -s $RESEAU_LOCAL -j ACCEPT -m comment --comment "btsync local port discovery"
        i -t filter -A USER-INPUT -p udp --dport 3838 -s $RESEAU_LOCAL -j ACCEPT -m comment --comment "btsync local port discovery"
        
        #transmission
        i -t filter -A USER-INPUT -p tcp --dport 37988 -j ACCEPT -m comment --comment "Transmission"
        i -t filter -A USER-INPUT -p udp --dport 37988 -j ACCEPT -m comment --comment "Transmission"
        i6 -t filter -A USER-INPUT -p tcp --dport 37988 -j ACCEPT -m comment --comment "Transmission"
        i6 -t filter -A USER-INPUT -p udp --dport 37988 -j ACCEPT -m comment --comment "Transmission"
        
        #log les paquets non acceptés et les rejette proprement
        i -t filter -A USER-INPUT -j LOG -m limit --limit 12/min --limit-burst 12 --log-prefix "DEFAULT_DROP_INPUT: " -m comment --comment "Log default reject"
        i -t filter -A USER-INPUT -p tcp -j REJECT --reject-with tcp-reset -m comment --comment "reject default tcp"
        i -t filter -A USER-INPUT -j REJECT -m comment --comment "reject default"
        i6 -t filter -A USER-INPUT -j LOG -m limit --limit 12/min --limit-burst 12 --log-prefix "DEFAULT_DROP_INPUT: " -m comment --comment "Log default reject"
        i6 -t filter -A USER-INPUT -p tcp -j REJECT --reject-with tcp-reset -m comment --comment "reject default tcp"
        i6 -t filter -A USER-INPUT -j REJECT -m comment --comment "reject default"
        }
        
        #efface toutes les règles iptables
        fw_stop() {
        i -t filter -F
        i -t filter -X
        i -t nat -F
        i -t nat -X
        i -t mangle -F
        i -t mangle -X
        i -P INPUT ACCEPT
        i -P FORWARD ACCEPT
        i -P OUTPUT ACCEPT
        
        i6 -t filter -F
        i6 -t nat -F
        i6 -t mangle -F
        i6 -t filter -X
        i6 -t nat -X
        i6 -t mangle -X
        i6 -P INPUT ACCEPT
        i6 -P FORWARD ACCEPT
        i6 -P OUTPUT ACCEPT
        }
        # log to logger :
        readonly SCRIPT_NAME="$(basename -- $0)"
        log() {
        echo -en "\033[1m"
        if [[ -t 0 ]]; then
                logger -s -p user.notice -t "$SCRIPT_NAME" -- "$@"
        else
                cat | logger -s -p user.notice -t "$SCRIPT_NAME" -- "$@"
        fi
        echo -en "\033[0m"
        }
        err() {
        echo -en "\033[31;1m"
        if [[ -t 0 ]]; then
                logger -s -p user.error -t "$SCRIPT_NAME" -- "$@" >&2
        else
                cat | logger -s -p user.error -t "$SCRIPT_NAME" -- "$@" >&2
        fi
        echo -en "\033[0m"
        }
        
        i() {
        [[ $1 == 'NOOUT' ]] && local NOOUT=true && shift
        
        msg=$($IPT "$@" 2>&1)
        if [[ $? -eq 0 ]];then
                log "[OK] iptables $@"
        else
                if [[ $NOOUT != 'true' ]]; then
                  err "[err] iptables $@"
                  err "[err] $msg"
                  n=$(( $n + 1 ))
                fi
        fi
        }
        
        i6() {
        [[ $1 == 'NOOUT' ]] && local NOOUT=true && shift
        
        msg=$($IPT6 "$@" 2>&1)
        if [[ $? -eq 0 ]];then
                log "[OK] ip6tables $@"
        else
                if [[ $NOOUT != 'true' ]]; then
                  err "[err] ip6tables $@"
                  err "[err] $msg"
                  n=$(( $n + 1 ))
                fi
        fi
        }
        
        #prepare les chaines utilisateurs vides
        fw_clear() {
        #ipv4
        i -P INPUT ACCEPT
        i -P FORWARD ACCEPT
        i -P OUTPUT ACCEPT
        
        i NOOUT -t filter -N USER-INPUT
        i NOOUT -t filter -N USER-OUTPUT
        i NOOUT -t filter -N USER-FORWARD
        
        #eviter doublon
        i NOOUT -t filter -D INPUT -j USER-INPUT
        i NOOUT -t filter -D FORWARD -j USER-FORWARD
        i NOOUT -t filter -D OUTPUT -j USER-OUTPUT
        
        i -t filter -F USER-INPUT
        i -t filter -F USER-OUTPUT
        i -t filter -F USER-FORWARD
        
        i -t filter -I INPUT -j USER-INPUT
        i -t filter -I FORWARD -j USER-FORWARD
        i -t filter -I OUTPUT -j USER-OUTPUT
        
        i NOOUT -t nat -N USER-PREROUTING
        i NOOUT -t nat -N USER-POSTROUTING
        i -t nat -D PREROUTING -j USER-PREROUTING
        i -t nat -D POSTROUTING -j USER-POSTROUTING
        i -t nat -I PREROUTING -j USER-PREROUTING
        i -t nat -I POSTROUTING -j USER-POSTROUTING
        i -t nat -F USER-PREROUTING
        i -t nat -F USER-POSTROUTING
        
        
        #ipv6
        i6 -P INPUT ACCEPT
        i6 -P FORWARD ACCEPT
        i6 -P OUTPUT ACCEPT
        
        i6 NOOUT -t filter -N USER-INPUT
        i6 NOOUT -t filter -N USER-OUTPUT
        i6 NOOUT -t filter -N USER-FORWARD
        
        #eviter doublon
        i6 NOOUT -t filter -D INPUT -j USER-INPUT
        i6 NOOUT -t filter -D FORWARD -j USER-FORWARD
        i6 NOOUT -t filter -D OUTPUT -j USER-OUTPUT
        
        i6 -t filter -F USER-INPUT
        i6 -t filter -F USER-OUTPUT
        i6 -t filter -F USER-FORWARD
        
        i6 -t filter -I INPUT -j USER-INPUT
        i6 -t filter -I FORWARD -j USER-FORWARD
        i6 -t filter -I OUTPUT -j USER-OUTPUT
        
        i6 NOOUT -t nat -N USER-PREROUTING
        i6 NOOUT -t nat -N USER-POSTROUTING
        
        i6 -t nat -D PREROUTING -j USER-PREROUTING
        i6 -t nat -D POSTROUTING -j USER-POSTROUTING
        i6 -t nat -I PREROUTING -j USER-PREROUTING
        i6 -t nat -I POSTROUTING -j USER-POSTROUTING
        
        i6 -t nat -F USER-PREROUTING
        i6 -t nat -F USER-POSTROUTING
        }
        
        fw_save() {
        /sbin/iptables-save > /etc/iptables.backup
        /sbin/ip6tables-save > /etc/ip6tables.backup
        }
        
        fw_restore() {
        if [ -e /etc/iptables.backup ]; then
         /sbin/iptables-restore < /etc/iptables.backup
        fi
        
        if [ -e /etc/ip6tables.backup ]; then
         /sbin/ip6tables-restore < /etc/ip6tables.backup
        fi
        }
        #test après 30 secondes restore la version précédente.
        fw_test() {
        fw-save
        sleep 30 && log "restauration des règles précédentes" && fw_restore &
        fw_start
        }
        
        n=0
        #demerrage script si pas abscence d'argument, permet lancement automatique au demarrage
        if [[ $# -eq 0 ]]; then
         log "demarrage firewall"
         fw_clear
         fw_start
         log "fini avec $n erreurs"
         exit 0
        fi
        
        case "$1" in
        start|restart)
         log -n "Starting firewall.."
         fw_clear
         fw_start
         log "fini avec $n erreurs"
         ;;
        stop)
         log -n "etes-vous sur ? vous effacer toutes les regèles et ouvrez tous les ports? y pour oui"
         read yesno
                if [[ $y == "y" ]]; then
                        fw_stop
                fi
         log "fini avec $n erreurs"
         ;;
        clear)
         log -n "Clearing firewall rules.."
         fw_clear
         log "done."
         ;;
        test)
         log -n "Test Firewall rules..."
         fw_test
         log -n "Previous configuration will be restore in 30 seconds"
         ;;
        *)
         log "Usage: $0 {start|stop|restart|clear|test}"
         exit 1
         ;;
        esac
        
        exit 0

          BarbeRousse Joli, je testerai ça.
          Tiens, si tu veux éviter d'avoir à spécifier l'interface wan, tu peux utiliser ça :
          IEXT=$(route | grep '^default' | grep -o '[^ ]*$')

          Alors humblement je t'avoue mes faibles competences concernant iptables et les scripts. Du coup en poussant les tests un peu plus loin la fonction

          fw_restore() {
          if [ -e /etc/iptables.backup ]; then
           /sbin/iptables-restore < /etc/iptables.backup
          fi
          }

          ne fonctionne pas chez moi. Le ficher /etc/iptables.backup ne se crée pas lorsque je fais "iptables.sh test"

          Autre soucis, lorsque je fais un nmap les ports 8080 (sabnzbd) et 8081(sonarr) restent ouvert en tcp-proxy.

          En fait je n'ai aucune règles concernant ces ports, et à vrai dire pour tester je n'ai ouvert que le port SSH et rien d'autre pour l'instant.

          C'est vrai que j'ai des reverses proxy pour ces 2 ports mais j'en ai aussi pour jackett, radarr etc en proxy et cela n'apparaissent pas ouverts.

          Excuse mon coté nob mais je ne maitrise pas encore le sujet 😞

            laster13
            La fonction fw_restore n'est pas sensée créer de fichier. Elle utilise le fichier créé par la fonction fw_save pour restaurer les règles précédentes.

            Pour la commande nmap il faut la faire depuis une autre machine. Normalement les ports sont bloqués avec une réponse "reject" et non un "drop". Je trouve ce mode de fonctionnement plus propre.

            Sinon tu peux poster le résultat de
            iptables -L et iptables -t nat -L je vais voir si c'est le script applique bien les règles 😙

              BarbeRousse

              Edit : en regardant ce que je te poste je vois que les regles sont en triple, pourtant ce n'est pas le cas dans le fichier iptables 😰

              Alors iptables -L

              Chain PREROUTING (policy ACCEPT)
              target     prot opt source               destination
              USER-PREROUTING  all  --  anywhere             anywhere
              DOCKER     all  --  anywhere             anywhere             ADDRTYPE match dst-type LOCAL
              
              Chain INPUT (policy ACCEPT)
              target     prot opt source               destination
              
              Chain OUTPUT (policy ACCEPT)
              target     prot opt source               destination
              DOCKER     all  --  anywhere            !loopback/8           ADDRTYPE match dst-type LOCAL
              
              Chain POSTROUTING (policy ACCEPT)
              target     prot opt source               destination
              USER-POSTROUTING  all  --  anywhere             anywhere
              MASQUERADE  all  --  172.17.0.0/16        anywhere
              MASQUERADE  all  --  172.18.0.0/16        anywhere
              MASQUERADE  all  --  10.8.0.0/24          anywhere
              MASQUERADE  tcp  --  172.18.0.2           172.18.0.2           tcp dpt:8888
              MASQUERADE  tcp  --  172.18.0.3           172.18.0.3           tcp dpt:11334
              MASQUERADE  tcp  --  172.18.0.3           172.18.0.3           tcp dpt:sieve
              MASQUERADE  tcp  --  172.18.0.3           172.18.0.3           tcp dpt:imaps
              MASQUERADE  tcp  --  172.18.0.3           172.18.0.3           tcp dpt:submission
              MASQUERADE  tcp  --  172.18.0.3           172.18.0.3           tcp dpt:imap2
              MASQUERADE  tcp  --  172.18.0.3           172.18.0.3           tcp dpt:smtp
              MASQUERADE  tcp  --  172.18.0.5           172.18.0.5           tcp dpt:8888
              MASQUERADE  tcp  --  172.18.0.7           172.18.0.7           tcp dpt:domain
              MASQUERADE  udp  --  172.18.0.7           172.18.0.7           udp dpt:domain
              
              Chain DOCKER (2 references)
              target     prot opt source               destination
              RETURN     all  --  anywhere             anywhere
              RETURN     all  --  anywhere             anywhere
              DNAT       tcp  --  anywhere             localhost.localdomain  tcp dpt:8888 to:172.18.0.2:8888
              DNAT       tcp  --  anywhere             anywhere             tcp dpt:11334 to:172.18.0.3:11334
              DNAT       tcp  --  anywhere             anywhere             tcp dpt:sieve to:172.18.0.3:4190
              DNAT       tcp  --  anywhere             anywhere             tcp dpt:imaps to:172.18.0.3:993
              DNAT       tcp  --  anywhere             anywhere             tcp dpt:submission to:172.18.0.3:587
              DNAT       tcp  --  anywhere             anywhere             tcp dpt:imap2 to:172.18.0.3:143
              DNAT       tcp  --  anywhere             anywhere             tcp dpt:smtp to:172.18.0.3:25
              DNAT       tcp  --  anywhere             localhost.localdomain  tcp dpt:8889 to:172.18.0.5:8888
              DNAT       tcp  --  anywhere             mail.lastharo.com    tcp dpt:domain to:172.18.0.7:53
              DNAT       udp  --  anywhere             mail.lastharo.com    udp dpt:domain to:172.18.0.7:53
              
              Chain USER-POSTROUTING (1 references)
              target     prot opt source               destination
              
              Chain USER-PREROUTING (1 references)
              target     prot opt source               destination
              root@mail:/etc/network/if-pre-up.d# iptables -L
              Chain INPUT (policy DROP)
              target     prot opt source               destination
              LOG        all  --  vss-8a-6k.fr.eu      anywhere             limit: avg 3/min burst 5 LOG level debug prefix "Portsentry: dropping: "
              DROP       all  --  vss-8a-6k.fr.eu      anywhere
              LOG        all  --  vss-8b-6k.fr.eu      anywhere             limit: avg 3/min burst 5 LOG level debug prefix "Portsentry: dropping: "
              DROP       all  --  vss-8b-6k.fr.eu      anywhere
              USER-INPUT  all  --  anywhere             anywhere
              LOG        all  --  ip243.ip-217-182-116.eu  anywhere             limit: avg 3/min burst 5 LOG level debug prefix "Portsentry: dropping: "
              DROP       all  --  ip243.ip-217-182-116.eu  anywhere
              LOG        all  --  1-174-92-13.dynamic-ip.hinet.net  anywhere             limit: avg 3/min burst 5 LOG level debug prefix "Portsentry: dropping: "
              DROP       all  --  1-174-92-13.dynamic-ip.hinet.net  anywhere
              LOG        all  --  80.67.14.78          anywhere             limit: avg 3/min burst 5 LOG level debug prefix "Portsentry: dropping: "
              DROP       all  --  80.67.14.78          anywhere
              ACCEPT     udp  --  anywhere             anywhere             udp dpt:openvpn
              
              Chain FORWARD (policy ACCEPT)
              target     prot opt source               destination
              USER-FORWARD  all  --  anywhere             anywhere
              DOCKER-USER  all  --  anywhere             anywhere
              DOCKER-ISOLATION-STAGE-1  all  --  anywhere             anywhere
              ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
              DOCKER     all  --  anywhere             anywhere
              ACCEPT     all  --  anywhere             anywhere
              ACCEPT     all  --  anywhere             anywhere
              ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
              DOCKER     all  --  anywhere             anywhere
              ACCEPT     all  --  anywhere             anywhere
              ACCEPT     all  --  anywhere             anywhere
              ACCEPT     all  --  10.8.0.0/24          anywhere
              ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
              
              Chain OUTPUT (policy ACCEPT)
              target     prot opt source               destination
              USER-OUTPUT  all  --  anywhere             anywhere
              
              Chain DOCKER (2 references)
              target     prot opt source               destination
              ACCEPT     tcp  --  anywhere             172.18.0.2           tcp dpt:8888
              ACCEPT     tcp  --  anywhere             172.18.0.3           tcp dpt:11334
              ACCEPT     tcp  --  anywhere             172.18.0.3           tcp dpt:sieve
              ACCEPT     tcp  --  anywhere             172.18.0.3           tcp dpt:imaps
              ACCEPT     tcp  --  anywhere             172.18.0.3           tcp dpt:submission
              ACCEPT     tcp  --  anywhere             172.18.0.3           tcp dpt:imap2
              ACCEPT     tcp  --  anywhere             172.18.0.3           tcp dpt:smtp
              ACCEPT     tcp  --  anywhere             172.18.0.5           tcp dpt:8888
              ACCEPT     tcp  --  anywhere             172.18.0.7           tcp dpt:domain
              ACCEPT     udp  --  anywhere             172.18.0.7           udp dpt:domain
              
              Chain DOCKER-ISOLATION-STAGE-1 (1 references)
              target     prot opt source               destination
              DOCKER-ISOLATION-STAGE-2  all  --  anywhere             anywhere
              DOCKER-ISOLATION-STAGE-2  all  --  anywhere             anywhere
              RETURN     all  --  anywhere             anywhere
              
              Chain DOCKER-ISOLATION-STAGE-2 (2 references)
              target     prot opt source               destination
              DROP       all  --  anywhere             anywhere
              DROP       all  --  anywhere             anywhere
              RETURN     all  --  anywhere             anywhere
              
              Chain DOCKER-USER (1 references)
              target     prot opt source               destination
              RETURN     all  --  anywhere             anywhere
              
              Chain USER-FORWARD (1 references)
              target     prot opt source               destination
              
              Chain USER-INPUT (1 references)
              target     prot opt source               destination
              ACCEPT     all  --  anywhere             anywhere
              ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
              ACCEPT     icmp --  anywhere             anywhere             limit: avg 12/sec burst 3
              ACCEPT     igmp --  loopback/24          anywhere
              ACCEPT     all  --  loopback/24          anywhere             PKTTYPE = multicast
              ACCEPT     all  --  anywhere             anywhere             PKTTYPE = broadcast
              ACCEPT     tcp  -- X.X.X.X.rev.numericable.fr  anywhere             tcp dpt:642 /* SSH */
              ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:32400 /* Plex */
              ACCEPT     udp  --  anywhere             anywhere             udp dpt:domain /* Serveur NSD */
              ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:domain /* Serveur NSD */
              ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:smtp /* Mail */
              ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:imaps /* Mail */
              ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:urd /* Mail */
              ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:submission /* Mail */
              ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:sieve /* Mail */
              ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http /* HTTP */
              ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:https /* HTTPS */
              ACCEPT     tcp  --  anywhere             anywhere             tcp dpts:45000:65000 /* rtorrent */
              LOG        all  --  anywhere             anywhere             limit: avg 12/min burst 12 /* Log default reject */ LOG level warning prefix "DEFAULT_DRO                                                        P_INPUT: "
              REJECT     tcp  --  anywhere             anywhere             /* reject default tcp */ reject-with tcp-reset
              REJECT     all  --  anywhere             anywhere             /* reject default */ reject-with icmp-port-unreachable
              ACCEPT     all  --  anywhere             anywhere
              ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
              ACCEPT     icmp --  anywhere             anywhere             limit: avg 12/sec burst 3
              ACCEPT     igmp --  loopback/24          anywhere
              ACCEPT     all  --  loopback/24          anywhere             PKTTYPE = multicast
              ACCEPT     all  --  anywhere             anywhere             PKTTYPE = broadcast
              ACCEPT     tcp  -- X.X.X.X.rev.numericable.fr  anywhere             tcp dpt:642 /* SSH */
              ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:32400 /* Plex */
              ACCEPT     udp  --  anywhere             anywhere             udp dpt:domain /* Serveur NSD */
              ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:domain /* Serveur NSD */
              ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:smtp /* Mail */
              ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:imaps /* Mail */
              ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:urd /* Mail */
              ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:submission /* Mail */
              ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:sieve /* Mail */
              ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http /* HTTP */
              ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:https /* HTTPS */
              ACCEPT     tcp  --  anywhere             anywhere             tcp dpts:45000:65000 /* rtorrent */
              LOG        all  --  anywhere             anywhere             limit: avg 12/min burst 12 /* Log default reject */ LOG level warning prefix "DEFAULT_DRO                                                        P_INPUT: "
              REJECT     tcp  --  anywhere             anywhere             /* reject default tcp */ reject-with tcp-reset
              REJECT     all  --  anywhere             anywhere             /* reject default */ reject-with icmp-port-unreachable
              ACCEPT     all  --  anywhere             anywhere
              ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
              ACCEPT     icmp --  anywhere             anywhere             limit: avg 12/sec burst 3
              ACCEPT     igmp --  loopback/24          anywhere
              ACCEPT     all  --  loopback/24          anywhere             PKTTYPE = multicast
              ACCEPT     all  --  anywhere             anywhere             PKTTYPE = broadcast
              ACCEPT     tcp  -- X.X.X.X.rev.numericable.fr  anywhere             tcp dpt:642 /* SSH */
              ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:32400 /* Plex */
              ACCEPT     udp  --  anywhere             anywhere             udp dpt:domain /* Serveur NSD */
              ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:domain /* Serveur NSD */
              ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:smtp /* Mail */
              ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:imaps /* Mail */
              ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:urd /* Mail */
              ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:submission /* Mail */
              ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:sieve /* Mail */
              ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http /* HTTP */
              ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:https /* HTTPS */
              ACCEPT     tcp  --  anywhere             anywhere             tcp dpts:45000:65000 /* rtorrent */
              LOG        all  --  anywhere             anywhere             limit: avg 12/min burst 12 /* Log default reject */ LOG level warning prefix "DEFAULT_DRO                                                        P_INPUT: "
              REJECT     tcp  --  anywhere             anywhere             /* reject default tcp */ reject-with tcp-reset
              REJECT     all  --  anywhere             anywhere             /* reject default */ reject-with icmp-port-unreachable
              
              Chain USER-OUTPUT (1 references)
              target     prot opt source               destination
              ACCEPT     all  --  anywhere             anywhere
              ACCEPT     all  --  anywhere             anywhere
              ACCEPT     all  --  anywhere             anywhere
              

              iptables -t nat -l

              Chain PREROUTING (policy ACCEPT)
              target     prot opt source               destination
              USER-PREROUTING  all  --  anywhere             anywhere
              DOCKER     all  --  anywhere             anywhere             ADDRTYPE match dst-type LOCAL
              
              Chain INPUT (policy ACCEPT)
              target     prot opt source               destination
              
              Chain OUTPUT (policy ACCEPT)
              target     prot opt source               destination
              DOCKER     all  --  anywhere            !loopback/8           ADDRTYPE match dst-type LOCAL
              
              Chain POSTROUTING (policy ACCEPT)
              target     prot opt source               destination
              USER-POSTROUTING  all  --  anywhere             anywhere
              MASQUERADE  all  --  172.17.0.0/16        anywhere
              MASQUERADE  all  --  172.18.0.0/16        anywhere
              MASQUERADE  all  --  10.8.0.0/24          anywhere
              MASQUERADE  tcp  --  172.18.0.2           172.18.0.2           tcp dpt:8888
              MASQUERADE  tcp  --  172.18.0.3           172.18.0.3           tcp dpt:11334
              MASQUERADE  tcp  --  172.18.0.3           172.18.0.3           tcp dpt:sieve
              MASQUERADE  tcp  --  172.18.0.3           172.18.0.3           tcp dpt:imaps
              MASQUERADE  tcp  --  172.18.0.3           172.18.0.3           tcp dpt:submission
              MASQUERADE  tcp  --  172.18.0.3           172.18.0.3           tcp dpt:imap2
              MASQUERADE  tcp  --  172.18.0.3           172.18.0.3           tcp dpt:smtp
              MASQUERADE  tcp  --  172.18.0.5           172.18.0.5           tcp dpt:8888
              MASQUERADE  tcp  --  172.18.0.7           172.18.0.7           tcp dpt:domain
              MASQUERADE  udp  --  172.18.0.7           172.18.0.7           udp dpt:domain
              
              Chain DOCKER (2 references)
              target     prot opt source               destination
              RETURN     all  --  anywhere             anywhere
              RETURN     all  --  anywhere             anywhere
              DNAT       tcp  --  anywhere             localhost.localdomain  tcp dpt:8888 to:172.18.0.2:8888
              DNAT       tcp  --  anywhere             anywhere             tcp dpt:11334 to:172.18.0.3:11334
              DNAT       tcp  --  anywhere             anywhere             tcp dpt:sieve to:172.18.0.3:4190
              DNAT       tcp  --  anywhere             anywhere             tcp dpt:imaps to:172.18.0.3:993
              DNAT       tcp  --  anywhere             anywhere             tcp dpt:submission to:172.18.0.3:587
              DNAT       tcp  --  anywhere             anywhere             tcp dpt:imap2 to:172.18.0.3:143
              DNAT       tcp  --  anywhere             anywhere             tcp dpt:smtp to:172.18.0.3:25
              DNAT       tcp  --  anywhere             localhost.localdomain  tcp dpt:8889 to:172.18.0.5:8888
              DNAT       tcp  --  anywhere             mail.domain.com    tcp dpt:domain to:172.18.0.7:53
              DNAT       udp  --  anywhere             mail.domain.com    udp dpt:domain to:172.18.0.7:53
              
              Chain USER-POSTROUTING (1 references)
              target     prot opt source               destination
              
              Chain USER-PREROUTING (1 references)
              target     prot opt source               destination

              Merci de ta réactivité et de ton aide

                laster13 c'est curieux ... Tu utilise quoi comme système. J'avoue que je n'ai pas essayé le script sur autre chose que du debian.

                Normalement, iptables -L ne devrait donner que les règles de la table filter. Et effectivement tu as des règles en double. Ce qui est encore plus bizarre c'est que dans la table input tu as des règles au dessus du USER-INPUT. bref je pense que dois avoir autre chose qui modifie les règles iptables les 😁.

                  BarbeRousse je suis sur debian 9. Les règles au début c est le drop portsentry.

                  J'avais installé le paquet iptables-persistent. Je vais le désinstaller.

                  Pour le reste je vais creuser et je ferai un retour.

                  Merci de ton avis

                  BarbeRousse Normalement les ports sont bloqués avec une réponse "reject" et non un "drop". Je trouve ce mode de fonctionnement plus propre.

                  Attention, les deux n'ont rien à voir. Le reject renvoie effectivement une réponse pour dire "Coucou, mais non merci: dégage". Le drop quand à lui ne renvoie pas de réponse du tout : il détruit le paquet purement et simplement.

                  Répondre…