Linux系统用ipset屏蔽大批量IP地址

最近在捣鼓个小项目,考虑到政策风险,所以需要屏蔽国内IP。

 

找了比较新的IP范围,有5000多条,批量加入iptables里面。

起初我没意识到问题在iptables这里,系统负担很重,只能跑出来20M带宽。因为任何时刻服务器的并发连接都不会低于几千,每秒钟处理两万左右的请求,所以我一直以为是垃圾虚拟机的性能太渣(最低端配置,渣到不好意思说),始终在想办法优化系统、优化程序、优化网络架构。折腾了一周也只能提升到2.4到2.6万每分钟,实在没招了。

偶然灵光了一下,清空了iptables规则,带宽瞬间就到100M以上了,操,这下知道问题所在了。

于是改用ipset来屏蔽IP,对系统几乎完全没影响了,带宽稳定在60M到100多M,每分钟处理的请求在8万到10万以上了,cpu负载也只有20%到40%,对这么渣的配置来说,哥知足了。

再结合这些天对网络架构方面的优化,现在开了3个虚拟机,成本不到80块/月,每天处理请求数在一个亿以上了,总带宽在200M到300M左右浮动,知足了,知足了。

 

附:使用方法

#Debian系统需要安装:
apt-get -y install ipset

#创建名为cnip的集合:
ipset create cnip hash:net

#增加需要屏蔽的IP段:
ipset add cnip 1.2.16.0/20
ipset add cnip 1.2.32.0/19
ipset add cnip 1.2.64.0/18

#添加对应的iptables规则:
iptables -I INPUT -m set --match-set cnip src -p tcp --dport 80 -j DROP

我这里是屏蔽了这3个IP段连接服务器的tcp:80端口,有需要的话对应调整即可。

Share

您可以选择一种方式赞助本站

微信钱包扫描赞助

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

图片 表情