¿Cuál es la diferencia entre PREROUTING y FORWARD en iptables?

16

Estoy tratando de entender cómo funciona este sistema y tengo problemas para entender la diferencia entre usar NAT PREROUTING o filter FORWARD. Por lo que entiendo, el PREROUTE puede enviar el paquete a otro servidor, evitando el filtro. Si NAT puede manejar esto a través de PREROUTE, ¿cuál es el propósito de tener una regla FORWARD en el filtro?

GheorGhe
fuente

Respuestas:

25

Tabla NAT :

Esta tabla solo debe usarse para NAT (traducción de direcciones de red) en diferentes paquetes. En otras palabras, solo debe usarse para traducir el campo de origen del paquete o el campo de destino.

Tabla de filtro :

La tabla de filtros se utiliza principalmente para filtrar paquetes. Podemos unir paquetes y filtrarlos de la forma que queramos. Este es el lugar donde realmente tomamos medidas contra los paquetes y observamos lo que contienen y los DEJAMOS o ACEPTAMOS, dependiendo de su contenido. Por supuesto, también podemos hacer un filtrado previo; sin embargo, esta tabla en particular es el lugar para el que se diseñó el filtrado.

En el recorrido de tablas y cadenas podemos ver que la cadena FORWARD del filtro se atraviesa solo por paquetes reenviados (paquetes que provienen de la red Y salen a la red), es decir, su computadora está actuando como un enrutador, mientras que la cadena PREROUTING de la nat está atravesada por ambos reenviados paquetes y paquetes cuyo destino es el host local.

Debe usar PREROUTING de nat solo para cambiar la dirección de destino de los paquetes y el FORWARD del filtro solo para filtrar (descartar / aceptar paquetes).

Si obtenemos un paquete en la primera decisión de enrutamiento que no está destinado a la máquina local en sí, se enrutará a través de la cadena FORWARD. Si, por otro lado, el paquete está destinado a una dirección IP que la máquina local está escuchando, enviaríamos el paquete a través de la cadena INPUT y a la máquina local. ingrese la descripción de la imagen aquí Los paquetes pueden estar destinados a la máquina local, pero la dirección de destino puede cambiarse dentro de la cadena PREROUTING haciendo NAT. Como esto tiene lugar antes de la primera decisión de enrutamiento, el paquete se examinará después de este cambio. Debido a esto, la ruta puede cambiarse antes de que se tome la decisión de ruta. Tenga en cuenta que todos los paquetes pasarán por una u otra ruta en esta imagen. Si DNAT devuelve un paquete a la misma red de la que proviene, seguirá viajando por el resto de las cadenas hasta que vuelva a estar en la red.

Eric Carvalho
fuente
5

PREROUTING : esta cadena se utiliza para tomar decisiones relacionadas con el enrutamiento antes de ( PRE ) enviar cualquier paquete. Recuerde siempre que en la tabla, por PREROUTING/POSTROUTINGejemplo NAT, los ACCEPT/DROP/REJECTobjetivos de la FILTERtabla predeterminada no funcionarán. La NATtabla solo se usa para tomar decisiones de enrutamiento. Debe usarlo PREROUTINGal tomar decisiones de enrutamiento, es decir, las decisiones que deben tomarse antes de que el paquete comience a atravesar la red. Aquí hay un ejemplo, estamos redirigiendo cualquier tráfico que acaba de llegar al servidor en el puerto 80 al puerto 8080:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080

FORWARD : como su nombre lo indica, la FORWARDcadena de la FILTERtabla se utiliza para reenviar los paquetes desde un origen a un destino, aquí el origen y el destino son dos hosts diferentes. Entonces, como puede imaginar, las FORWARDreglas se usan básicamente en servidores donde un host envía / recibe tráfico de otro host a través del servidor. Cuando el paquete se genera desde el servidor, la cadena es, es OUTPUTdecir, el tráfico sale de sí mismo, mientras que la INPUTcadena significa que los paquetes están destinados solo al servidor. Aquí hay un ejemplo de FORWARDcadena donde cualquier TCPtráfico recibido en el puerto 80 en la interfaz eth0destinada al host 192.168.0.4será aceptado y enviado a 192.168.0.4:

iptables -A FORWARD -i eth0 -p tcp --dport 80 -d 192.168.0.4 -j ACCEPT
heemayl
fuente
Su uso de "hosts" parece extraño. La tabla que se utiliza cuando depende principalmente de las interfaces locales en las que ha entrado un paquete y está destinado a salir.
Guntbert
¿Qué parte parece extraña? He usado la noción de anfitriones para indicar las partes que envían y reciben ...
heemayl
Estoy hablando del párrafo ADELANTE: esa tabla se usa cuando un paquete que ingresa a través de una interfaz está destinado a otra interfaz (en oposición al host local)
guntbert
oh ... ok ... lo tengo ... sí, debería usar la interfaz ... solo usar hosts para que sea fácil imaginar ... cambiaré eso cuando esté frente a mi computadora.
heemayl
@ Guntbert: tengo la cabeza recta. No leí su último comentario con suficiente cuidado. Creo que te equivocas en el contexto de dos interfaces diferentes para la FORWARDcadena. Cuando se transfieren paquetes de un host de una LAN a otro host de una LAN, los paquetes pasarán a través de una sola interfaz y la cadena utilizada será FORWARDaunque aquí el servidor (medio) no actuará como un enrutador en sentido estricto más bien se puede considerar como un interruptor.
heemayl