Docker: maneira correta de restringir o acesso a determinados endereços IP

7

Eu tenho um contêiner do Docker expondo a porta 3306 à Internet. Gostaria de restringir o acesso a determinados endereços IP públicos. Como exemplo, vamos usar 1.2.3.4.

Como condição adicional, desejo que as regras sobrevivam ao reiniciar o daemon do Docker e reinicializar o servidor. Isso me permite usar iptables-persistent ( iptables-save / iptables-restore ) para restaurar as regras quando o servidor for reinicializado, sem que a inicialização dockerd interfira nele.

Eu tentei o seguinte:

  1. Modificando a cadeia FORWARD :

    iptables -I FORWARD -p tcp --dport 3306 -j REJECT
    iptables -I FORWARD -p tcp --dport 3306 -s 1.2.3.4 -j ACCEPT
    

    Isso funciona quando terminado depois de iniciar o daemon do Docker. Ao reiniciar o daemon, o Docker insere regras adicionais na parte superior da cadeia e minhas regras personalizadas acabam sendo ignoradas.

  2. Modificando a cadeia DOCKER :

    iptables -N DOCKER # if chain does not yet exist
    iptables -I DOCKER -p tcp --dport 3306 -j REJECT
    iptables -I DOCKER -p tcp --dport 3306 -s 1.2.3.4 -j ACCEPT
    

    Isso funciona até que dockerd seja reiniciado. Parece que dockerd limpa a cadeia DOCKER ao reiniciar e todas as regras personalizadas desapareceram.

  3. Use --iptables=false . Embora isso funcione em princípio, essa solução quebra os recursos de encaminhamento padrão do Docker e exige a configuração manual das regras de encaminhamento.

Eu ficaria surpreso se não houvesse uma maneira correta de fazer isso. Alguma idéia?

PS: Eu fiz algumas leituras, sem sucesso (por exemplo, Etapas para limitar as conexões externas ao contêiner docker com iptables? , Docker - Portas expostas acessíveis de fora - regras de iptables ignoradas , mas estas questões não parecem lidar com o problema de reinicialização.)

    
por Peter Thomassen 24.11.2016 / 18:11

1 resposta

1

dockersd pode ser executado com a opção:

--iptables=false

Se não for executado manualmente, mas usado como serviço, basta adicionar ou modificar a seguinte linha no arquivo de configuração /etc/docker/daemon.json :

"iptables": false,

Mais documentação detalhada pode ser encontrada aqui

    
por 29.11.2016 / 03:58