¿Cómo interactúa el filtrado de iptables en la cadena FORWARD o INPUT con NAT?

¿Cómo interactúa el filtrado de iptables en la cadena FORWARD o INPUT con NAT?

EsteLa página parece sugerir que, si hay una regla en la PREROUTINGcadena de la nattabla que traduce el destino 1.2.3.4:80, 10.1.1.1:8080entonces las reglas en la INPUTcadena FORWARDy deben coincidir en 10.1.1.1:8080, no en 1.2.3.4:80.

¿Qué pasa si uno quiere implementar un orden de operación más parecido al descrito?aquí? Es decir, ¿cómo se filtran las características de los paquetes antes de NAT?

Una posibilidad parece ser utilizar la PREROUTINGcadena de la rawmesa. El problema es que conntrack no está disponible en raw/PREROUTING(ver nota 1) y, por ejemplo, un fragmento UDP no inicial no estará relacionado con el fragmento inicial y producirá coincidencias inesperadas.

Avíseme si he descrito claramente el dilema y si existe alguna solución.

Nota 1: Corríjame si me equivoco, pero cuando intenté usar conntrack en raw/PREROUTING, todos los paquetes SYN iniciales estaban marcados como " INVALID" en lugar de " NEW". También parece que, en el diagrama de flujo de Netfilter, "conntrack" está después de raw/PREROUTING.

Respuesta1

No necesitas ninguna raw/PREROUTINGregla. Puede utilizar la conntrackcoincidencia para filtrar los paquetes por destino/dirección de origen/número de puerto original (antes de la traducción). Es conntrackun sucesor del statepartido anterior. Puede verificar varios metadatos adicionales relacionados con conntrack entry(y NAT).

Un par de ejemplos:

# allow any port-forwarded packets
iptables -t filter -A FORWARD -m conntrack --ctstate DNAT -j ACCEPT

# check the original destination address of DNATed packets
iptables -t filter -A FORWARD -p tcp --dport 8080 -m conntrack --ctstate DNAT --ctorigdstport 80 --ctorigdst X.X.X.X --ctdir ORIGINAL -j ACCEPT

Para obtener más detalles, consulte la salida de iptables -m conntrack --helpy man iptables-extensions.

Respuesta2

ElFlujo de paquetes en Netfilter y General NetworkingDescribe las relaciones entre los diferentes ganchos que ven un paquete. Aquí hay una parte más pequeña:

Flujo de paquetes en Netfilter y General Networking

Así que si quieres interactuarmajestuosamentecon paquetesantesnat, la elección lógica es mangle/PREROUTING: elconectarEl gancho ya rastreó el paquete: no obtendrá un estado INVÁLIDO, peronattodavía no sucedió.

Solo recuerda que iptablesnatve sólo el primer paquete y luego todo lo demás es manejado directamente porconectar, sigue sucediendo en el mismo lugar: entre mangle/PREROUTINGy la decisión de ruta.

El otro método se describe en el libro de Anton Danilov.respuesta: consultandoconectarpara verificar la dirección anterior en su tabla de búsqueda.

información relacionada