# Filtrado de paquetes y cortafuegos


En Linux, Docker crea reglas de cortafuegos para implementar el aislamiento de red, la [publicación de puertos](/engine/network/port-publishing/) 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](/engine/network/firewall-iptables/). También tiene soporte para nftables; consulta [Docker con nftables](/engine/network/firewall-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](https://docs-docker.esdocu.com/reference/cli/dockerd/).

## 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](/engine/network/firewall-nftables/#migracion-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](https://docs-docker.esdocu.com/reference/cli/dockerd/) 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](https://firewalld.org) 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](https://launchpad.net/ufw) (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.

