Usando Docker con firewalld

Usando Docker con firewalld

TL;DR Intentando enmascarar todo Dockermanualmente firewalld.

Recién comencé a usarlo firewallden mi máquina Debian 10 porque quiero aprender cómo funciona.

Lo instalé Dockeren el host y quiero administrar el firewall yo mismo para aprender más sobre qué hace Docker, qué reglas, etc., se aplica cuando se crean contenedores y cómo funciona firewalld.

Ya que Debian 10 usa nftablespor defecto y usa algún tipo de iptablescontenedor para poder usar iptablescomandos para crear reglas de firewall. Dockerfunciona bien cuando --iptablesestá habilitado.

Sin embargo, quiero usarlo firewalldcon nftablesel backend y omitir todo lo que tenga que ver, iptablesya que es confuso. Así que /etc/systemd/system/multi-user.target.wants/docker.serviceagregué --iptables=falsepara que Docker no afecte el firewall. Eliminé todas las reglas de iptables, etc. y hasta ahora todo está bien.

Ahora a mi problema.

Todos los contenedores pueden acceder al host y entre sí, pero no a Internet. Como todos se ejecutan en 172.17.0.0/16 y mi host está en 192.168.9.0/24, necesito enmascarar el tráfico de los contenedores.

No puedo encontrar mucha información sobre cómo administrar el firewall manualmente cuando uso Docker y, como soy nuevo en firewalld, solo estoy adivinando.

Mis interfaces son las siguientes:

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

Todas las vethinterfaces están en el docker0puente.

Entonces pensé que podría crear una nueva zona llamada dockery enmascarar todo desde el docker0puente.

~# 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

Enumerar las zonas activas me da esto:

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

Todavía no puedo acceder a Internet desde los contenedores. No tengo idea si este es el camino correcto a seguir o lo que me estoy perdiendo. Se agradece cualquier ayuda.

Respuesta1

En firewalld, el enmascaramiento debe configurarse en la zona que conduce a Internet. En tu caso, esa parece ser la publiczona.

información relacionada