Máquina Ubuntu que ejecuta haproxy con 2 tarjetas de red, 1 conectada a WAN (llamada wan0) y otra conectada a LAN (llamada lan0). Todas las cadenas configuradas para DROP tráfico.
# Masquerade traffic from LAN to WAN
-A POSTROUTING -o wan0 -s 192.168.x.x/24 -j MASQUERADE
# Allow traffic from LAN to WAN
iptables -I FORWARD -i lan0 -o wan0 -j ACCEPT
# Allow HTTP traffic in/out both interfaces
-A INPUT -p tcp --dport 80 -j ACCEPT
-A OUTPUT -p tcp --sport 80 -j ACCEPT
*** Is below rule needed? ***
# -A FORWARD -i wan0 -o lan0 -p tcp –dport 80 -j ACCEPT
Quiero permitir el tráfico HTTP (puerto 80) desde la WAN a la LAN, donde haproxy lo enrutará a los servidores backend. La documentación que he leído dice:
"ENTRADA, ADELANTE y SALIDA están separados. Un paquete sólo llegará a una de las tres cadenas".
¿Me falta alguna regla de iptable que enrute el tráfico HTTP (puerto 80) entre interfaces?
Respuesta1
Como dijiste, tienes la política de cadena predeterminada configurada en DROP
. Por lo tanto, debe tener ACCEPT
una regla explícita para cada tipo de tráfico que desee permitir.
La siguiente regla permitirá que el tráfico pase por su caja proveniente de lan0
la interfaz y salga de ella wan0
.
iptables -I FORWARD -i lan0 -o wan0 -j ACCEPT
Además, es una buena idea permitir otros tipos de tráfico como RELACIONADO y ESTABLECIDO usando una regla como:
iptables -I FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
Esto es necesario para permitir el paso del tráfico de respuesta. Haz lo mismo con las cadenas INPUT
y OUTPUT
.
Realmente depende de tus necesidades y de lo que quieras permitir y negar.
En cuanto a la frase:
"ENTRADA, ADELANTE y SALIDA están separados. Un paquete sólo llegará a una de las tres cadenas".
Sí, es cierto. Un paquete llegará a:
INPUT
cadena cuando está destinada a la máquina local.OUTPUT
cadena cuando se origina en la máquina local.FORWARD
de lo contrario, la cadena (se recibe de otra máquina y debe reenviarse a otra máquina).