官方介绍
IP集是Linux内核内部的一个框架,可以通过ipset实用程序进行管理 。根据类型的不同,IP集可以以某种方式存储IP地址,网络,(TCP / UDP)端口号,MAC地址,接口名称或它们的组合,以确保将条目与该集匹配时的闪电速度。
如果你想
- 一口气存储多个IP地址或端口号,并通过iptables与集合进行匹配 ;
- 针对IP地址或端口动态更新iptables规则,而不会影响性能;
- 使用一个iptables规则表达复杂的基于IP地址和端口的规则集, 并受益于IP集的速度;
那么ipset可能是适合您的工具。
IP集由Jozsef Kadlecsik编写,它基于Joakim Axelsson,Patrick Schaaf和Martin Josefsson的ippool。
ipset的特点:
- ipset是linux系统内的一个管理IP集合的工具。
- iptables可以匹配ipset管理的IP集合。
- 使用ipset可以动态的更新iptables规则(这点很好,只需要ipset更新ip集,iptables不用重启即生效)。
- ipset支持集合类型存储ip,使得数据查找比较高效。
1、ipset工具安装
yum install ipset-service
2、设置ipset开机自启动
systemctl enable ipset
#其他命令
systemctl start ipset
systemctl status ipset
systemctl stop ipset
3、ipset创建一个IP集的操作
ipset create blacklist hash:net maxelem 100000 #黑名单
ipset create whitelist hash:net maxelem 100000 #白名单
说明:ipset默认可以存储65536个元素;maxelem指定集合大小,可以不指定
4、ipset查看IP集的操作
ipset list blacklist #查看黑名单IP集
ipset list whitelist #查看白名单IP集
ipset list #查看所有的IP集
5、ipset添加ip的操作(这里以blacklist为例)
ipset add blacklist 192.168.1.1
#加上-exist参数如果whitelist里已经存在该ip执行不会报错,再批量导入ip集合的时候很有用
ipset -exist add blacklist 192.168.1.1
6、ipset删除ip的操作(这里以blacklist为例)
ipset del blacklist 192.168.1.1
7、保存ipset操作
ipset所有的设定都是运行在内存中,如果ipset服务或者服务器重启了就会失效,所以需要进行下面的操作
service ipset save
注意:每次上面命令只能保存本次保存之前的ipset操作,保存之后进行的ipset如果没有再次执行上面的操作就 重启了那这次ipset操作仍然是无效的,可以设置ipset服务停止时save操作。
所以,你还需要进行一下设置,将IPSET_SAVE_ON_STOP设置为yes,默认是no
vi /etc/sysconfig/ipset-config
# Save current ipsets on stop.
# Value: yes|no, default: no
# Saves all ipsets to /etc/ipset/ipset if service gets stopped
# (e.g. on system shutdown).
IPSET_SAVE_ON_STOP="yes"
8、ipset删除IP集的操作(这里以blacklist为例)
ipset destroy blacklist
9、ipset备份IP集的操作(这里以blacklist为例)
ipset save blacklist -f blacklist.txt
10、ipset导入一个IP集的操作(这里以blacklist为例)
ipset restore -f blacklist.txt
11、iptables防火墙配置黑名单和白名单的操作
vi /etc/sysconfig/iptables #加入如下规则:
#设置黑名单
-I INPUT -m set --match-set blacklist src -p tcp -j DROP
#当然你也可以像下面这样指定单个的端口
-I INPUT -m set --match-set blacklist src -p tcp --destination-port 80 -j DROP
#设置白名单
-I INPUT -m set --match-set whitelist src -p tcp -j ACCEPT
#设置完重启防火墙规则,测试一下吧
12、扩展应用
思考,查看nginx日志,会发现每天有很多恶意访问服务器的日志,如何收集这些恶意访问者的IP并自动加入iptables黑名单blacklist集,只要写个shell脚本分析日志将ip报错到某个文本文件并使用ipset工具导入到IP集中即可,如何创建一个定时任务,每隔1分钟或者3分钟执行一下。