Como configurar o iptables ao executar o Docker

1

Eu tenho uma situação difícil aqui, eu tenho configurado muitos contêineres no meu host docker, executando aplicativos diferentes, como servidor de email, bancos de dados, redis e certos aplicativos html usando outros recipientes como dependências. Todos foram configurados usando o flag -p com o hostport: containerport, as portas não são vinculadas à máquina host, elas podem ser ouvidas na internet.

Ao configurar o aplicativo dependente, usei o IP da ponte do docker (não o IP público) do host para vincular. exemplo: o container piwik se conecta ao container do banco de dados mysql usando o 172.17.42.1:port IP, que é o IP padrão da ponte docker usado para redes de contêineres. Então eu usei nginx (no host) para configurar um proxy baseado em dns no host local (127.0.0.1:port) para rotear para o aplicativo em execução dentro de contêineres. Inicialmente, ao configurar o sistema, eu pensei em DROP todo o tráfego, exceto as portas necessárias para ser aberto (80, 443, etc.) e ACCEPT lo interface faria o trabalho. Mas a interface docker usa a cadeia FORWARD para rotear para a ponte docker0. Essa cadeia de encaminhamento usa regras indivisuais para encaminhar ao IP do contêiner: PORT

O que eu quero é usar o aplicativo de sub.domin.com, mas não deve ser acessível a partir de IP: PORT ou domain: PORT. Agora eu corri todos os iptables

iptables -F
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
iptables -P INPUT DROP
iptables -A FORWARD -i docker0 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o docker0 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dports 22,53,80,443,25,465,587,993,995 -j ACCEPT
iptables -A INPUT -p udp -m multiport --dports 53 -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -p tcp -m multiport --sports 22,53,80,443,25,465,587,993,995 -j ACCEPT
iptables -A OUTPUT -p tcp -m multiport --sports 53 -j ACCEPT

Após a implementação do iptables, o nginx falhou ao rotear (sub.domain.com), e deu o erro nginx 504 (que confirmou que o DNS estava resolvendo para corrigir o IP). os aplicativos eram acessíveis por meio do IP: PORT, todas as portas, inclusive as de aplicativos de contêiner, estavam abertas para a Internet, como antes. então eu reiniciei o servidor para redefinir os padrões. Eu percebo que os registros do iptables não estão presentes no começo, mas começam a aparecer quando nós aumentamos os contêineres. Estou muito confuso sobre como esconder portas da Internet de tal forma que o roteamento de proxy nginx ainda funciona. Endereços IP de contêineres podem ser acessados.

    
por Raman Deep Singh 25.04.2015 / 16:20

0 respostas