【iptables】增加规则和删除规则

        我们在另外一台机器上,使用ping命令,向当前机器发送报文,如下图所示,ping命令可以得到回应,证明ping命令发送的报文已经正常的发送到了防火墙所在的主机,ping命令所在机器IP地址为31.133(黑色),当前测试防火墙主机的IP地址为31.132(白色),我们就用这样的环境,对iptables进行操作演示。

3.1 增加规则

        iptables -t 表名 -I/-A 链名 -s 源地址 -j 处理动作

  • -I选项,指明将”规则”插入至哪个链中,-I表示insert,即插入的意思,默认在第一行添加
  • -A选项,在指定链的末尾添加一条规则
  • -s选项,指明”匹配条件”中的”源地址”,即如果报文的源地址属于-s对应的地址,那么报文则满足匹配条件,-s为source之意,表示源地址。
  • -j选项,指明当”匹配条件”被满足时,所对应的动作,有ACCEPT、DROP等

        那么此处,我们就在132上配置一条规则,拒绝192.168.31.133上的所有报文访问当前机器,之前一直在说,规则由匹配条件与动作组成,那么”拒绝192.168.31.

        133上的所有报文访问当前机器”这条规则中,报文的”源地址为192.168.31.133″则属于匹配条件,如果报文来自"192.168.31.133″,则表示满足匹配条件,而”拒绝”这个报文,就属于对应的动作

        此时我们可以再通过192.168.31.133去ping 192.168.21.132,看能否ping通

        如上图所示,ping 132主机时,PING命令一直没有得到回应,看来我们的iptables规则已经生效了,ping发送的报文压根没有被132主机接受,而是被丢弃了,所以更不要说什么回应了

        此时我们可以再次查看iptables中的规则,可以看到已经有186个包被对应的规则匹配到

拓展:规则的顺序问题

思考:

        现在INPUT链中已经存在了一条规则,它拒绝了所有来自192.168.31.133主机中的报文,如果此时,我们在这条规则之后再配置一条规则,后面这条规则规定,接受所有来自192.168.31.133主机中的报文,那么,iptables是否会接受来自133主机的报文呢?

        使用如下命令在filter表的INPUT中追加一条规则:

        执行完添加规则的命令后,再次查看INPUT链,发现规则已经成功”追加”至INPUT链的末尾,那么现在,第一条规则指明了丢弃所有来自192.168.31.133的报文,第二条规则指明了接受所有来自192.168.31.133的报文,那么结果到底是怎样的呢?

        在133主机上再次使用ping命令向133主机发送报文,发现仍然是ping不通的,看来第二条规则并没有生效。

        而且从上图中第二条规则的计数器可以看到,根本没有任何报文被第二条规则匹配到。发生上述情况,会不会与规则的先后顺序有关呢?测试一下,我们再添加一条规则,新规则仍然规定接受所有来自192.168.31.133主机中的报文,只是这一次,我们将新规则添加至INPUT链的最前面试试。

        使用如下命令,在filter表的INPUT链的前端添加新规则

        在第一条规则就是接受所有来自192.168.31.133的报文,而且此时计数是0,此刻,我们再从133上向132发起ping请求。

        133上已经可以正常的收到响应报文了,那么回到132查看INPUT链的规则,第一条规则的计数器已经显示出了匹配到的报文数量

        看来顺序很重要,如果报文已经被前面的规则匹配到,iptables则会对报文执行对应的动作,即使后面的规则也能匹配到当前报文,很有可能也没有机会再对报文执行相应的动作了,就以上图为例,报文先被第一条规则匹配到了,于是当前报文被”放行”了,因为报文已经被放行了,所以,即使上图中的第二条规则即使能够匹配到刚才”放行”的报文,也没有机会再对刚才的报文进行丢弃操作了。这就是iptables的工作机制。

之前提过的--line-numbers选项,可以列出规则序号

        我们也可以在添加规则时,指定新增规则的编号,这样我们就能在任意位置插入规则了,我们只要把刚才的命令稍作修改即可,如下

        iptables -t filter -I INPUT 2 -s 192.168.31.133 -j DROP

3.2 删除规则

有两种方法:

  • 方法一:根据规则的编号去删除规则

                        iptables -t 表名 -D 链名 规则编号

  • 方法二:根据具体的匹配条件与动作删除规则

                        iptables -t 表名 -D 链名 -s 源地址 -j 处理动作

(1)根据规则的编号去删除规则

先查看一下filter表中INPUT链的规则

        假设我们需要删除第14条规则,可以使用下面命令

(2)根据具体的匹配条件与动作删除规则

        删除下图中源地址为192.168.31.133,动作为ACCEPT的规则,于是,删除规则的命令如下

        删除对应规则时,仍然使用-D选项,-D INPUT表示删除INPUT链中的规则,剩下的选项与我们添加规则时一样,-s表示以对应的源地址作为匹配条件,-j ACCEPT表示对应的动作为接受,所以,上述命令表示删除INPUT链中源地址为192.168.31. 133,动作为ACCEPT的规则。

(3)清空链表中的规则

删除指定表中某条链的所有规则

                iptables -t 表名 -F 链名

        -F选项为flush之意,即冲刷指定的链,即删除指定链中的所有规则,但是注意,此操作相当于删除操作,在没有保存iptables规则的情况下,请慎用。

        其实,-F选项不仅仅能清空指定链上的规则,其实它还能清空整个表中所有链上的规则,不指定链名,只指定表名即可删除表中的所有规则,命令如下

                iptables -t 表名 -F

相关推荐

  1. Android5.1 NAT功能的iptables规则

    2023-12-29 16:20:03       24 阅读
  2. 配置Ubuntu18.04使iptables规则重启系统后仍然有效

    2023-12-29 16:20:03       68 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-29 16:20:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-29 16:20:03       101 阅读
  3. 在Django里面运行非项目文件

    2023-12-29 16:20:03       82 阅读
  4. Python语言-面向对象

    2023-12-29 16:20:03       91 阅读

热门阅读

  1. 东边日出西边雨

    2023-12-29 16:20:03       52 阅读
  2. 不停止业务的情况下优化 Elasticsearch Reindex

    2023-12-29 16:20:03       61 阅读
  3. 前端vue部署nginx多端口文件配置

    2023-12-29 16:20:03       50 阅读
  4. Redis 大/热Key故障处理流程

    2023-12-29 16:20:03       62 阅读
  5. SpringBoot--自定义starter

    2023-12-29 16:20:03       49 阅读
  6. 工作纪实40-使用redis的几种姿势

    2023-12-29 16:20:03       58 阅读