当您在路由器后面访问您的 httpd(wmware 上的 centos)时,是否需要停止 iptables?

当您在路由器后面访问您的 httpd(wmware 上的 centos)时,是否需要停止 iptables?

当我尝试访问正在监听端口 8011 的 Web 服务器时出现了奇怪的行为,我确实配置了 iptables 来启用此端口,它看起来像这样:

> :INPUT ACCEPT [0:0] :FORWARD ACCEPT
> [0:0] :OUTPUT ACCEPT [844:101801]
> :RH-Firewall-1-INPUT - [0:0]
> -A INPUT -j RH-Firewall-1-INPUT
> -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
> -A INPUT -p tcp -m tcp --dport 8011 -j ACCEPT
> -A INPUT -p tcp -m tcp --dport 81 -j ACCEPT
> -A FORWARD -j RH-Firewall-1-INPUT
> -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
> -A RH-Firewall-1-INPUT -i lo -j ACCEPT
> -A RH-Firewall-1-INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
> -A RH-Firewall-1-INPUT -p esp -j ACCEPT
> -A RH-Firewall-1-INPUT -p ah -j ACCEPT
> -A RH-Firewall-1-INPUT -d 224.0.0.251 -p udp -m udp --dport 5353 -j ACCEPT
> -A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
> -A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
> -A RH-Firewall-1-INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
> -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
> -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited

我在 wmware 上运行 Centos 5.5 服务器,并尝试从同一台本地 PC 访问 Web 服务器。当我尝试使用 lynx 10.0.0.3:8011 从 Centos 中访问 Web 服务器时,我可以正常访问服务器。
那么关闭 iptable 是唯一的解决方案吗?

答案1

您几乎说对了。问题是您的数据包永远不会返回到 INPUT 链,因为在 RH-Firewall-1-INPUT 末尾有一个默认拒绝,它匹配所有没有允许的内容。

要分解链中发生的事情:

:INPUT ACCEPT [0:0] :FORWARD ACCEPT
[0:0] :OUTPUT ACCEPT [844:101801]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT

输入接口中的所有内容都将由 RH-Firewall-1-INPUT 处理,如果数据包与链不匹配,我们将返回此处。

-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 8011 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 81 -j ACCEPT

当且仅当没有匹配时,这些才会在 RH-Firewall-1-INPUT 之后进行处理。

-A FORWARD -j RH-Firewall-1-INPUT

您的正向链也应用了 RH-Firewall-1-INPUT 规则

-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p esp -j ACCEPT
-A RH-Firewall-1-INPUT -p ah -j ACCEPT
-A RH-Firewall-1-INPUT -d 224.0.0.251 -p udp -m udp --dport 5353 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

这是一些默认的 RH 内容 -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited 此规则匹配全部数据包。并拒绝它们,因为我们匹配所有数据包,所以我们永远不会返回到 INPUT 链。

您可以做几件事来解决这个问题。我的第一个建议是我建议保持统一。您可以像这样修改 RH-Firewall-1-INPUT 链:

-A RH-Firewall-1-INPUT -p tcp -m tcp -m state --state NEW --dport 443 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp -m state --state NEW --dport 8011 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp -m state --state NEW--dport 81 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p esp -j ACCEPT
-A RH-Firewall-1-INPUT -p ah -j ACCEPT
-A RH-Firewall-1-INPUT -d 224.0.0.251 -p udp -m udp --dport 5353 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

您的第二个选项是输入规则后跳转。我真的不建议这样做,因为它可能会导致一些丑陋的规则,但它是一个有效的解决方案,所以我把它放在这里:

:INPUT ACCEPT [0:0] :FORWARD ACCEPT
[0:0] :OUTPUT ACCEPT [844:101801]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 8011 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 81 -j ACCEPT
-A INPUT -j RH-Firewall-1-INPUT

答案2

由于您使用的是 VMWare,因此虚拟机网络可能与您的网络不同,例如,您的网络掩码可能不同等等,如果您在 Windows 机器上执行 ipconfig,在 centos 机器上执行 ifconfig,然后发布结果,您可能会得到更好的答案。

相关内容