Par défaut, le démon docker ajoute les règles iptables dont il a besoin pour le forwarding. Cela permet notamment d’utiliser la fonction EXPOSE de docker run de manière transparente (par curiosité regardez avec un iptables -L et un ifconfig la configuration réseau que met docker en place dans votre dos).
Le problème avec ça, c’est qu’en général, lorsque l’on a un serveur, on n’aime que moyennement que l’on nous ouvre nos ports de manière automatique sans notre aval. Pour cela nous allons donc demander a notre porte-container favori de s’occuper de ses fesses et de ne plus toucher à nos règles.
Docker, s’il te plaît, arrête de casser mes règles iptables
Donc, si vous utilisez docker sur un serveur qui a déjà un firewall iptables en place et que vous voulez avoir totalement dessus sans que docker vienne jouer avec: vous pouvez éditer le fichier /etc/init.d/docker pour ajouter à la ligne “DOCKER_OPTS=” les arguments –iptables=false comme ci-dessous.
#!/bin/sh set -e ### BEGIN INIT INFO # ... ### END INIT INFO export PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin BASE=docker # modify these in /etc/default/$BASE (/etc/default/docker) DOCKERD=/usr/bin/dockerd # This is the pid file managed by docker itself DOCKER_PIDFILE=/var/run/$BASE.pid # This is the pid file created/managed by start-stop-daemon DOCKER_SSD_PIDFILE=/var/run/$BASE-ssd.pid DOCKER_LOGFILE=/var/log/$BASE.log DOCKER_OPTS="--iptables=false" DOCKER_DESC="Docker"
Configurer iptables pour qu’il fonctionne avec docker
Si vous utilisez le bridge ethernet de docker (crée par docker et nommé sobrement docker0 dans votre ifconfig préféré), vous devrez activer les règles suivantes pour leur fournir internet.
iptables -A FORWARD -i docker0 -o eth0 -j ACCEPT iptables -A FORWARD -i eth0 -o docker0 -j ACCEPT
Et après, comme d’habitude, pour offrir au monde un accès à votre container au travers des règles de forwarding :
iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
Voilà, maintenant vous avez totalement repris la main sur votre pare-feu, à vous la maîtrise de la baleine bleue.
Salut,
J’ai testé ta solution avec docker-ce et le problème persiste malgré un redémarrage complet du serveur. J’ai toujours les règles qui sont créés par Docker.
Bizarre car chez nous cela a réglé le problème, comment démarres-tu ton service docker ?
Salut, en ce cas, si je comprends bien, UFW va marcher sans problèmes et sans laisser la sensation de protection, car docker ne travaille plus avec iptables, c’est ça ?
C’est maintenant a toi de gérer manuellement iptables ce qui est souvent plus fin 😉