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

当我尝试访问正在侦听端口8011的Web服务器时,出现奇怪的行为我configuration了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 

我运行服务器CentOS 5.5的wmware和即时通讯尝试从同一本地电脑访问networking服务器当我尝试访问Web服务器从与Lynn 10.0.0.3:8011的Centos访问我可以很好地访问服务器。
那么closuresiptable是唯一的解决scheme?

你几乎是正确的。 问题是你的数据包永远不会返回到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 

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链。

你可以做一些事情来解决这个问题。 我的第一个build议是我build议保持统一的build议。 您可以像这样修改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 

你第二个select是在input规则后跳转。 我真的不build议这样做,因为它可能导致一些丑陋的规则,但是是一个有效的解决scheme,所以我把它放在这里:

 :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 

当你使用VMWare的机会是虚拟机networking是不同于你的,例如你的networking掩码可能是不同的等,如果你在Windows机器上做一个IPCONFIG和一个ifconfig在centos框和发布结果,你可能会得到一个更好的答案。