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.