iptables学习笔记4-自定义链

背景

在第一篇文章里,我们曾说过 Linux 内核默认内置了 5 条链,分别是 prerouting、postrouting、input、output、forward,数据包流入和流出都会经过其中一些链。
那自定义链和上面的 5 条链有什么区别呢?什么情况下需要自定义链呢?或者说自定义链的好处是什么?
区别:
自定义链和内置的链有一个最大的区别就是:自定义链默认不会生效,需要在内置的 5 条链引用才会生效。怎么引用呢? -j 指定动作/自定义链。
对于自定义链怎么和表关联,这是由 /sbin/iptables 命令指定的,在创建自定义链的时候就关联上了。
好处:
假设现在某台 Linux 服务器上有 1000iptables 规则,有些是针对 mysql 服务的,有些是针对 nginx 服务的,有些是针对 sshd 服务的。这时我们需要插入一条关于 mysql 的规则,限制只能 172.16.0.0/16 网段访问。这时应该怎么办呢?我们在插入前需要把前面的 1000 规则中针对 mysql 服务的规则筛选出来,然后浏览一遍,最后在插入我们新增的规则。
这样做是不是很麻烦啊,简直是非常麻烦。此时应该怎么办呢?聪明的你一定想到自定义链的意义了。
假设我们有一条链叫 IN_MYSQL ,它上面应用的规则全是针对 mysql 服务的,此时我们如果还想增加关于 mysql 服务的规则,直接在 IN_MYSQL 链上修改就行了。

自定义链的好处就是,它可以将规则分类进行管理,让操作人员管理起来更加清晰。但是自定义链默认不会使用,需要在内置的 5 条链上引用。

举例

创建 IN_MYSQL

iptables -t filter -N IN_MYSQL
  • -t :指定表为 filter,若不指定,默认也是 filter
  • -N :自定义链名称

在这里插入图片描述

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

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 :追加规则,后面指定链名

在这里插入图片描述

INPUT 链中引用 IN_MYSQL

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

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

赶快自己动手试试吧!

小结

这篇我们讲了自定义链的区别和好处,同时做了一个示范,自定义链 IN_MYSQL

  • 区别:自定义链不能直接使用
  • 好处:将规则分开管理,便于维护
  • 创建自定义链: -N 选项, iptables -t filter -N IN_MYSQL
  • 添加规则到自定义链:创建规则是将链名写为自定义链即可 iptables -t filter -I IN_MYSQL -p tcp -m tcp --dport 3306 -s 172.16.0.0/16 -j ACCEPT
  • 引用自定义链:-j 选项,和处理动作一样 iptables -t filter -I INPUT -j IN_MYSQL
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值