Bloqueie a porta do Docker e acesse-a para poucos endereços IP

0

Eu preciso bloquear todo o tráfego INPUT para a porta 8090 no servidor Ubuntu 16.04. Eu usei o Iptables, mas não funcionou. Comandos que usei:

iptables -A INPUT -p tcp --dport 8090 -j DROP iptables -A INPUT -p tcp --dport 8090 -s <IP> -j ACCEPT

No NAT eu tenho: Chain DOCKER (2 references) target prot opt source destination DNAT tcp -- anywhere <VM local IP> tcp dpt:8090 to:172.21.0.2:8080

Interface pública denominada eth0 e interface do docker chamada docker0

    
por Pasily_V 15.08.2018 / 11:05

2 respostas

0

Por causa do DNAT, você está agora em roteamento . Sua cadeia INPUT não é mais usada para esse tráfego DNAT e agora é a cadeia FORWARD que é percorrida. O novo destino é 172.21.0.2:8080 e é com isso que as regras devem se preocupar agora, não com <VM local IP>:8090 .

Portanto, com a DNAT em vigor, você deve bloquear seu tráfego com (na ordem correta: permitir exceção e, em seguida, proibir todo o restante):

iptables -A FORWARD -s <IP> -d 172.21.0.2 -p tcp --dport 8080 -j ACCEPT
iptables -A FORWARD -d 172.21.0.2 -p tcp --dport 8080 -j DROP

Para ter certeza de que é feito antes de qualquer regra do sistema, você pode fazer:

iptables -I FORWARD 1 -s <IP> -d 172.21.0.2 -p tcp --dport 8080 -j ACCEPT
iptables -I FORWARD 2 -d 172.21.0.2 -p tcp --dport 8080 -j DROP

Essas regras podem impedir que outros contêineres cheguem a esse contêiner dependendo da configuração, portanto, talvez seja necessário adaptá-los (declarando a interface de entrada externa, por exemplo). De qualquer forma você tem que encontrar uma maneira de integrar isso muito bem com o método de firewall do sistema.

    
por 20.08.2018 / 19:56
0

sobre estas linhas:

iptables -A INPUT -p tcp --dport 8090 -j DROP
iptables -A INPUT -p tcp --dport 8090 -s <IP> -j ACCEPT

você deve alterar a ordem deles, porque as regras IPTables sobrescrevem umas às outras em estado de conflito e é uma maneira correta, então primeiro corrija essas e verifique todas as outras funções para evitar sobrescrever.

Em relação à parte NAT da sua pergunta, não está claro, no entanto, que no Docker você deve atribuir porta enquanto estiver em um contêiner:

docker run ... -p 8090:8080 ... 
    
por 15.08.2018 / 13:51