Isola a interface de rede do sistema, exceto de uma ponte do docker

1

Eu tenho duas redes separadas, uma confiável e outra não confiável. A rede confiável contém um servidor.

Azul é a rede existente e confiável e a grande caixa é o servidor, que é conectado via eth0 à rede confiável.

Agora quero começar a usar recursos gratuitos no servidor para hospedar serviços, contidos em contêineres do Docker, para a rede não confiável (vermelho).

Eu quero que tudo que é vinculado ao 0.0.0.0 funcione normalmente, mas não vincule a eth1 e o docker1. Isso significa que o nginx deve poder se comunicar com todas as interfaces, exceto eth1 e docker1. Ele deve não conseguir se comunicar com a sub-rede 192.168.2.0/24, que também inclui a ponte docker1. Isso vale para o sshd e o samba também, para qualquer serviço. Nenhum dispositivo vindo de 192.168.2.0/24 deve ser capaz de estabelecer uma sessão ssh no servidor ou conectar via samba. Nenhum roteamento para 192.168.2.0/24 de e para outras sub-redes deve acontecer no servidor.

Portanto, o servidor e qualquer dispositivo na rede 192.168.1.0/24 devem poder acessar os contêineres 1 a 3, mas não 4 e 5. E os contêineres 4 e 5 não devem poder acessar nada no 192.168. Rede 1.0 / 24.

Eu acredito que deve ser factível usando o iptables. Além disso, como eu configuraria a ponte de encaixe?

Eu não tenho experiência com o iptables e mais com o docker networking, então uma explicação detalhada seria muito apreciada.

(Todas as comunicações entre essas duas redes devem ocorrer apenas através de um roteador. O roteador está usando NAT para que a sub-rede 192.168.1.0/24 possa acessar 192.168.2.0/24 através dele, mas o inverso somente se o encaminhamento de porta for o roteador permite, mas isso é um problema diferente (e resolvido).

Atualizar : adicionando essas regras isso funcionaria?

iptables -A INPUT   -i eth1 -j DROP
iptables -A OUTPUT  -i eth1 -j DROP
iptables -A FORWARD -i eth1 -j DROP

iptables -A INPUT   -i docker1 -j DROP
iptables -A OUTPUT  -i docker1 -j DROP
iptables -A FORWARD -i docker1 -j DROP

iptables -A FORWARD -i eth1 -o docker1 -j ACCEPT
iptables -A FORWARD -i docker1 -o eth1 -j ACCEPT

Em caso afirmativo, como poderia, por exemplo, container1 conectar-se a um servidor HTTP em execução no container4, se ele não sabe que para alcançar 192.198.2.10, ele deve primeiro sair via eth0, porque tentar contatar 192.168.2.10 diretamente resultará na pacotes sendo descartados.

    
por Daniel F 24.02.2017 / 00:10

0 respostas