Compartir comentarios
Las respuestas se generan en base a la documentación.

Filtrado de paquetes y cortafuegos

En Linux, Docker crea reglas de cortafuegos para implementar el aislamiento de red, la publicación de puertos y el filtrado.

Debido a que estas reglas son necesarias para el correcto funcionamiento de las redes bridge de Docker, no debes modificar las reglas creadas por Docker.

Esta página describe las opciones que controlan las reglas de cortafuegos de Docker para implementar características que incluyen la publicación de puertos y NAT/enmascaramiento.

Note

Docker crea reglas de cortafuegos para redes bridge. No se crean reglas para las redes ipvlan, macvlan o host.

Backend del cortafuegos

De forma predeterminada, Docker Engine crea sus reglas de cortafuegos utilizando iptables; consulta Docker con iptables. También tiene soporte para nftables; consulta Docker con nftables.

Para redes bridge, iptables y nftables tienen la misma funcionalidad.

La opción de Docker Engine firewall-backend se puede utilizar para seleccionar si se utiliza iptables o nftables. Consulta la configuración del daemon.

Docker en un enrutador

En Linux, Docker necesita tener habilitado el reenvío de IP ("IP Forwarding") en el host. Por lo tanto, habilita los ajustes de sysctl net.ipv4.ip_forward y net.ipv6.conf.all.forwarding si no están ya habilitados al iniciarse. Cuando hace esto, también configura el cortafuegos para descartar (drop) los paquetes reenviados a menos que sean aceptados explícitamente.

Cuando Docker establece la política de reenvío predeterminada en "drop", evitará que tu host de Docker actúe como un enrutador. Esta es la configuración recomendada cuando el reenvío de IP está habilitado, a menos que se requiera la funcionalidad de enrutador.

Para evitar que Docker establezca la política de reenvío en "drop", incluye "ip-forward-no-drop": true en /etc/docker/daemon.json, o añade la opción --ip-forward-no-drop a la línea de comandos de dockerd.

Note

Con el backend experimental de nftables, Docker no habilita el reenvío de IP por sí mismo y no creará una política nftables "drop" predeterminada. Consulta Migración de iptables a nftables.

Evitar que Docker manipule las reglas del cortafuegos

Configurar las claves iptables o ip6tables en false en la configuración del daemon evitará que Docker cree la mayoría de sus reglas de iptables o nftables. Sin embargo, esta opción no es adecuada para la mayoría de los usuarios, ya que es probable que afecte el funcionamiento de la red de contenedores de Docker Engine.

Por ejemplo, con el cortafuegos de Docker deshabilitado y sin reglas de reemplazo, los contenedores en redes bridge no podrán acceder a los hosts de Internet mediante enmascaramiento, pero todos sus puertos serán accesibles para los hosts de la red local.

No es posible evitar por completo que Docker cree reglas de cortafuegos, y crear las reglas a posteriori es extremadamente complejo y queda fuera del alcance de estas instrucciones.

Integración con firewalld

Si ejecutas Docker con las opciones iptables o ip6tables establecidas en true, y firewalld está habilitado en tu sistema, además de sus reglas habituales de iptables o nftables, Docker crea una zona de firewalld llamada docker, con el objetivo (target) ACCEPT.

Todas las interfaces de red bridge creadas por Docker (por ejemplo, docker0) se insertan en la zona docker.

Docker también crea una política de reenvío llamada docker-forwarding que permite el reenvío desde CUALQUIER (ANY) zona a la zona docker.

Docker y ufw

Uncomplicated Firewall (ufw) es un frontend que se distribuye con Debian y Ubuntu, y te permite gestionar las reglas del cortafuegos. Docker y ufw utilizan las reglas del cortafuegos de formas que los hacen incompatibles entre sí.

Cuando publicas los puertos de un contenedor utilizando Docker, el tráfico hacia y desde ese contenedor se desvía antes de pasar por la configuración del cortafuegos de ufw. Docker enruta el tráfico del contenedor en la tabla nat, lo que significa que los paquetes se desvían antes de llegar a las cadenas INPUT y OUTPUT que utiliza ufw. Los paquetes se enrutan antes de que se puedan aplicar las reglas del cortafuegos, ignorando efectivamente la configuración de tu cortafuegos.