最近我的云服务器经常收到破解密码的攻击,腾讯云会标记为高危险事件,然后自动把登录密码修改掉,导致我自己也时不时的上去修改正常的密码。查看了一下,主要是某一个ip对我服务器进行密码破解,于是想通过添加黑名单的方式进行该ip禁止访问。
使用netfilter/iptables框架禁止IP地址
在Linux中,可以很简单地用netfilter/iptables框架禁止IP地址:
$ sudo iptables -A INPUT -s 1.1.1.1 -p TCP -j DROP
如果你想要完全屏蔽一个IP地址段,你可以用下面的命令很简单地做到:
sudo iptables -A INPUT -s 1.1.2.0/24 -p TCP -j DROP
然而,当你有1000个独立IP地址,且不带CIDR(无类别域间路由)前缀,你该怎么做?你要有1000条iptable规则!这显然这并不适于大规模屏蔽。
$ sudo iptables -A INPUT -s 1.1.1.1 -p TCP -j DROP
$ sudo iptables -A INPUT -s 2.2.2.2 -p TCP -j DROP
$ sudo iptables -A INPUT -s 3.3.3.3 -p TCP -j DROP
. . . .
此时Ip集就隆重登场
使用IPset禁止IP地址
ipset是Linux内核提供的一种高效的、支持大规模IP地址集合(包括IPv4和IPv6)管理的工具,可以实现快速的IP地址匹配、封禁、允许等功能。它主要用于防火墙、入侵检测系统等网络安全应用场景中。
ipset的设计初衷是为了解决iptables规则表过长、匹配效率低下等问题,它可以将大量的IP地址(比如黑名单、白名单等)以集合的形式存储在内核空间中,并提供标准的命令行接口供用户进行添加、删除、查看等操作。使用ipset可以大大减少iptables规则表的长度、加速匹配速度、方便管理等。
- ipset工具安装
yum install ipset-service
- 设置ipset开机启动
systemctl enable ipset #centos7
chkconfig ipset on #centos6
其他的一些命令
systemctl start ipset #启动
systemctl status ipset #查看状态
systemctl stop ipset #停止
- ipset创建一个ip集的操作
ipset create blacklist hash:net maxelem 1000000 #创建一个ipset黑名单,最大1000000
ipset create whitelist hash:net maxelem 1000000 #创建一个ipset白名单,最大1000000
#说明:ipset默认可以存储65536个元素;maxelem指定集合大小,可以不指定
- ipset添加ip的操作(这里以blacklist为例)
ipset add blacklist 192.168.1.1
#加上-exist参数如果whitelist里已经存在该ip执行不会报错,再批量导入ip集合的时候很有用
ipset -exist add blacklist 192.168.1.1
如:
[root@VM-4-9-centos ~]# ipset add blacklist 60.164.245.201
[root@VM-4-9-centos ~]# ipset add blacklist 94.102.51.218
[root@VM-4-9-centos ~]# ipset list blacklist
Name: blacklist
Type: hash:net
Revision: 6
Header: family inet hashsize 1024 maxelem 100
Size in memory: 504
References: 0
Number of entries: 2
Members:
60.164.245.201
94.102.51.218
- ipset删除ip的操作(这里以blacklist为例)
ipset del blacklist 192.168.1.1
- 保存ipset操作
ipset所有的设定都是运行在内存中。如果ipset服务或者服务器重启了就会失效,所以需要进行保存的操作
service ipset save
- 批量导入ip集 先创建批量导入的文件 vim banthis.txt
create banthis hash:net family inet hashsize 131072 maxelem 237302
add banthis 1.2.4.0/24
add banthis 1.2.8.0/24
add banthis 1.9.75.8/32
add banthis 1.9.96.105/32
add banthis 1.9.102.251/32
add banthis 1.9.189.65/32
add banthis 1.16.0.0/14
导入该文件
ipset restore -f banthis.txt
ipset restore < /etc/ipset.conf #将规则ipset,导入之前先清空规则
#ipset test blacklist 20.211.113.35 #检查目标ip是否在ipset集合中
- 其余相关命令
ipset destroy blacklist #ipset删除IP集的操作(这里以blacklist为例)
ipset save blacklist -f blacklist.txt #ipset备份IP集的操作(这里以blacklist为例) ,其实就是上述banthis.txt文件
ipset del blacklist 1.2.3.4 #从blacklist集合中删除IP地址
ipset test blacklist 1.2.3.4 #检查IP地址是否在blacklist集合中
ipset list #列出所有的ipset集合
参考文件
- 详解ipset使用方法及示例:https://www.python100.com/html/116950.html
- IPset添加黑、白名单 https://zhuanlan.zhihu.com/p/633933182