Règles IPTables pour Docker
Par défaut, Docker autorise toutes les adresses IP externes à se connecter aux conteneurs ; pour restreindre l'accès à une seule IP ou à un réseau, il faut ajouter une règle dans la chaîne DOCKER-USER, située avant celles gérées par Docker 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).
Étapes pour appliquer les règles après le démarrage de Docker
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. Ajouter les règles dans le script :
Ajoutez vos règles personnalisées dans ce script. Par exemple :
#!/bin/bash
# D'abord, on autorise ce qui est né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 -I DOCKER-USER -i ens16 -p tcp --dport 9443 -s 133.33.333.343 -j ACCEPT
# Autoriser 443 et 80 à tout le monde
iptables -I DOCKER-USER -i ens16 -p tcp --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 ens16 -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. Rendre le script exécutable :
sudo chmod +x /usr/local/bin/iptables-rules.sh
4. Créer un service systemd pour exécuter ce script avant Docker :
Créez le fichier /etc/systemd/system/iptables-rules.service :
sudo nano /etc/systemd/system/iptables-rules.service
Contenu du fichier :
[Unit]
Description=Apply custom iptables rules
After=docker.service
[Service]
Type=oneshot
ExecStart=/usr/local/bin/iptables-rules.sh
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
5. Activer le service pour qu'il s'exécute au démarrage avant Docker :
sudo systemctl daemon-reload
sudo systemctl enable iptables-rules.service
6. (Re)démarrez le service système du pare-feu et Docker :
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