recorrido de iptables y las políticas de cadena, edición manual

recorrido de iptables y las políticas de cadena, edición manual

Me gusta editar el archivo iptables manualmente, pero hay algo que me confunde un poco.

Según tengo entendido, iptables en el manual recorre las reglas de arriba a abajo y, si no es posible ninguna coincidencia, las reglas predeterminadas en la parte inferior lo registrarán y lo negarán.

Todo está bien.

Pero, ¿qué significan estos?

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
<accept ssh, ssl, etc>
<log all, deny all>

Las cadenas en la parte superior tienen la política predeterminada "aceptar". ¿Es esto solo una forma de decir que aceptamos los paquetes en la filtertabla para compararlos más tarde? Para mí, después de leer el manual, siento como si aceptara todo y luego no leyera las reglas, porque así es como funcionan las reglas de forma predeterminada: si algo coincide, dejará de leer las reglas y luego hará lo que dice la política. ¿Alguna documentación de este comportamiento? No puedo encontrar nada lo suficientemente específico.

También he visto esto, después de la *filtertabla:

*filter
:RH-Firewall-1-INPUT - [0:0]

Lo que le brinda la posibilidad de agregar sus propias cadenas y enrutar otras cadenas a esta cadena:

-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT

Pero aquí "ACEPTAR" o "DROP" no se especifica en absoluto para esta cadena, sino que hay un guión (-).

Lo que me confunde aún más: ¿cómo funciona?

Respuesta1

  1. La política de una cadena incorporada determina qué sucede con los paquetes que superan todas las reglas de la cadena sin hacer coincidir ninguna con un objetivo dispositivo. En el ejemplo anterior, los paquetes que recorran toda la FORWARDcadena sin coincidir con ninguna regla con un objetivo dispositivo serán ACCEPTeliminados, porque la política de la cadena es ACCEPT.

  2. Las cadenas definidas por el usuario no pueden tener una política. Los paquetes que pasan a través de una cadena definida por el usuario sin coincidir con una regla con un destino dispositivo regresan a la cadena desde la cual fueron enviados a la cadena definida por el usuario (la "cadena de llamada") en la regla después de la que envió ellos allí.

Adispositivoobjetivo es aquel que dispone de un paquete; los ejemplos incluyen DROP, ACCEPTy MASQUERADE; Los objetivos no dispositivos incluyen LOGy el objetivo nulo (es bastante legal tener una regla que no tenga objetivo). Cuando un paquete coincide con una regla con un destino dispositivo, el paquete se considera eliminado y no se produce ningún procesamiento adicional de la regla. Cuando un paquete coincide con una regla sin un destino dispositivo, el procesamiento del paquete continúa en la siguiente regla.

Un corolario importante de esta lógica sobre la coincidencia de objetivos y la disposición es quevictorias del primer partido decisivo. Con demasiada frecuencia vemos preguntas sobre ciencia ficción donde la gente tiene una cadena que dice, por ejemplo,

Chain INPUT (policy ACCEPT 210 packets, 22621 bytes)
 pkts bytes target     prot opt in     out     source        destination         
3224K 1330M DROP       tcp  --  *      *       0.0.0.0/0     0.0.0.0/0     tcp dpt:80

que contiene una única regla para bloquear el acceso a un servidor web ( tcp dpt:80). Quieren permitir que una única dirección IP externa, digamos 1.2.3.4, acceda a este servidor web, por lo que agregan una regla con

iptables -A INPUT -p tcp --dport 80 -s 1.2.3.4 -j ACCEPT

y terminan con una cadena como esta

Chain INPUT (policy ACCEPT 210 packets, 22621 bytes)
 pkts bytes target     prot opt in     out     source        destination         
3224K 1330M DROP       tcp  --  *      *       0.0.0.0/0     0.0.0.0/0     tcp dpt:80
    0     0 ACCEPT     tcp  --  *      *       1.2.3.4       0.0.0.0/0     tcp dpt:80

Como puede ver, los recuentos de paquetes según la última regla son cero:y siempre serán cero. Ningún paquete puede coincidir con esa última regla sin haber coincidido con el anterior, y el anterior es dispositivo ( DROP), por lo que ningún paquete alcanzará esa última regla.

La forma de abordar esto correctamente esasegúrese de que sus excepciones estén antes que sus reglas, como esto:

Chain INPUT (policy ACCEPT 210 packets, 22621 bytes)
 pkts bytes target     prot opt in     out     source        destination         
   20   875 ACCEPT     tcp  --  *      *       1.2.3.4       0.0.0.0/0     tcp dpt:80
3224K 1330M DROP       tcp  --  *      *       0.0.0.0/0     0.0.0.0/0     tcp dpt:80

Ahora, las aceptaciones excepcionales se manejan primero, luego se manejan y descartan otros paquetes del servidor web que no provienen del servidor excepcional y, finalmente, la política de cadena se encarga de todos los demás paquetes y los acepta.

información relacionada