关于使用firewalld禁止特定ip访问的方法,在我的另一篇文章中介绍了使用不同zone区进行过滤的方法,使用firewall-cmd仅允许某个ip访问主机指定端口_firewall-cmd 指定 ip 端口访问-CSDN博客
这比直接编写ip规则更容易让人理解,但如果遇到需要对比较多ip进行限制,直接在source进行添加过于零乱,不便于管理。针对这种情况我们需要引用新的管理方法,即ipset.
ipset
是一种高效的数据结构,用于在Linux内核中存储和查找多个IP地址和端口信息,并且可以与firewalld等防火墙服务结合使用以实现更灵活、高效的IP过滤策略。
- ipset是一个内核模块,提供了一种集合(set)数据结构来处理网络流量的IP地址或端口。
- 它允许将一组IP地址或端口定义为一个集合,然后防火墙规则可以通过引用这个集合而不是逐个指定IP地址来提高效率。
所以,可以简单理解为ipset是个设置ip、port、mac、net等的集合,firewalld可以调用这些集合,根据集合进行规则过滤。
- 通过ip集合允许特定ip访问主机端口
# firewall-cmd --new-ipset=in-ip --type=hash:ip --permanent
(添加ipset集合,类型是ip集合,这里必需加--permanent永久写入,请注意后面命令为了测试并没有用--permanent,添加后立即生效,但--reload后添加的项目都会被清除。)
# firewall-cmd --reload
(重载,让--permanent设置生效)
# firewall-cmd --ipset=in-ip --add-entry=192.168.10.15
(在ip集合in-ip中添加一个ip)
# firewall-cmd --ipset=in-ip --add-entry=192.168.10.80-192.168.10.89
(在ip集合in-ip中添加ip段)
# firewall-cmd --ipset=in-ip --get-entries
(查看in-ip集合内容)
# firewall-cmd --zone=work --add-source=ipset:in-ip
(在zone区work中添加ipset集合in-ip)
# firewall-cmd --zone=work --add-port=8088/tcp
(在zone区work中添加8088端口访问)
以上使用ipset实现192.168.10.15及192.168.80-89段ip允许访问主机8088端口。
- 通过mac集合允许特定mac客户端访问主机端口
# firewall-cmd --new-ipset=in-mac --type=hash:mac --permanent
(添加mac类型的ipset集合)
# firewall-cmd --reload
(重载配置)
# firewall-cmd --ipset=in-mac --add-entry=d0:50:99:d7:bf:49
(添加mac到集合in-mac中)
# firewall-cmd --zone=work --add-source=ipset:in-mac
(work的zone区添加in-mac集合)
# firewall-cmd --zone=work --add-port=8088/tcp
(zone区work添加开放端口8088)
以上使用ipset集合实现了仅允许mac为d0:50:99:d7:bf:49的客户机访问主机8088端口。
- 小结
通过对firewalld语法的理解,配置ipset过程其实很简洁,即:创建ipset集合--添加集合内容--zone区添加ipset集合--添加zone区端口,这里展示的是允许访问集合,如果希望禁止访问可在zone区drop中添加集合即可。
firewalld支持的ipset类型还有很多,没有一一试过,有兴趣的可以试一试看效果。支持的ipset类型包括:
hash:ip hash:ip,mark hash:ip,port hash:ip,port,ip hash:ip,port,net hash:mac hash:net hash:net,iface hash:net,net hash:net,port hash:net,port,net
这里仅使用简单的实例展示firewalld的具体应用,希望能更好理解firewall-cmd语法,通过查看帮助(firewall-cmd --help),才能非常全面的了解各种选项、参数具体功能,并在实际应用中得心应手。