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.