Eu tenho um servidor CentOS executando o Docker e estou tentando protegê-lo usando o iptables. E eu não posso descobrir como deixar os contêineres acessarem a internet, sem que suas portas sejam acessíveis de fora.
Eu parei o Docker mexendo com o meu iptables usando o comando '--iptables = false' e agora estou lutando para configurar o iptables manualmente.
Eu quero configurar o firewall para que:
- As entradas são descartadas, a menos que eu as abra especificamente
- Os contêineres podem se comunicar entre si por meio da conexão localhost
- Os contêineres podem fazer conexões com a internet para fazer o download do código, etc.
Eu tenho os dois primeiros, mas o que eu tente habilitar o terceiro invalida o primeiro!
Eu tenho dois contêineres de teste. Um contêiner httpd encaminhando sua porta de saída da web 3333 - e outro contêiner executando o Debian.
O IPTables é configurado com
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -i lo -j ACCEPT
Então, do lado de fora, não consigo acessar o myserver: 3333.
Mas eu posso executar a partir do host: curl localhost: 3333 e ter acesso.
Eu adicionei então:
iptables -A INPUT -i docker0 -j ACCEPT
E agora posso rodar em meu contêiner de teste de teste debian 172.17.0.1:3333 e isso funciona bem também.
Mas se eu estiver no contêiner de teste e tentar: curl httpbin.org/ip não obtenho resposta.
Eu estava lendo no link e tentei o sugerido:
iptables-A FORWARD -i docker0 -o eth0 -j ACCEPT
iptables-A FORWARD -i eth0 -o docker0 -j ACCEPT
Com isso, posso agora sair do contêiner de teste, mas isso também abre o 3333 para o mundo!
Como configuro o iptables para permitir que o contêiner acesse, mas impede o acesso em?