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 :

  1. 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.
  1. 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.
  1. 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
}
  1. Rendre le script exécutable :
sudo chmod +x /usr/local/bin/iptables-rules.sh

    4.
  1. 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.
  1. 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

  1. 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