El reenvío de puertos no funciona con iptables

El reenvío de puertos no funciona con iptables

Utilizo CentOS 7 como servidor de puerta de enlace. Tiene dos interfaces de red, ens28 y ens29.

El ens28 utiliza una red privada 192.168.xx, se considera WAN. Ens29 es el área LAN con una subred 172.16.0.0.

Configuré una configuración NAT a través de iptables, para que los hosts en la subred 172... puedan acceder a Internet.

Ahora quiero que un host en la subred 172 transmita su servidor web en el puerto 443.

Mi configuración básica antes del reenvío de puertos:

# Generated by iptables-save v1.4.21 on Mon Nov 30 21:45:11 2020
*nat
:PREROUTING ACCEPT [65:4705]
:INPUT ACCEPT [1:60]
:OUTPUT ACCEPT [1:72]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -o ens28 -j MASQUERADE
COMMIT
# Completed on Mon Nov 30 21:45:11 2020
# Generated by iptables-save v1.4.21 on Mon Nov 30 21:45:11 2020
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [24:4585]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -i ens28 -o ens29 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i ens29 -o ens28 -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

En cuanto al reenvío, probé con estas reglas:

iptables -A PREROUTING -t nat -i ens28 -p tcp --dport 443 -j DNAT --to 172.16.0.202:443
iptables -A FORWARD -p tcp -d 172.16.0.202 --dport 443 -j ACCEPT

Mi configuración de iptables después de agregar las nuevas reglas:

# Generated by iptables-save v1.4.21 on Tue Dec  1 15:39:36 2020
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [434:52068]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -i ens28 -o ens29 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i ens29 -o ens28 -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -d 172.16.0.202/32 -p tcp -m tcp --dport 443 -j ACCEPT
COMMIT
# Completed on Tue Dec  1 15:39:36 2020
# Generated by iptables-save v1.4.21 on Tue Dec  1 15:39:36 2020
*nat
:PREROUTING ACCEPT [297:55943]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [7:532]
:POSTROUTING ACCEPT [7:532]
-A PREROUTING -i ens28 -p tcp -m tcp --dport 443 -j DNAT --to-destination 172.16.0.202:443
-A POSTROUTING -o ens28 -j MASQUERADE
COMMIT
# Completed on Tue Dec  1 15:39:36 2020
  1. La dirección IP del servidor web es 172.16.0.202
  2. La dirección de la tarjeta ens28 es 192.168.1.254
  3. La dirección de la tarjeta ens29 es 172.16.0.253

El puerto 443 se reenvía en el enrutador externo (192.168.1.0 > IP pública) y es visible desde Internet.

El reenvío está habilitado en sysctl:

net.ipv4.ip_forward = 1

Entonces, ¿qué me estoy perdiendo? ¿Por qué no funciona el reenvío del 172...?

Gracias de antemano.

Respuesta1

Las reglas se verifican una por una.
Cada regla posterior al rechazo será ignorada.

deberías invertir

-A FORWARD -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -d 172.16.0.202/32 -p tcp -m tcp --dport 443 -j ACCEPT

a

-A FORWARD -d 172.16.0.202/32 -p tcp -m tcp --dport 443 -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited

información relacionada