• Serveurs
  • Chaine PREROUTING iptables dans la table nat

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…