Reenvío de puertos de Iptables con restricciones en algunos

Reenvío de puertos de Iptables con restricciones en algunos

Tengo un conjunto de servicios en los que me gustaría configurar ACL (lista blanca) basadas en IP para uno, pero no para el otro. Los problemas parecen aparecer cuando los servicios se ejecutan en el mismo puerto internamente (puerto 80), pero uso diferentes puertos en la puerta de enlace para acceder a ellos.

Puerto 8088 en Gateway -> Puerto 80 en 10.0.0.A (con lista blanca de IP)
Puerto 80 en Gateway -> Puerto 80 en 10.0.0.B

Y puedo hacer que esto funcione con todo abierto con las siguientes reglas:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8088 -j DNAT --to 10.0.0.A:80
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 10.0.0.B
iptables -A ADELANTE -p tcp -i eth0 --dport 80 -j ACEPTAR

El problema es que la regla FORWARD ACCEPT cubre ambas reglas nat, ya que parecen estar basadas en el puerto de destino (--dport 80), en lugar del puerto entrante en la puerta de enlace (80 vs 8088).

No puedo entender cómo reescribir la regla FORWARD en 2 reglas separadas para poder tener un comportamiento diferente para las conexiones que ingresan a la puerta de enlace en 80 frente a 8088.

Información adicional:

lsb_release -d
Descripción: Debian GNU/Linux 7.5 (silbido)
iptables --versión
iptables v1.4.14

1er intento de solución Pude separar una cadena y realizar el enrutamiento allí, pero no puedo agregar la línea ACL (rechazar) debido al siguiente mensaje de error:

x_tables: ip_tables: REJECT target: solo válido en la tabla de filtros, no en nat

Esto es lo que puse:

iptables -t nat -N Lista blanca
iptables -t nat -A Lista blanca -p tcp -j DNAT --to 10.0.0.A:80
iptables -t nat -A Lista blanca -s <whatsmyip.org> -j RETURN
iptables -t nat -A Lista blanca -j RECHAZAR
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8088 -j Lista blanca

Todo funciona bien hasta la línea 4, donde falla el REJECT dentro de nat. Si comento la línea REJECT, puedo confirmar que el resto de la lógica funciona y que el puerto queda abierto porque no se rechaza nada.

Siguiente intento de solución Parece estar tropezando con el problema original mientras trabaja con una cadena separada correctamente configurada. La regla PREROUTING que cambia el puerto desde la parte superior todavía parece causar un problema con el intento de ACL no nat. Las reglas de ACL no tienen efecto y el puerto está abierto a la naturaleza.

iptables -N Lista blanca
iptables -A Lista blanca -s <whatsmyip.org> -j RETURN
iptables -A Lista blanca -j RECHAZAR
iptables -A ENTRADA -i eth0 -p tcp --dport 8088 -j Lista blanca
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8088 -j DNAT --to 10.0.0.A:80

Intento de solución n.º 3 Primero intenté configurar la lista blanca y luego intenté la redirección de puertos después de la resolución de la lista blanca. Mientras se cargan las reglas, no tienen el efecto deseado ya que el tráfico no llega al destino previsto desde la IP incluida en la lista blanca. Aunque en realidad no estoy 100% seguro de cuál es realmente el comportamiento. No puedo saber si el tráfico se rechaza en iptables, o tal vez la conexión se acepta y se envía al destino en el puerto 8088 sin cambiar el puerto. No estoy seguro de cómo verificar si realmente se está realizando la redirección del puerto. Aquí están las reglas para este intento:

iptables -N Lista blanca
iptables -A Lista blanca -s <whatsmyip.org> -j RETURN
iptables -A Lista blanca -j RECHAZAR
iptables -A ENTRADA -i eth0 -p tcp --dport 8088 -j Lista blanca
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8088 -j DNAT --to 10.0.0.A
iptables -t nat -A SALIDA -p tcp --dport 8088 -j REDIRECT --to-ports 80

Estado actual Irresoluto. No estoy seguro de si debería ver si puedo encontrar otra forma de redirigir el puerto después de la lista blanca, o si hay una manera fácil de determinar dónde está fallando la solución actual (¿está reenviando a través de 8088 sin la redirección 80, o simplemente está siendo ¿obstruido?)

Respuesta1

Cambiar

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8088 -j DNAT --to 10.0.0.A:80

para saltar a una cadena definida por usuario que implementa sus ACL. P.ej,

iptables -t nat -N foo
iptables -t nat -A foo --source 192.168.0.0/24 -j RETURN
iptables -t nat -A foo -j REJECT

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8088 -j foo

Editar:

iptables -N foo
iptables -A foo --source 192.168.0.0/24 -j RETURN
iptables -A foo -j REJECT
iptables -A INPUT -i eth0 -p tcp --dport 8088 -j foo

Usted diseña su filtrado de paquetes ignorando por completo cualquier NAT que esté realizando.

información relacionada