我使用 iptables 在 CentOS 6.4 上为 HTTP 打开端口 80 我通常使用 vim 来编辑 /etc/sysconfig/iptables 但这次我使用 /sbin/iptables 命令。
# /sbin/iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
# service iptables save
# service iptables restart
当我列出规则时,我可以看到如下 http:
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:http
但是我无法从其他机器连接到 Web 服务器,我检查了 iptables 文件,看到如下内容:
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [88:9264]
-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 state --state NEW -m tcp --dport 80 -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
我不得不手动输入以下行:
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
前
-A INPUT -j REJECT --reject-with icmp-host-prohibited
然后我重新启动 iptables 服务。成功了!
那么如何才能正确地添加新规则?谢谢!
答案1
iptables命令-A
只是“附加”一条规则。因此,如果您现有的规则集如下所示:
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
然后你运行:
# /sbin/iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
然后,这当然会在规则之后结束REJECT
(因为您告诉它将规则附加到现有规则集)。您有几种选择:
- 您可以简单地
/etc/sysconfig/iptables
手动编辑,插入所需的规则,然后运行service iptables restart
。 - 您可以使用该
lokkit
工具来修改防火墙。例如,lokkit -p 80:tcp
。这将自动更新/etc/sysconfig/iptables
以及活动防火墙。 - 您可以使用
-I <num>
标志将iptables
规则插入列表中的指定位置。该--line-numbers
标志对于确定<num>
应该是什么很有用。您需要service iptables save
在以这种方式进行更改后运行。
如果您确实希望仅使用附加命令即可完成此类操作,则需要先进行一些设置。创建一个新链(可能称为allow_services
):
iptables -N allow_services
INPUT
并在适当的位置向您的链中添加一条跳转到这个新链的规则:
iptables -I INPUT 5 -j allow_services
从那时起,您可以简单地将新服务附加到allow_services
链中:
iptables -A allow_services -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
假设你将跳跃规则(选项-j
)放在决赛之前,REJECT
这将会完成你所要求的事情。