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
1. démarrage, suivez ces étapes :
Créez un fichier script, par exemple /usr/local/bin/iptables-rules.sh. :
sudo nano /usr/local/bin/iptables-rules.sh
2.
AjouterVoiciAjoutez quelques exemples devos règles à ajouterpersonnalisées dans ce scriptscript. Par exemple :
#!/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
iptables -AI DOCKER-USER -i eth0ens16 -p tcp --dport 8080 !9443 -s 203.0.113.123133.33.333.343 -j DROPACCEPT
# 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.
Modifiez ou créez le fichier /etc/docker/daemon.json :
sudo nano /etc/docker/daemon.json
Mettez-y :
{
"iptables": false
}
sudo chmod +x /usr/local/bin/iptables-rules.sh
4.
Créer unCré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.
ActiverActivez 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
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