linux - una - iptables ADELANTE e ENTRADA
ver iptables centos (2)
Tengo una red doméstica con Linux PC, que todos tenían iptables funcionando. Creo que es más fácil poner mi LAN detrás de una puerta de enlace / firewall de Linux, así que puse una PC (con fedora, no gui) entre mi enrutador y LAN y configuré iptables. No hay problema aquí, INPUT solo permite dns en http (y algunas cosas locales), el reenvío funciona bien: LAN se conecta a internet.
Pero mi pregunta es: ¿FORWARD permite todo desde el exterior o solo los puertos que configuré con INPUT? ¿FORWARD e INPUT trabajan juntos o están separados?
Este es mi iptables:
*nat
:PREROUTING ACCEPT [16:1336]
:INPUT ACCEPT [14:840]
:OUTPUT ACCEPT [30:2116]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -o p1p1 -j MASQUERADE
COMMIT
# Completed on Tue Oct 16 09:55:31 2012
# Generated by iptables-save v1.4.14 on Tue Oct 16 09:55:31 2012
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [91:9888]
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p UDP --dport 53 -j ACCEPT
-A INPUT -p TCP --dport 53 -j ACCEPT
-A INPUT -s 192.168.1.0/24 -i p1p1 -p tcp -m multiport --dports 20,21 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -s 192.168.2.0/24 -i p3p1 -p tcp -m multiport --dports 20,21 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -s 192.168.1.0/24 -i p1p1 -p tcp -m tcp --dport 5000:5100 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -s 192.168.2.0/24 -i p3p1 -p tcp -m tcp --dport 5000:5100 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -i p1p1 -p tcp -m tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -s 192.168.2.0/24 -i p3p1 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -s 192.168.1.0/24 -i p1p1 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -i p1p1 -p tcp -m multiport --dports 20,21,443 -j DROP
-A INPUT -i p1p1 -p tcp --dport 5000:5100 -j DROP
-A INPUT -i p1p1 -p icmp -m icmp --icmp-type 8 -j DROP
-A FORWARD -s 192.168.2.0/24 -j ACCEPT
-A FORWARD -d 192.168.2.0/24 -j ACCEPT
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
-A OUTPUT -j LOG --log-prefix "denied out: "
COMMIT
p1p1 (.1.x) es mi nic externo, p3p1 (.2.x) es interno.
ENTRADA, AVANCE y SALIDA son independientes. Un paquete solo llegará a una de las tres cadenas.
Si el destino es a este servidor, llega a la cadena de ENTRADA. Si su fuente es de este servidor, llega a SALIDA. Si su origen y destino son otras dos máquinas, se está enrutando a través del servidor, entonces llega a la cadena FORWARD.
RedHat tiene un gran documento sobre iptables (un poco largo), pero el tema a cubrir es complejo y hay tantos casos de uso diferentes que no veo cómo evitarlo.
Aquí está el capítulo sobre las reglas de FORWARD y NAT . Como dice:
Por ejemplo, si desea reenviar las solicitudes HTTP entrantes a su servidor HTTP Apache dedicado en 172.31.0.23 , use el siguiente comando como usuario root:
~]# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 172.31.0.23:80
Esto es lo que pasa:
- su puerta de enlace de Linux recibe un paquete de su enrutador. El encabezado del paquete tiene:
- fuente:
xxxx:y
(IP del remitente desde Internet y puerto de origen utilizado para la transmisión de paquetes) - destino:
192.168.1.1:80
(asumiendo que la IP de la puerta de enlace de Linux en una NIC externa, es decir,p1p1
)
- fuente:
- su puerta de enlace de Linux aplica la cadena PREROUTING para encontrar una coincidencia. Suponiendo que haya escrito lo que está arriba, el paquete coincide con la regla y luego llama (salta
-j
) a la función DNAT ( Traducción de dirección de red de destino ) que cambia el destino del encabezado del paquete desde el192.168.1.1:80
inicial hasta el172.31.0.23:80
. - Entonces, el paquete llega a la decisión de enrutamiento . El destino del paquete es ahora
172.31.0.23:80
.- Su puerta de enlace de Linux se pregunta: ¿Es para mí (
192.168.1.1:80
)? No, así que no lo enviaré a la cadena INPUT . - => Lo enviaré a la cadena FORWARD .
- Su puerta de enlace de Linux se pregunta: ¿Es para mí (
- ya que ha establecido las reglas en FORWARD all en su red local (cadena de
filter
tablaFORWARD
), el paquete debe reenviarse correctamente a su servidor HTTP Apache local (por ejemplo).
Espero que ayude a comprender un poco más cómo funciona el enrutamiento interno con iptables.