Usando Docker com firewalld

Usando Docker com firewalld

DR Tentando mascarar tudo Dockermanualmente firewalld.

Acabei de começar a usar firewalldna minha máquina Debian 10 porque quero aprender como funciona.

Eu Dockerinstalei no host e quero gerenciar o firewall sozinho para saber mais sobre o que o Docker faz, quais regras etc. ele se aplica quando os contêineres são criados e como o firewalld funciona.

Já o Debian 10 usa nftablespor padrão e usa algum tipo de iptableswrapper para poder usar iptablescomandos para criar regras de firewall. Dockerfunciona bem quando --iptablesestá ativado.

Porém quero usar firewalldcom nftablesbackend e pular tudo o que tem a ver, iptablespois é confuso. Então /etc/systemd/system/multi-user.target.wants/docker.serviceadicionei --iptables=falsepara que o Docker não mexa no firewall. Eu limpei todas as regras do iptables etc. e tudo está bem até agora.

Agora vamos ao meu problema.

Todos os contêineres podem acessar o host e uns aos outros, mas não a Internet. Como todos eles estão rodando em 172.17.0.0/16 e meu host está em 192.168.9.0/24, preciso mascarar o tráfego dos contêineres.

Não consigo encontrar muitas informações sobre como gerenciar o firewall manualmente ao usar o Docker e, como sou novo no firewalld, estou apenas supondo.

Minhas interfaces são as seguintes:

eno1 (main interface)
docker0 (docker bridge)
veth******* (one for each container)

todas as vethinterfaces estão na docker0ponte.

Então pensei que poderia criar uma nova zona chamada dockere mascarar tudo da docker0ponte.

~# firewall-cmd --permanent --new-zone=docker
~# firewall-cmd --permanent --zone=docker --change-interface=docker0
~# firewall-cmd --permanent --zone=docker --add-rich-rule='rule family="ipv4" source address=172.17.0.0/16 masquerade'
~# firewall-cmd --reload

Listar as zonas ativas me dá o seguinte:

~# firewall-cmd --get-active-zones
docker
  interfaces: docker0
public
  interfaces: eno1

Ainda não consigo acessar a internet dos contêineres. Não tenho ideia se esse é o caminho certo a seguir ou o que estou perdendo. Qualquer ajuda é apreciada.

Responder1

No firewalld, o mascaramento precisa ser definido na zona que leva à Internet. No seu caso, essa parece ser a publiczona.

informação relacionada