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