CentOS 6 - iptables 阻止通过端口 80 访问网络

bso*_*d99 6 linux centos apache-http-server iptables

我正在使用 CentOS 6.2 设置新的 Web 服务器,但无法通过 Web 进行连接。一切看起来都设置正确httpd.conf并且 Apache 正在运行,所以我假设这是一个 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
Run Code Online (Sandbox Code Playgroud)

以下回答中的建议:

[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  ]
Run Code Online (Sandbox Code Playgroud)

进一步编辑:iptables-save 在我停止 iptables 后运行它时什么也没显示!所以这是输出:

# 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
Run Code Online (Sandbox Code Playgroud)

jau*_*ume 7

iptables-save输出显示的为规则3的其他信息,该位不与所示iptables -L

iptables -L输出中,人们会认为所有流量都被接受:

ACCEPT     all  --  anywhere             anywhere
Run Code Online (Sandbox Code Playgroud)

iptables-save显示:

-A INPUT -i lo -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

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

这就是原因HTTP流量永远不会到达你的Web服务器:唯一的交通允许的是建立在规则1,ICMP(例如连接ping的规则2):-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

也就是说,在达到规则 6 之前,所有 HTTP 流量都被拒绝: -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
Run Code Online (Sandbox Code Playgroud)

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

iptables -I INPUT 5 -p tcp -m tcp --dport 80 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

或导入:

# 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
Run Code Online (Sandbox Code Playgroud)

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

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

正如这里所解释的:http://wiki.centos.org/HowTos/Network/IPTables,任何时候我们更新我们需要保存它们的规则,所以运行这个:

# /sbin/service iptables save
Run Code Online (Sandbox Code Playgroud)

使更改永久化。现在修改后的规则将由 加载iptables