0x01 ipset
可以使用iptables
对访问地址进行一定的限制,但是当受限地址数量过多时,维护管理起来就不太方便,而且数量过多的iptables
条目也会影响设备的性能。此时就可以使用ipset
工具来解决此种问题。
ipset
理解起来比较容易,理解为地址组就好,具有相同作用的地址段存放在一个集合里面,当使用策略时,策略会对集合里面的所有地址段都生效。提高了策略的部署效率和减少了维护管理的工作量。
这里以centos7
为例,要是没有ipset
工具的话通过yum
安装就可以yum -y install ipset
,安装好了后,先创建一个空的set
ipset create testip hash:net #这里的testip是ipset的名字
除了hash
外ipset
还可以用 bitmap
或者 list
方式存储地址,可以按需求来进行设置
如果是等同大小的段可以使用bitmap
,不同大小段一般使用hash
较多,至于list
只是用一个列表来进行存放信息。
可以使用list
来进行查看ipset
情况
root@debian-pve:~# ipset list testip
Name: testip
Type: hash:net
Revision: 7
Header: family inet hashsize 1024 maxelem 65536 bucketsize 12 initval 0xe08d3b99
#这里的hashsize当存储满时会自动翻倍增长,下一次就是2048,再下次就是4096
#maxelem可以改大一些,代表着最大存储的条目。
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 ~]# cat ipset_cn.sh
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
#可以看到此时大概有8000+条的IP段
[root@localhost ~]# ipset list cnip |wc -l
8647
接着根据业务情况,配置合理的iptables
条目,这里是禁止所有地址访问,只允许国内IP
访问来实现效果。文章来源:https://www.toymoban.com/news/detail-462285.html
iptables -I INPUT -m set --match-set cnip src -p tcp --dport 80 -j ACCEPT
文章来源地址https://www.toymoban.com/news/detail-462285.html
到了这里,关于iptables结合ipset禁止国外IP进行访问的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!