Si on démarre un container avec : docker run -p 80:80 nginx, docker rajoute une règle dans sa chaîne DOCKER-USER de iptables afin de faire son foward.

De cette manière, les règles de INPUT ne sont pas utilisées et le filtre entrant ne s’applique pas au service des containers.

On joue donc avec DOCKER-USER pour contourner ce problème.

Par exemple on peut ajouter en dernière ligne à cette chaîne une règle -j DROP -i eth0 et filtrer par la suite.

iptables -I DOCKER-USER -j DROP -i eth0
iptables -I DOCKER-USER -I eth0 -s 192.168.0.1 -p tcp -m conntrack --ctorigdstport 80 --ctdir ORIGINAL -j ACCEPT

ou

iptables -I DOCKER-USER -j DROP -i eth0
iptables -I DOCKER-USER -I eth0 -s 192.168.0.1 -p tcp --dport 80 -j ACCEPT

Ici, on permet uniquement à l’ip 192.168.0.1 de communiquer sur le port 80 du container.