Configurar el comportamiento de filtrado NAT con iptables

Configurar el comportamiento de filtrado NAT con iptables

Estoy usando esta regla para configurar SNAT:

iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 193.49.142.107:4000

Quiero especificar una regla para filtrar paquetes no destinados a la dirección interna y al puerto que inició la sesión. Además, para recibir paquetes desde un punto final externo específico, es necesario que el punto final interno envíe paquetes primero a la dirección IP de ese punto final externo específico (filtrado dependiente de la dirección NAT).

Ejemplo:

Una máquina con IP interna y puerto (X:x) que está detrás del NAT abre una conexión a un servidor con IP Y. Entonces, con la regla debo poder permitir solo conexiones provenientes de la dirección IP Y y destinadas a (X: X). Todas las demás conexiones se cancelarán.

Respuesta1

iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
iptables -P FORWARD -j DROP
iptables -A FORWARD -o eth1 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth1 -m state --state ESTABLISHED -j ACCEPT

¿Qué hacen estas reglas?

  1. -A POSTROUTING -o eth1 -j MASQUERADEoculta su IP interna cuando los paquetes salen de su red
  2. -P FORWARD -j DROPestablece la política predeterminada para su cadena FORWARD en DROP
  3. -A FORWARD -o eth1 -m state --state NEW,ESTABLISHED -j ACCEPTpermite conexiones REenviadas nuevas y establecidas
  4. -A FORWARD -i eth1 -m state --state ESTABLISHED -j ACCEPTsólo permite conexiones REenviadas establecidas en

Las reglas anteriores suponen que está utilizando esta caja como puerta de enlace/firewall conectada eth1a su WAN y eth0conectada a su LAN.

Lectura adicional:Postenrutamiento y enmascaramiento de IP

EDITAR

Para configurar el reenvío de puertos "condicional":

Por puerto de origen

iptables -A PREROUTING -t nat -i eth1 -p tcp --sport [trusted_source_port] --dport [external_port] -j DNAT --to [internal_ip]:[internal_port]
iptables -A FORWARD -p tcp -d [internal_ip] --dport [internal_port] -j ACCEPT

Por IP de origen

iptables -A PREROUTING -t nat -i eth1 -p tcp -s [trusted_source_ip] --dport [external_port] -j DNAT --to [internal_ip]:[internal_port]
iptables -A FORWARD -p tcp -d [internal_ip] --dport [internal_port] -j ACCEPT

información relacionada