Docker et IPtables

Docker Manipule automatiquement les règles IPTables et il n’est pas conseillé de les modifier directement. Il est cependant possible de l’empêcher d’y inscrire ses propres règles et de les écrire vous même pour plus de sécurité.

Docker and IPTables

Docker Manipule automatiquement les règles IPTables pour assurer l’isolation du réseau et faire fonctionner les conteneurs.
Lorsque Docker ajoute automatiquement des règles IPTables il utilise la chaîne DOCKER. Si vous devez ajouter des règles qui se chargent avant celles de Docker il faudra utiliser la chaîne DOCKER-USER et ne surtout pas directement modifier les règles que Docker met en place dans la chain DOCKER.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# iptables -L
[...]

Chain FORWARD (policy DROP)
target prot opt source destination
DOCKER-USER all -- anywhere anywhere
DOCKER-ISOLATION all -- anywhere anywhere
[...]

Chain DOCKER (2 references)
target prot opt source destination
ACCEPT tcp -- anywhere 172.21.0.3 tcp dpt:5000

Chain DOCKER-ISOLATION (1 references)
target prot opt source destination
DROP all -- anywhere anywhere =
RETURN all -- anywhere anywhere

Chain DOCKER-USER (1 references)
target prot opt source destination
RETURN all -- anywhere anywhere

Il est à noter que si vous lancez un container sur un port spécifique, Docker autorisera n’importe qu’elle @ip à s’y’ connecter.

Restreindre les connexions au daemon Docker

Par défaut toutes les IP externes sont autorisées à se connecter à Docker. Pour restreindre l’accès aux conteneurs à une seule IP ou un réseau entier il faut créer et placer une règle avant celles utilisant la chaîne DOCKER-USER.

Ici aucune adresse ne pourra se connecter aux container sauf 192.168.1.1:

1
# iptables -I DOCKER-USER -i ext_if ! -s 192.168.1.1 -j DROP

Ou pour un réseau entier :

1
# iptables -I DOCKER-USER -i ext_if ! -s 192.168.1.1/24 -j DROP

S’il te plaît MobiDock, ne touche pas à mon firewall

Si le fait que Docker manipule automatiquement des règles dans votre firewall vous fait (à raison) grincer des dents, il est possible de l’en empêcher :

Il faut modifier le paramètre iptables à false dans /etc/docker/daemon.json.

1
# vim /etc/docker/daemon.json

Docker ne devrait plus créer de règle de firewall, vous pourrez ainsi avoir le contrôle total sur votre IPTables.

Si vous utilisez le bridge Ethernet créé par Docker nommé docker0, vous pouvez définir les règles suivantes :

1
2
# iptables -A FORWARD -i docker0 -o eth0 -j ACCEPT
# iptables -A FORWARD -i eth0 -o docker0 -j ACCEPT

Il vous suffira ensuite de créer vos règles IPTables comme à votre habitude.

Documentation

Partager