Duas coisas que você deve ter em mente ao trabalhar com as regras de firewall do docker:
- Para evitar que suas regras sejam prejudicadas pela janela de encaixe, use a
DOCKER-USER
chain - O Docker faz o mapeamento de portas na cadeia
PREROUTING
da tabelanat
. Isso acontece antes das regrasfilter
, portanto,--dest
e--dport
verão o IP interno e a porta do contêiner. Para acessar o destino original, você pode usar-m conntrack --ctorigdstport
.
Por exemplo:
iptables -A DOCKER-USER -i eth0 -s 8.8.8.8 -p tcp -m conntrack --ctorigdstport 3306 -j ACCEPT
iptables -A DOCKER-USER -i eth0 -s 4.4.4.4 -p tcp -m conntrack --ctorigdstport 3306 -j ACCEPT
iptables -A DOCKER-USER -i eth0 -p tcp -m conntrack --ctorigdstport 3306 -j DROP