Iptables 在“-A INPUT -j REJECT --reject-with icmp-host-prohibited”后附加规则默认值

Iptables 在“-A INPUT -j REJECT --reject-with icmp-host-prohibited”后附加规则默认值

我使用 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(因为您告诉它将规则附加到现有规则集)。您有几种选择:

  1. 您可以简单地/etc/sysconfig/iptables手动编辑,插入所需的规则,然后运行service iptables restart
  2. 您可以使用该lokkit工具来修改防火墙。例如,lokkit -p 80:tcp。这将自动更新/etc/sysconfig/iptables以及活动防火墙。
  3. 您可以使用-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这将会完成你所要求的事情。

相关内容