当前位置:网站首页>Kong实现禁止国外IP访问
Kong实现禁止国外IP访问
2022-08-11 04:51:00 【爱在南信】
一.需求背景
最近公司观察到某些国外IP或者非中国大陆IP有扫描访问记录,出于业务安全考虑,公司的业务只对中国大陆进行开展,所以需要禁止国外IP访问,增加系统安全性.同时也避免某些黑产通过国外代理IP的方式来攻击到公司的业务.
查询一些网上的资料,大部分人使用nginx_geoip2_module这个nginx的模块.再通过下载免费的geoiplite2这个IP库,配置只允许zh_cn中国的IP才能访问否则返回403禁止访问资源. 其他的一些解决方案也是一样的思路, 下载离线IP库,拿到客户端IP查询拿到IP的归属地,例如国家、城市、省份等等.最后决定是否允许这个IP能否访问资源.
刚开始也想用这个方案,但是现状有点尴尬. 我们之前业务部署的系统是Centos6.3, 都老掉牙的系统,重新编译nginx加入这个geoip2模块具有风险,别为了加这个IP访问把正常业务搞挂了,得不偿失. 并且考虑到一个问题就是, 这个geoiplite2免费库针对国内IP的准确率也不是特别高,怕上线IP误伤率过高,最后放弃了这个方案.
二.自定义Kong插件
幸运的是我们的所有流量都是先经过一个Nginx作为总的流量入口, 后面负载均衡进入Kong集群, 前端的这个Nginx其实没干具体事情. 既然前端Nginx不能做, 那么我们想到在Kong这边通过插件的形式来实现也是完美的.
与前面思路一样, 考虑到geoiplite2这个IP库准确率不是那么高,找了几个IP库,最后锁定
ip2region这个项目的IP库.Github地址: https://github.com/lionsoul2014/ip2region
为什么选择ip2region?
1.ip库相对精准
2.查询速度快,支持很多语言的SDK.重点是支持Lua(哈哈,要不然写插件就不开心了).测试了一下,通过把库load到内存的模式,再进行查询. 测试结果一个IP的查询在10微秒左右. 性能是可以接受的,如果性能损耗太大,Kong作为网关入口会造成大量的性能损耗,拖垮业务也是有可能的.
那么现在就很简单了. 思路就是通过Lua编写Kong插件, 拿到客户端的IP地址, 通过ip2region查询到IP的归属地信息,拿到country限定为"中国"、province例如可以排除港澳台, 或者内网IP如192.168.x.x\10.x.x.x等相关IP则允许通过,否则响应403禁止访问即可.
不知道怎么编写Kong插件的,可以参考我之前的博客: 2022最新Kong插件开发教程
过程中还是遇到了一些问题, 例如ip2region提供的lua客户端SDK只支持至少Lua5.3版本开始,因为我看到源码有使用到 << 、>>、&、|等相关位运算符, 但是我们的Kong用的Lua是5.1的,不支持位运算符....,后来通过安装bit2的lua库, 把用到位运算符的地方使用bit32的函数换掉,大功告成!为了验证这样有没有问题, 我使用官方的bench_test测试了几百万的IP输出所有IP的归属地,两者一样,这样确保了是OK的.
三.效果展示
网站全球访问状态测试: http://www.webkaka.com/UrlCheck.aspx
非中国大陆IP访问全部403禁止.
Kong加载到的新插件页面:
Kong配置插件页面:
四.开源地址
找了很多Kong插件,没找到合适的Kong插件来实现这个功能.我把实现的源码进行了开源,有需要的朋友可以参考一下.
项目地址: https://github.com/dream-mo/kong-plugin-ip-region-restriction
边栏推荐
猜你喜欢
随机推荐
FPGA工程师面试试题集锦111~120
洛谷P4847 银河英雄传说V2
一起Talk编程语言吧
The principle, architecture, implementation, practice of "transfer" and "search", no need to be afraid of interviews
【FPGA教程案例50】控制案例2——基于FPGA的PD控制器verilog实现
快速使用UE4制作”大场景游戏“
2022新员工公司级安全教育基础培训(118页)
智能指针笔记
使用百度EasyDL实现森林火灾预警识别
洛谷P4324 扭动的回文串
Embedded Sharing Collection 33
Do you understand how the Selenium automated testing framework works?
Licking - frog jumping steps
Selenium自动化测试框架工作原理你明白了吗?
如何阅读论文
Self-research capability was recognized again, and Tencent Cloud Database was included in the Forrester Translytical report
Dry goods: The principle and practice of server network card group technology
[Note] Is the value of BatchSize the bigger the better?
【人话版】WEB3将至之“权益的游戏”
【实战场景】商城-折扣活动设计方案