docker + iptables

Docker + iptables = ♥

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.

2 réflexions au sujet de « Docker + iptables = ♥ »

  1. 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.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *