IPTables - Permitir encaminhamento de porta do Docker somente para endereço IP específico

3

Estou hospedando um aplicativo da web em um Ubuntu 16.04. Todos os componentes deste aplicativo estão dentro de contêineres Docker, a maioria deles só precisa se comunicar entre si, mas não para o mundo exterior (como PostgreSQL ou ElasticSearch). Por exemplo, ElasticSearch expõe por padrão sua interface de plugin na porta 9200.

Como administrador, preciso ter acesso a essas interfaces, mas quero limitá-lo apenas ao meu computador de trabalho.

Eu tentei seguir instruções para permitir apenas um IP específico para uma porta , mas parece que o Docker substitui as minhas regras:

## ALLOW specific ports only on ONE IP address:
# ElasticSearch
iptables -I INPUT -p tcp -s MyWorkIP --dport 9200 -j ACCEPT
iptables -I INPUT -p tcp -s 0.0.0.0/0 --dport 9200 -j DROP
iptables -I INPUT -p tcp -s MyWorkIP --dport 9300 -j ACCEPT
iptables -I INPUT -p tcp -s 0.0.0.0/0 --dport 9300 -j DROP
iptables -I INPUT -p tcp -s MyWorkIP --dport 5601 -j ACCEPT
iptables -I INPUT -p tcp -s 0.0.0.0/0 --dport 5601 -j DROP
# PostgreSQL
iptables -I INPUT -p tcp -s MyWorkIP --dport 5432 -j ACCEPT
iptables -I INPUT -p tcp -s 0.0.0.0/0 --dport 5432 -j DROP

Estou testando tudo ao tentar acessar o page:port específico do meu computador de trabalho ( MyWorkIP no script) e do meu telefone (IP dinâmico), mas qualquer tentativa me concede acesso de ambos os dispositivos. O que eu preciso é que qualquer outro IP que não seja MyWorkIP seja recusado; então meu celular não teria acesso.

Eu não sou muito bom na configuração do IPtables, então não sei por onde começar minha investigação ... (Eu não tenho X instalado neste servidor: eu faço tudo em um termo)

Quaisquer pensamentos / ideias?

    
por gfd 11.08.2016 / 18:31

2 respostas

0

Consegui fazer funcionar com isso:

largar todas as ligações (entrada e saída), excepto as de ipyouwanttoallow
    iptables -I DOCKER ! -s ipyouwanttoallow -j DROP
aceitar todas as conexões do seu IP local do contêiner para o mundo
    iptables -I DOCKER -s localipofyourcontainer -d 0.0.0.0/0 -j ACCEPT
necessário permitir que servidores externos respondam suas solicitações de contêiner
    iptables -I DOCKER  -m state --state ESTABLISHED,RELATED -j ACCEPT
    
por 27.06.2017 / 06:41
0

Existem dois problemas prováveis:

  • Você precisa ativar o encaminhamento nas interfaces ou por padrão.
  • Você precisará ser redirecionado do seu telefone e possivelmente do seu work_ip.

Considere o uso de uma ferramenta de criação de firewall para criar suas regras de firewall. Eu prefiro usar shorewall como está bem documentado, tem boas configurações de exemplo e está configurado com arquivos. ufw é uma alternativa. Ambos estão disponíveis como pacotes do Ubuntu.

Você pode usar um túnel ou proxy para fornecer seu acesso.

    
por 12.08.2016 / 02:10