欢迎访问我的博客,你的支持,是我最大的动力!

Tengine/Nginx基于来访IP归属地加IP白名单的访问控制

Linux 小马奔腾 289℃ 评论
目录:
[显示]

目标:基于来访IP归属地以及自定义IP白名单实现访问控制

方案:使用Tengine/Nginx的GeoIP2模块,搭配由maxmind提供的免费IP数据库,对IP归属地进行标记,结合自定义的IP白名单对流量进行访问控制,对不满足的流量直接返回403状态码

需要注意的点
1、IP地址库不准确,导致访问控制出现偏差
2、需编译 ngx_http_geoip2_module 模块
3、流量经过多层代理(如经过WAF或其他反向代理层),可能会使得GeoIP模块不能获取到真实的来访IP

配置部署
安装libmaxminddb
wget https://github.com/maxmind/libmaxminddb/releases/download/1.4.2/libmaxminddb-1.4.2.tar.gz
tar zxf libmaxminddb-1.4.2.tar.gz
cd libmaxminddb-1.4.2
./configure
make
make install
sh -c "echo /usr/local/lib >> /etc/ld.so.conf.d/local.conf"
ldconfig
# 默认库会安装到 /usr/local/lib
安装ngx_http_geoip2_module

wget https://github.com/leev/ngx_http_geoip2_module/archive/3.3.tar.gz
tar zxf 3.3.tar.gz
## /root/ngx_http_geoip2_module-3.3
wget http://tengine.taobao.org/download/tengine-2.2.1.tar.gz
tar zxf tengine-2.2.1.tar.gz
cd tengine-2.2.1

# 静态模块方式
./configure xxxxxxx --add-module=/root/ngx_http_geoip2_module-3.3
make
make install
# make dso_install 将自带模块安装为动态模块的方式

# 动态模块方式
./dso_tool --add-module=/root/ngx_http_geoip2_module-3.3
动态模块加载方式,在conf文件顶层添加区块:  dso { load ngx_geoip2_module.so; }
# 会自动将模块安装到 tengine/modules/ngx_geoip2_module.so

获取 IP 数据库

https://www.maxmind.com 下载IP数据库文件,需先注册帐号,这里假如下载到 /usr/share/GeoIP2 目录
# GeoLite2-Country.mmdb 为国家级别数据库

IP库的使用
mmdblookup命令由libmaxminddb提供
mmdblookup --file /usr/share/GeoIP2/GeoLite2-Country.mmdb --ip 117.139.133.142
mmdblookup --file /usr/share/GeoIP2/GeoLite2-Country.mmdb --ip 117.139.133.142 country iso_code #返回 "CN" <utf8_string>

Nginx配置

在http区段添加:

定义IP白名单[使用geo模块]:

定义限制指令:

应用访问限制:

 

参考资料
1、libmaxminddb:https://github.com/maxmind/libmaxminddb
2、geoip2模块:https://github.com/leev/ngx_http_geoip2_module
3、参考文章:https://gist.github.com/mortn/9407041

 

 

转载请注明:轻风博客 » Tengine/Nginx基于来访IP归属地加IP白名单的访问控制

喜欢 (3)or分享 (0)