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

tun*_*gns 9 iptables

我在 CentOS 6.4 上使用 iptables 为 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
Run Code Online (Sandbox Code Playgroud)

当我列出规则时,我可以看到这样的 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 
Run Code Online (Sandbox Code Playgroud)

但是我无法从其他机器连接到 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
Run Code Online (Sandbox Code Playgroud)

我不得不手动放置该行:

-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

-A INPUT -j REJECT --reject-with icmp-host-prohibited
Run Code Online (Sandbox Code Playgroud)

然后当我重新启动 iptables 服务时。有效!

那么如何以正确的方式附加新规则呢?谢谢!

lar*_*sks 19

-Aiptables的命令只是“附加”一个规则。因此,如果您现有的规则集如下所示:

ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh 
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited 
Run Code Online (Sandbox Code Playgroud)

你运行:

# /sbin/iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

那么当然这将在REJECT规则之后结束(因为你告诉它把规则附加到现有的规则集)。你有几个选择:

  1. 您可以简单地/etc/sysconfig/iptables手动编辑,插入您想要的规则,然后运行service iptables restart.
  2. 您可以使用该lokkit工具来修改防火墙。例如,lokkit -p 80:tcp。这将自动更新/etc/sysconfig/iptables以及活动防火墙。
  3. 您可以使用-I <num>标志 toiptables在列表中的指定位置插入规则。该--line-numbers标志可用于确定<num>应该是什么。您需要service iptables save在以这种方式进行更改后运行。

如果您真的希望能够仅使用附加命令来执行此类操作,则需要先执行一些设置。创建一个新链(称为,也许,allow_services):

iptables -N allow_services
Run Code Online (Sandbox Code Playgroud)

INPUT在适当的位置向您的链添加一条规则以跳转到此新链:

iptables -I INPUT 5 -j allow_services
Run Code Online (Sandbox Code Playgroud)

从那时起,您可以简单地将新服务附加到allow_services链中:

iptables -A allow_services -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

假设您将跳转规则(-j 选项)放在决赛之前,REJECT这将满足您的要求。