0x01 ipset
可以使用iptables 对访问地址进行一定的限制,但是当受限地址数量过多时,维护管理起来就不太方便,而且数量过多的iptables 条目也会影响设备的性能。此时就可以使用ipset 工具来解决此种问题。
ipset 理解起来比较容易,理解为地址组就好,具有相同作用的地址段存放在一个集合里面,当使用策略时,策略会对集合里面的所有地址段都生效。提高了策略的部署效率和减少了维护管理的工作量。
这里以centos7 为例,要是没有ipset 工具的话通过yum 安装就可以yum -y install ipset ,安装好了后,先创建一个空的set
ipset create testip hash:net
除了hash 外ipset 还可以用 bitmap 或者 list 方式存储地址,可以按需求来进行设置 如果是等同大小的段可以使用bitmap ,不同大小段一般使用hash 较多,至于list 只是用一个列表来进行存放信息。
可以使用list 来进行查看ipset 情况
root@debian-pve:~
Name: testip
Type: hash:net
Revision: 7
Header: family inet hashsize 1024 maxelem 65536 bucketsize 12 initval 0xe08d3b99
Size in memory: 456
References: 0
Number of entries: 0
Members:
在创建完ipset 后,可以通过add 、del 、test 等指令进行操作
root@debian-pve:~# ipset add testip 10.1.1.0/24
还可以进行测试地址段是否已经加入到ipset 中 最后需要注意的是ipset 和iptables 一样,需要单独保存,配置重启后会丢失。
ipset save testip > testip.ipset
ipset restore < testip.ipset
0x02 iptables结合ipset禁止国外IP进行访问
先下载国内IP 地址的网段量,可以在https://www.ipdeny.com/ 进行查找所需要的数据,接着将这些数据加入到ipset 中,这里使用脚本简单处理下
[root@localhost ~]
wget https://www.ipdeny.com/ipblocks/data/countries/cn.zone
ipset create cnip hash:net maxelem 1000000
for i in `cat cn.zone`
do
ipset add cnip $i
done
[root@localhost ~]
8647
接着根据业务情况,配置合理的iptables 条目,这里是禁止所有地址访问,只允许国内IP 访问来实现效果。
iptables -I INPUT -m set --match-set cnip src -p tcp --dport 80 -j ACCEPT
|