CentOS 6-iptables 阻止通过端口 80 进行 Web 访问

CentOS 6-iptables 阻止通过端口 80 进行 Web 访问

我正在使用 CentOS 6.2 设置新的 Web 服务器,但无法通过 Web 进行连接。一切看起来都设置正确,httpd.confApache 正在运行,因此我假设这是 iptables 问题。

以下是否存在可能导致该问题的原因?

编辑:如果我停止 iptables,我可以正常连接,所以下面肯定需要调整一些东西。我已经运行iptables -A INPUT -p tcp --dport 80 -j ACCEPT并保存并重新启动了 iptables,但没有什么变化

# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     icmp --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:http

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

遵循以下答案中的建议:

[root@staging ~]# iptables -N TCP
[root@staging ~]# iptables -A TCP -p tcp --dport 80 -j ACCEPT
[root@staging ~]# iptables-save > /etc/iptables/iptables.rules
-bash: /etc/iptables/iptables.rules: No such file or directory
[root@staging ~]# iptables-save
# Generated by iptables-save v1.4.7 on Thu Nov  8 14:09:09 2012
*filter
:INPUT ACCEPT [91:7480]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [70:6556]
:TCP - [0:0]
-A TCP -p tcp -m tcp --dport 80 -j ACCEPT
COMMIT
# Completed on Thu Nov  8 14:09:09 2012
[root@staging ~]# iptables-restore
^C
[root@staging ~]# service iptables start
iptables: Applying firewall rules:                         [  OK  ]

进一步编辑:在我停止 iptables 之后运行 iptables-save 时,它​​没有显示任何内容!因此,输出如下:

# iptables-save
# Generated by iptables-save v1.4.7 on Thu Nov  8 14:39:10 2012
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [28:3344]
-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 INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Thu Nov  8 14:39:10 2012

答案1

输出iptables-save显示了规则 3 的以下未显示的附加信息iptables -L

iptables -L输出结果来看全部接受流量:

ACCEPT     all  --  anywhere             anywhere

iptables-save显示:

-A INPUT -i lo -j ACCEPT

这意味着iptables确实接受所有流量……但仅接受来自环回接口(lo)。

这就是 HTTP 流量永远无法到达您的 Web 服务器的原因:唯一允许的流量是规则 1 中建立的连接、ping规则 2 中的 ICMP(例如):-A INPUT -p icmp -j ACCEPT以及规则 4 中的 SSH -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT:。

那么规则 5 中的所有内容都会被拒绝:-A INPUT -j REJECT --reject-with icmp-host-prohibited

也就是说,所有 HTTP 流量在到达规则 6 之前都会被拒绝:-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

纠正删除规则6(-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT):

iptables -D INPUT 6

并将其(选项-I)插入为规则 5:

iptables -I INPUT 5 -p tcp -m tcp --dport 80 -j ACCEPT

或者导入这个:

# Generated by iptables-save v1.4.6 on Thu Nov  8 16:46:28 2012
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [40:5423]
-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 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Thu Nov  8 16:46:28 2012

通过将其保存到文件中并执行iptables-restore < file

编辑:OP 注意到重新启动后新规则丢失iptables

如此处所述:http://wiki.centos.org/HowTos/Network/IPTables,每次我们更新规则时都需要保存它们,因此运行以下命令:

# /sbin/service iptables save

使更改永久生效。现在修改后的规则将通过 加载iptables

答案2

我不是 iptables 大师,但我的设置方式是使用单独的自定义链来打开端口:

iptables -N TCP
iptables -A TCP -p tcp --dport 80 -j ACCEPT

确保保存

iptables-save > /etc/iptables/iptables.rules

加载

iptables-restore < /etc/iptables/iptables.rules

^^ 如果守护进程没有为您加载它。我看到您说您已经运行了上面描述的方法(仅针对 INPUT 链,我认为这并不重要),所以我相信您可能没有正确保存和重新加载。您的 iptables 守护进程是否运行正常?确保在运行上述命令并使用 iptables -L 后,您会看到新添加的链和规则。


针对您的进一步麻烦。iptables-save > location_of_rules 我不确定它在 CentOS 上的位置。但可以使用 iptables -L 检查新链是否存在

我还建议您检查一下您的网站是否无法访问。为此,请转到您的网络浏览器(在计算机上),然后输入网址 http://127.0.0.1/<- 不带 : 和 // 之间的空格。如果网站可以访问,则问题出在您的路由器上。您需要进行端口转发以打开防火墙中的端口。http://en.wikipedia.org/wiki/Port_forwarding

相关内容