Règles IPTables pour Docker
Par défaut, Docker autorise toutes les adresses IP externes à se connecter aux conteneurs ;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
# Autorisation explicite du trafic requis, puis blocage par défaut du reste.
# L'ordre des règles est crucial : règles ACCEPT en premier, politique DROP en dernier.
# Autoriser le trafic entrant sur le port TCP 9443 exclusivement depuis l'adresse 133.33.333.343.
iptables -I DOCKER-USER -i ens16 -p tcp --dport 9443 -s 133.33.333.343 -j ACCEPT
# Autoriser le trafic entrant sur les ports TCP 443 et 80 depuis n'importe quelle adresse source.
iptables -I DOCKER-USER -i ens16 -p tcp --dport 443 -j ACCEPT
iptables -I DOCKER-USER -i ens16 -p tcp --dport 80 -j ACCEPT
# Appliquer la politique de refus (DROP) par défaut à tout autre trafic entrant sur l’interface spécifiée.
iptables -A DOCKER-USER -i ens16 -j DROP
# (Optionnel) Application des mêmes règles de filtrage pour le trafic IPv6.
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