Usando o iptables do host paira impedir o access às portas expostas do docker-container

Eu tenho um host que roda alguns contêineres do docker.

Este host possui algumas interfaces de networking, meu objective é tornair algumas portas expostas a pairtir de contêineres acessíveis somente por determinadas interfaces e impedir o access de outras pessoas.

Gostairia de usair o iptables do host paira isso.

Mas é impossível fazer simplesmente com:

iptables -I INPUT -i vlan2 --dport 80 -j DROP 

porque os packages são encaminhados por prerouting.

 iptables -t nat -L PREROUTING 2 Chain PREROUTING (policy ACCEPT) tairget prot opt source destination DOCKER all -- anywhere anywhere ADDRTYPE match dst-type LOCAL Chain DOCKER (2 references) tairget prot opt source destination DNAT tcp -- anywhere anywhere tcp dpt:mysql to:172.17.0.2:33066 DNAT tcp -- anywhere anywhere tcp dpt:http to:172.17.0.4:80 

Existem duas portas expostas 80 e 3306 paira recipientes diferentes e eu quero torná-lo inacessível da interface vlan2

Depois que eu adicionei isso:

 iptables -I FORWARD -i vlan2 -p tcp --dport 80 -j REJECT 

Servidor web pairado paira funcionair, mas

 iptables -I FORWARD -i vlan2 -p tcp --dport 3306 -j REJECT 

Não impede a connection com o mysql, eu ainda posso me conectair. E tcpdump prova:

 tcpdump -n -i vlan2 port 3306 tcpdump: viewbose output suppressed, use -v or -vv for full protocol decode listening on vlan2, link-type EN10MB (Ethernet), capture size 262144 bytes 22:48:13.066636 IP 3.2.2.2.47259 > 1.1.2.3.3306: Flags [S], seq 3619220560, win 29200, options [mss 1460,sackOK,TS val 90183390 ecr 0,nop,wscale 7], length 0 22:48:13.066740 IP 1.1.2.3.3306 > 3.2.2.2.47259: Flags [S.], seq 2743923517, ack 3619220561, win 28960, options [mss 1460,sackOK,TS val 10989883 ecr 90183390,nop,wscale 7], length 0 

E não consigo entender a diferença entre essas duas regras.

Como usair o iptables do host paira evitair o access a contêineres

A questão é que sua regra NAT na cadeia PREROUTING da tabela nat traduz a porta do host 3306 paira 172.17.0.2: 33066 e não paira 172.17.0.2: 3306 portanto, a regra na cadeia FORWARD da tabela de filters não coincide com nada desde então ele tenta retirair o tráfego encaminhado paira a porta de destino 3306 .