Docker & Shorewall

16

Estou usando Shorewall no meu servidor como simples firewall autônomo e gostaria de usar o Docker também.

Ao usar um contêiner Docker e seu redirecionador port , o docker configura suas próprias regras / cadeias iptables, que serão eliminadas se o shorewall for reiniciado. Assim, o contêiner se tornará inacessível .

Alguém conseguiu salvar / restaurar as regras do docker após uma reinicialização do shorewall ou alguém tem outra solução alternativa?

Veja também:

por jaltek 04.03.2014 / 16:07

7 respostas

18

As seguintes alterações de configuração devem garantir o fluxo de tráfego entre o Docker e o host Shorewall. Testado no Shorewall 4.5.21.9, mas deve se aplicar às versões mais recentes:

/etc/shorewall/shorewall.conf

Verifique se o encaminhamento de IP está ativado (a maioria dos itens de configuração são Sim / Não, mas este é "Ligado"):

IP_FORWARDING=On

/ etc / shorewall / masq

Ative o mascaramento (NAT) para sua rede privada do Docker (se você usar uma rede diferente, por exemplo, iniciar a janela de encaixe com --bip=#.#.#.#/# e, em seguida, alterá-la). Altere eth0 para qualquer interface na máquina host com conectividade externa:

#INTERFACE:DEST         SOURCE
eth0                    172.17.0.0/16

/ etc / shorewall / interfaces

Adicione uma entrada de interface para que o Shorewall saiba a qual interface a dock zone está relacionada:

#ZONE           INTERFACE               OPTIONS
dock            docker0

/ etc / shorewall / zones

Crie uma nova zona; note que docker é muito longo e causará um erro "nome da zona inválida".

#ZONE   INTERFACE
dock    ipv4

/ etc / shorewall / policy

Você provavelmente deseja permitir que os contêineres do Docker conversem com a máquina host e na Internet, portanto, este é um bom ponto de partida:

#SOURCE         DEST            POLICY
# ...(other policies)...
dock            all             ACCEPT
# ...(other policies, catch-all)...

Você também pode precisar de uma política ACCEPT parecida para o tráfego de fw a dock , se você ainda não a tiver aberto com fw a all .

Você pode aumentar ainda mais isso nos arquivos policy ou rules conforme necessário. Por exemplo, o acima não permite explicitamente que o tráfego externo alcance seus contêineres do Docker; verifique suas outras zonas / políticas / regras para isso.

    
por 28.09.2014 / 14:47
6

Desde que o Docker apresentou seu recurso de isolamento de rede, as outras soluções mencionadas aqui não são mais suficientes se você quiser usar redes personalizadas. O Shorewall 5.0.6 introduz o suporte para o Docker , incluindo as redes do Docker. Isso:

  • Permite que o shorewall e a janela de encaixe sejam iniciados / parados / reiniciados em qualquer ordem
  • Evita a necessidade de manter um script de extensão
por 25.03.2016 / 10:53
2

Só percebi na minha caixa. Certifique-se de que /etc/shorewall.conf tem:

IP_FORWARDING=Yes

O Docker depende do encaminhamento e espaçamos esse 'fantoche' para 'Não' em todos os meus servidores.

Atualização: provavelmente você também precisa mascarar o tráfego proveniente do docker pela interface da WAN.

Edite /etc/shorewall/masq e você precisará de uma linha semelhante a:

br0 172.17.0.0/12

Neste caso, minha interface WAN é na verdade br0 (uma ponte), mas a sua provavelmente será algo como eth0. (Use ifconfig para ver suas interfaces e seus endereços IP). Na minha janela de encaixe da máquina usa 172.17.0.0/24, que é um intervalo de endereços privados RFC1918. Isso pode ser diferente em outros sistemas, mas você pode ver o intervalo usando ifconfig mais uma vez para procurar a interface docker0 .

    
por 10.09.2014 / 04:52
2

Você pode garantir que o conjunto de regras do Docker sobreviva a uma reinicialização do shorewall criando scripts de extensão que salvem a cadeia DOCKER antes da reinicialização e, em seguida, restaure-a novamente depois. Acabei de colocar uma postagem com um exemplo de como para fazer isso , embora eu tenha certeza que está longe de ser o único método possível.

    
por 24.11.2015 / 04:29
0

O serviço de encaixe pode ser reiniciado sem afetar os contêineres em execução e pode ser executado após uma reinicialização do Shorewall para recarregar as regras específicas do docker. Obviamente haverá um curto período de tempo em que a rede para o (s) contêiner (es) será interrompida.

Isso é verdade, pelo menos nas minhas poucas instalações do Archlinux.

    
por 22.05.2014 / 03:22
0

A ação de atualização não expurga o iptable, portanto, se você quiser apenas atualizar regras ou políticas, poderá executar a atualização em vez de reiniciar:

sudo shorewall refresh

Obviamente, o problema ainda permanece se você realmente precisar reiniciar o shorewall. Em seguida, você precisa reiniciar o docker e reabastecer seus contêineres.

    
por 18.06.2015 / 13:33
0

Uma opção possível é executar o Docker com a opção --net = host, para permitir a rede host de acesso ao aplicativo em container sem o encaminhamento de ip e NAT.

    
por 10.08.2016 / 12:18