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é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
- Ajouter
lalescommanderèglesaudans le script :
2.
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
uniquement443unetréseau spécifique80 àaccédertoutàletousmondeles 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
Désactivez la gestion automatique des règles IPTables par Docker :
3.
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
- Créer un
service systemd :
4.
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
- Activer
le service :
5.
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