在线客服



服务时间

09:00-21:00

您所在的位置 首页 > 新闻资讯 > 企业新闻

企业新闻

NEWS

技术干货 | Linux安全——iptables(八)

发布时间:2017-07-21 新闻来源:  作者:YESLAB
自定义链
这次聊一下自定义链,之前我们所有的规则都是建立在 iptables 的默认链中,而自定义链也是需要被这些默认链应用才能才能工作,所以自定义链更多的是一种管理方式。
其实在之前的介绍中可以发现 iptables 的默认链就已经基本能够满足我们的主机防火墙需求,那这个自定义链的作用是什么呢?其实就像前面说的它的作用就是方便我们管理规则,举个例子。
想象一下,如果 INPUT 链中存放了 200 多条的规则,这 200 多条规则中有针对WEB 服务器的,有针对 SSH 服务器的,还有针对 IP 地址访问的,这时候有人突然要求你修改针对 WEB 服务的相关规则,那你就需要在那 200 多条的规则中一条一条的寻找,找出那些和 WEB 服务相关的规则,然后小心翼翼的更改,因为这些找出来的规则可能不完全是针对 WEB 服务的,改错了会影响到其他应用。呵呵,想想也就件头痛的事,不是吗?
所以在 iptables 当中为我们设置自定义链,通过自定义链就可以很好的避免和管理上述问题。
现在情况是这样的,假设你自定义了一条链,名字叫做 WEB,那你可以将所有针对 80 端口的规则都写入这条自定义链中,当以后有人要求改变针对 WEB 服务器相关规则时,就直接找到这条链,把这条自定义链中的规则进行更改就可以了,那样即使默认链中的规则再多也不用担心“眼花”。这样自定义链的设置配合良好的管理方式,会使整个防火墙的管理一目了然。
但还是要提醒一下,自定义链是不能直接使用的,而是需要被那几条默认链引用才能起作用,因为自定义链是一个 iptables 中的管理方式,虽然叫做“链”但是对于iptables 来说依旧是四表五链的结构不会引用你自定义了一个链它就真的多一个链出来,先来建立一个自定义链试一下。
可以通过 -N 选项来建立自定义链,iptables -N web 建立一个名为 web 的自定义链。

ptables -N web 建立一个名为 web 的自定义链

自定义链建完之后可以使用 iptables -nvL 查看就会发现多了一个 Chain web,但是会发现(0 references)这个表示这条自定义链的被引用次数为 0,也就是说这条自定义链还没有被任何默认链所引用,所以,即使在 web 链中配置了规则,暂时它也是不会生效的。
自定义链建立好了,暂时不管它被谁引用,先在里面配置一些我们需要的规则吧,比如拒绝某些主机访问。
Iptables -A web -s 192.168.1.100 -j REJECT

iptables -nvL

其实会发现对于自定义链的操作与对默认链的操作并没有什么不同,一切按照默认链的操作方式和语法配置就可以。这句命令的意思是拒绝 192.168.1.100 的设备访问。
现在自定义链中已经有了一些规则,但是还没有批评任何的报文,因还没有被任何默认链引用。到底是让那个默认链来引用这条自定义链那?那就需要看具体情况而定了,这取决于实际的工作场景,这里的这条自定义链是拒绝某台设备访问,所以这条规则应该去和入站报文匹配,那这条自定义链就应该被 INPUT 链所引用。

自定义链被 INPUT 链所引用

在 INPUT 链中添加了一条规则,“-j web” 表示访问本机 80 端口的 TCP 报文将有自定义链 web 中的规则进行处理,在之前的示例中使用 -j 选项表示要操作的动作内容,而这里将动作替换成了自定义链,当 -j 对应的值为一个自定义链时,就表示当前规则匹配到的报文交由对应的自定义链处理,具体怎么处理这取决于自定义链中的规则。可以发现当 web 自定义链被 INPUT 链引用以后,web 链的应用次数 references 变成了 1,这表示这条自定义链被引用了 1 次。其实自定义链还可以引用其他自定义链。
之前说过要只想的操作动作在 iptables 里被称为 target,这样描述并不是很准确,因为 target 是目标的意思,报文被规则匹配到以后 target 可以是一个动作,也可以是一个自定义链,当它为动作时,表示报文按照指定的动作处理,当它为自定义链时,表示报文由自定义链中的规则处理。
自定义链还是通过 iptables -E 来进行改名

自定义链还是通过 iptables -E 来进行改名

当然如果想删除自定义链也是可以的,使用-X的选项就可以删除创建的自定义链,但是删除自定义链时,需要满足两个条件:
1、 自定义链没有被任何默认链引用,即自定义链的 reference 为 0 。
2、 自定义链中没有任何规则,即自定义链为空。
演示一下:

删除自定义链

在没有满足条件时而直接使用-X选项删除自定义链时,会有报错提示:Too many links
所以需要先在响应的默认规则中把这条引用删除。还记得怎么删除规则吗?Iptables -D INPUT

删除自定义链规则

引用已经删除了,再来试一下

删除自定义链引用

又有问题了,删除引用自定义链后,再次尝试删除自定义链,提示:Directory not empty,这是因为第二个条件依然不满足,还需要情况自定义链中的规则才行。

删除自定义链需要自定义链规则

如图所示,最后清空规则并且在没有默认链引用的情况下,使用 iptables -X HTTP成功删除自定义链。

相关阅读:
联系我们
电话:400-004-8626
QQ:800064282
官网:www.yeslab.net