• Serveurs
  • Chaine PREROUTING iptables dans la table nat

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…