Passer au contenu principal

Règles IPTables pour Docker

Règles IPTables pour Docker

Par défaut, Docker autorise toutes les adresses IP externes sont autorisées à se connecter àaux Docker.conteneurs Pour; limiterpour restreindre l'accès aux conteneurs à une seule IP ou à un réseauréseau, entier,il vousfaut devez créer et placerajouter une règle avant celles utilisantdans la chaîne DOCKER-USER.

,

Docker gère automatiquement les règles IPTables pour garantir l'isolation du réseau et le bon fonctionnement des conteneurs. Lorsque Docker ajoute des règles IPTables, il utilise la chaîne DOCKER. Si vous devez ajouter des règles qui s'exécutentsituée avant celles degérées Docker, utilisez la chaîne DOCKER-USER et évitez de modifier directement les règles quepar Docker met en place dans la chaîne DOCKER, sans modifier directement ces dernières. Notez que les exemples concernent l’IPv4 : pour une infrastructure en IPv6, il convient d’appliquer des règles similaires avec ip6tables, afin de couvrir à la fois IPv4 (iptables) et IPv6 (ip6tables).

Pour

Étapes pour appliquer une règle IPTables sécurisant les connexionsrègles après le démarrage de Docker

au

1. démarrage, suivez ces étapes :

    Créer un script de démarrage :

    Créez un fichier script, par exemple /usr/local/bin/iptables-rules.sh. :

    sudo nano /usr/local/bin/iptables-rules.sh
    

      2.

      Ajouter lales commanderègles audans le script :

      VoiciAjoutez quelques exemples devos règles à ajouterpersonnalisées dans ce scriptscript. Par exemple :

        Autoriser le forwarding entre docker0 et votre interface principale (ex : eth0) :
        #!/bin/bash
        
        iptables# -AD'abord, FORWARDon -iautorise docker0ce -oqui eth0est -jnécessaire, ensuite on bloque tout le reste
        # Ordre important : les règles ACCEPT d'abord, puis la politique DROP à la fin
        
        # Autoriser 9443 seulement pour 133.33.333.343 
        iptables -A FORWARD -i eth0 -o docker0 -j ACCEPT
        
          Restreindre l'accès à un conteneur exposant le port 8080 à une seule IP :
          iptables -AI DOCKER-USER -i eth0ens16 -p tcp --dport 8080 !9443 -s 203.0.113.123133.33.333.343 -j DROPACCEPT
          
          
          #
            Autoriser uniquement443 unet réseau spécifique80 à accédertout àle tousmonde les ports Docker :
            iptables -AI DOCKER-USER -i eth0ens16 -sp 10.1.2.0/24tcp --dport 443 -j ACCEPT
            iptables -I DOCKER-USER -i ens16 -p tcp --dport 80 -j ACCEPT
            
            # Finalement, tout DROP pour le reste sur cette interface
            iptables -A DOCKER-USER -i eth0ens16 -j DROP
            
            # (Pour IPv6, mêmes règles si tu le souhaites)
            ip6tables -I DOCKER-USER -i ens16 -p tcp --dport 9443 -s 2001:db8::ip_ici -j ACCEPT
            ip6tables -I DOCKER-USER -i ens16 -p tcp --dport 443 -j ACCEPT
            ip6tables -I DOCKER-USER -i ens16 -p tcp --dport 80 -j ACCEPT
            ip6tables -A DOCKER-USER -i ens16 -j DROP
            

              3.

              Désactivez la gestion automatique des règles IPTables par Docker :

              Modifiez ou créez le fichier /etc/docker/daemon.json :

              sudo nano /etc/docker/daemon.json
              

              Mettez-y :

              {
                "iptables": false
              }
              
                Rendre le script exécutable :
                sudo chmod +x /usr/local/bin/iptables-rules.sh
                

                  4.

                  Créer un service systemd :

                  Créez un fichier de service systemd pour exécuter lece script auavant démarrageDocker :

                  Créez le fichier /etc/systemd/system/iptables-rules.service :

                  sudo nano /etc/systemd/system/iptables-rules.service
                  

                  AjoutezContenu ledu contenu suivantfichier :

                  [Unit]
                  Description=Apply custom IPTablesiptables rules
                  After=network.target docker.service
                  Requires=docker.service
                  
                  [Service]
                  Type=oneshot
                  ExecStart=/usr/local/bin/iptables-rules.sh
                  RemainAfterExit=yes
                  
                  [Install]
                  WantedBy=multi-user.target
                  

                    5.

                    Activer le service :

                    Activez le service pour qu'il s'exécute au démarrage avant Docker :

                    sudo systemctl daemon-reload
                    sudo systemctl enable iptables-rules.service
                    sudo systemctl start iptables-rules.service
                    

                    Si6. le script et(Re)démarrez le service sontsystème déjàdu lancés,pare-feu et que vous voulez fermer un nouveau port

                      Mettez à jour le script
                      sudo nano /usr/local/bin/iptables-rules.sh
                      

                      Ajoutez votre nouvelle règle, puis rechargez le service comme suitDocker :

                      sudo systemctl restart iptables-rules.service
                      sudo systemctl restart docker
                      

                      7. Pour tester la bonne application des règles, redémarrez le serveur puis vérifiez les logs des services pour vous assurer que tout fonctionne correctement :

                      sudo reboot
                      

                      Après le redémarrage, consultez les logs du service IPTables personnalisé et du service Docker :

                      sudo journalctl -u iptables-rules.service
                      sudo journalctl -u docker.service
                      

                      Documentation