iptables-自定义链

iptables-学习目录

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

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

当默认链中的规则非常多时,不便于管理。假设INPUT链中存放了200条规则,这200条规则有针对80端口的,有针对22端口的,有针对私网IP的,等等。
假如想修改针对80端口的规则,可能需要从头到尾看一遍200条规则,找出哪些规则是针对80端口。这显然不合理。所以,我们需要使用自定义链,通过自定义链即可解决上述问题。

假设,我们自定义一条链,链名叫 IN_HTTP ,我们可以将所有针对80端口入站规则都写入到这条自定义链中,当以后想要修改针对80端口入站规则时,就直接修改IN_HTTP 链中的规则就可以了。

即使默认链中有再多的规则,也没有关系,因为所有针对80端口的入站规则都存放在 IN_HTTP 链中。同理,我们可以将针对22端口的出站规则放入到OUT_SSH自定义链中,这样,我们就能快速定位到想修改的规则在哪里。

2、自定义链基本应用

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

iptables -t filter -N IN_HTTP
iptables -L 

2.2、给自定义链配置对应的规则【禁止 10.0.0.10 访问 10.0.0.200 的 22 端口】

iptables -t filter -I IN_HTTP -s 10.0.0.10 -d 10.0.0.200 -p tcp --dport 22 -j REJECT

2.3、激活自定义链生效

测试后发现,规则没有生效,因为自定义的链需要被默认的链调用才会生效。

既然 IN_HTTP链是为了针对 22 端口的入站规则而创建的,那么这些规则应该去匹配入站的报文,所以应该用 INPUT 链去引用它。

iptables -I INPUT -p tcp --dport 22 -j IN_HTTP

2.4、小结

测试后发现10.0.0.10,无法访问22端口,原因请求本机22经过INPUT链,而INPUT链将22端口处理规则转给IN_HTTP链,由IN_HTTP链进行规则匹配,匹配源IP是10.0.0.1则拒绝。
而其他主机则会匹配规则失败,那么会继续匹配后续的规则,如果没有规则匹配,则回到默认INPUT链,继续往下匹配规则,如果没有匹配成功的规则,则走INPUTT的默认规则。

3、如何删除自定义链

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

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

3.2、删除自定义链方式

3.2.1、删除自定义规则

iptables -t filter -D IN_HTTP 1

3.2.2、删除INPUT引用

iptables -t filter -D INPUT 1 

3.2.3、自定义链重命名

iptables -E IN_HTTP HTTP 

3.2.4、删除自定义链

iptables -X HTTP 

4、自定义链执行顺序

 

posted @ 2023-05-10 09:45  小粉优化大师  阅读(180)  评论(0编辑  收藏  举报