iptables-自定义链

-
-
2024-05-15

 

1、为什么要使用自定义链

此前我们一直在iptables的默认链中定义规则,那么此处,我们就来了解一下自定义链。这里可能有疑问,iptables的默认链就已经能够满足我们了,为什么还需要自定义链呢?

当默认链中的规则非常多时,不便于管理。假设INPUT链中存放了200条规则,这200条规则有针对80端口的,有针对22端口的,有针对私网IP的,等等。 假如想修改针对80端口的规则,可能需要从头到尾看一遍200条规则,找出哪些规则是针对80端口。这显然不合理。所以,我们需要使用自定义链,通过自定义链即可解决上述问题。 假设,我们自定义一条链,链名叫 IN_HTTP ,我们可以将所有针对80端口入站规则都写入到这条自定义链中,当以后想要修改针对80端口入站规则时,就直接修改IN_HTTP 链中的规则就可以了。 即使默认链中有再多的规则,也没有关系,因为所有针对80端口的入站规则都存放在 IN_HTTP 链中。同理,我们可以将针对22端口的出站规则放入到OUT_SSH自定义链中,这样,我们就能快速定位到想修改的规则在哪里。

区别:
自定义链和内置的链有一个最大的区别就是:自定义链默认不会生效,需要在内置的 5 条链引用才会生效。怎么引用呢? -j 指定动作/自定义链。
对于自定义链怎么和表关联,这是由 /sbin/iptables 命令指定的,在创建自定义链的时候就关联上了。

 

2、自定义链基本应用

 

2.1、在 filter 表中,添加一个自定义链

iptables -t filter -N IN_MYSQL

#-t :指定表为 filter,若不指定,默认也是 filter
#-N :自定义链名称
在这里插入图片描述

红色方框内的是我们刚刚创建的自定义链
蓝色方框内的是 docker 自己创建的自定义链。这里先不管
括号内的信息表示链的引用次数, 1 表示1 次引用,0 表示没有引用

2.2、给自定义链配置对应的规则

IN_MYSQL 链配置规则:只允许 172.16.0.0/16 网段访问

iptables -t filter -I IN_MYSQL -p tcp -m tcp -s 172.16.0.0/16 --dport 3306 -j ACCEPT
iptables -t filter -A IN_MYSQL -p tcp -m tcp --dport 3306 -j REJECT
  • -I :插入规则,后面指定链名
  • -A :追加规则,后面指定链名

在这里插入图片描述

 

2.3、激活自定义链生效

INPUT 链中引用 IN_MYSQL

iptables -t filter -I INPUT -j IN_MYSQL
  • -j :指定处理动作/自定义链,这里就是自定义链的引用

在这里插入图片描述
引用之后我们再来看现在的状态, IN_MYSQL 链的引用次数已经变成了 1,此时在看 INPUT 链中的规则,target 的值正是自定义链 IN_MYSQL

3、如何删除自定义链

 

3.1、删除自定义链需要满足两个条件

1、自定义链没有被引用 2、自定义链中没有任何规则

 

3.2、删除自定义链

 

  • 清空自定义链中的规则
iptables -t filter -F IN_MYSQL

 

  • 删除INPUT引用
iptables -t filter -D INPUT 1 

 

  • 删除自定义链
iptables -X IN_MYSQL

 

  • 自定义链重命名
iptables -E IN_MYSQL MYSQL 

4、自定义链执行顺序

“您的支持是我持续分享的动力”

微信收款码
微信
支付宝收款码
支付宝

目录