端口转发无法与 iptables 配合使用

端口转发无法与 iptables 配合使用

我使用 CentOS 7 作为网关服务器。它有两个网络接口,ens28 和 ens29。

ens28 使用私有 192.168.xx 网络,它被视为 WAN。Ens29 是具有 172.16.0.0 子网的 LAN 区域。

我通过 iptables 配置了 NAT 配置,因此 172... 子网上的主机可以访问互联网。

现在我想要子网 172 上的主机在端口 443 上广播其 Web 服务器。

我的端口转发之前的基本配置:

# 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

至于转发,我尝试了以下规则:

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

添加新规则后的 iptables 配置:

# 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. Web 服务器主机的 IP 地址是 172.16.0.202
  2. ens28卡的地址是192.168.1.254
  3. ens29卡的地址是172.16.0.253

端口 443 在外部路由器(192.168.1.0 > 公共 IP)上转发,并且可以从互联网上看到。

在 sysctl 中启用转发:

net.ipv4.ip_forward = 1

那么,我遗漏了什么?为什么 172... 的转发不起作用?

提前致谢。

答案1

规则将逐条检查。
拒绝之后的每个规则都将被忽略。

你应该反转

-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 FORWARD -d 172.16.0.202/32 -p tcp -m tcp --dport 443 -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited

相关内容