Règles IPTables pour Docker
Règles IPTables pour Docker
Par défaut, toutes les adresses IP externes sont autorisées à se connecter à Docker. Pour limiter l'accès aux conteneurs à une seule IP ou à un réseau entier, vous devez créer et placer une règle avant celles utilisant 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écutent avant celles de Docker, utilisez la chaîne DOCKER-USER et évitez de modifier directement les règles que Docker met en place dans la chaîne DOCKER.
Pour appliquer une règle IPTables sécurisant les connexions Docker au 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 la commande au script :
Voici quelques exemples de règles à ajouter dans ce script :
- Autoriser le forwarding entre docker0 et votre interface principale (ex : eth0) :
#!/bin/bash
iptables -A FORWARD -i docker0 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o docker0 -j ACCEPT
- Restreindre l'accès à un conteneur exposant le port 8080 à une seule IP :
iptables -A DOCKER-USER -i eth0 -p tcp --dport 8080 ! -s 203.0.113.123 -j DROP
- Autoriser uniquement un réseau spécifique à accéder à tous les ports Docker :
iptables -A DOCKER-USER -i eth0 -s 10.1.2.0/24 -j ACCEPT
iptables -A DOCKER-USER -i eth0 -j DROP
- 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
}
- Rendre le script exécutable :
sudo chmod +x /usr/local/bin/iptables-rules.sh
- Créer un service systemd :
Créez un fichier de service systemd pour exécuter le script au démarrage :
sudo nano /etc/systemd/system/iptables-rules.service
Ajoutez le contenu suivant :
[Unit]
Description=Apply custom IPTables 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 :
Activez le service pour qu'il s'exécute au démarrage :
sudo systemctl enable iptables-rules.service
sudo systemctl start iptables-rules.service
Si le script et le service sont déjà lancés, 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 suit :
sudo systemctl restart iptables-rules.service