Linuxword Global
当前位置: Linux技术 > Nginx根据IP的国家、城市、ASN访问控制

1、必要前提环境(本文基于CentOS 7 64Bit系统):

images-5
NGINX
IP数据库

logo
IP数据库下载地址:https://www.maxmind.com 登录后可以免费下载开源的数据库,效果还是很不错的,该网站同时也提供商业付费的数据库,自己付费即可。
-> GeoLite2-ASN.mmdb
-> GeoLite2-City.mmdb
-> GeoLite2-Country.mmdb
ASN 相当于ip的品牌号码,可用来鉴别各个机房的ip,查询对应IDC机房的ASN可以到该网站:http://bgp.he.net 点击查询查看
2、安装 libmaxminddb 用于查询 mmdb 数据库
yum -y install libmaxminddb-devel
3、测试工具:
mmdblookup --file GeoLite2-Country.mmdb --ip=测试ip
4、安装 ngx_http_geoip2_module
cd /
git clone https://github.com/leev/ngx_http_geoip2_module
然后进入NGINX的源码目录下,宝塔或者AApanle的话是 /www/server/nginx/src ,
cd /www/server/nginx/src
nginx -V
nginx version: nginx/1.18.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)
built with OpenSSL 1.1.1g 21 Apr 2020
TLS SNI support enabled
configure arguments: --user=www --group=www --prefix=/www/server/nginx --add-module=/www/server/nginx/src/ngx_devel_kit --add-module=/www/server/nginx/src/lua_nginx_module --add-module=/www/server/nginx/src/ngx_cache_purge --add-module=/www/server/nginx/src/nginx-sticky-module --with-openssl=/www/server/nginx/src/openssl --with-pcre=pcre-8.43 --with-http_v2_module --with-stream --with-stream_ssl_module --with-stream_ssl_preread_module --with-http_stub_status_module --with-http_ssl_module --with-http_image_filter_module --with-http_gzip_static_module --with-http_gunzip_module --with-ipv6 --with-http_sub_module --with-http_flv_module --with-http_addition_module --with-http_realip_module --with-http_mp4_module --with-ld-opt=-Wl,-E --with-cc-opt=-Wno-error --with-ld-opt=-ljemalloc --with-http_dav_module --add-module=/www/server/nginx/src/nginx-dav-ext-module
复制 configure arguments:后面的全部内容,再最后面加上 --add-dynamic-module=/ngx_http_geoip2_module
./configure --user=www --group=www --prefix=/www/server/nginx --add-module=/www/server/nginx/src/ngx_devel_kit --add-module=/www/server/nginx/src/lua_nginx_module --add-module=/www/server/nginx/src/ngx_cache_purge --add-module=/www/server/nginx/src/nginx-sticky-module --with-openssl=/www/server/nginx/src/openssl --with-pcre=pcre-8.43 --with-http_v2_module --with-stream --with-stream_ssl_module --with-stream_ssl_preread_module --with-http_stub_status_module --with-http_ssl_module --with-http_image_filter_module --with-http_gzip_static_module --with-http_gunzip_module --with-ipv6 --with-http_sub_module --with-http_flv_module --with-http_addition_module --with-http_realip_module --with-http_mp4_module --with-ld-opt=-Wl,-E --with-cc-opt=-Wno-error --with-ld-opt=-ljemalloc --with-http_dav_module --add-module=/www/server/nginx/src/nginx-dav-ext-module --add-dynamic-module=/ngx_http_geoip2_module
make
然后在当前目录的 objs 目录下面得到编译好的 ngx_http_geoip2_module.so
现在我们开始配置 nginx.conf文件:

load_module /modules/ngx_http_geoip2_module.so;
http
{
geoip2 /www/ipdb/GeoLite2-Country.mmdb {
auto_reload 60m;
$geoip2_metadata_country_build metadata build_epoch;
$geoip2_data_country_code default=CN source=$remote_addr country iso_code;
$geoip2_data_country_name country names en;
}

geoip2 /www/ipdb/GeoLite2-City.mmdb {
$geoip2_data_city_name default=null city names en;
}
geoip2 /www/ipdb/GeoLite2-ASN.mmdb {
$geoip2_data_asn_code default=0 autonomous_system_number;
$geoip2_data_asn_name default=null autonomous_system_organization;
}
//......省略
}
默认是使用 $remote_addr ,一般反向代理是 X-Forwarded-For ,CF 是 CF-Connecting-IP,需要自定义 使用 source=$remote_addr 设置。

5、测试展示
location /ip
{
default_type text/html;
return 200 '$geoip2_data_country_code $geoip2_data_country_name $geoip2_data_city_name $geoip2_data_asn_name $geoip2_data_asn_code';
}

location /
{
if ($geoip2_data_country_name = "Japan") {
return 444;
}
//....省略
}
最后解释下 $geoip2_data_country_name country names en;

country names en 就是结果的JSON结构,举一反三使用 mmdblookup 工具可以查看数据内容。
{
country:{
names:{
en:"US"
}
}

}

RIR_Stats
另外:如何让nginx根据ASN屏蔽请求操作如下
wget -P /etc/nginx/conf.d --content-disposition "https://www.enjen.net/asn-blocklist/index.php?asn=你要屏蔽的AS号&type=nginx&api=1"

 

「梦想一旦被付诸行动,就会变得神圣,如果觉得我的文章对您有用,请帮助本站成长」

赞(0) 打赏
一分也是爱

支付宝扫一扫打赏

微信扫一扫打赏

上一篇:

下一篇:

相关推荐

博客简介

本站CDN采用VmShell免费提供离中国大陆最近的香港CMI高速网络做支撑,ToToTel打造全球最快速的边沿网络支撑服务,具体详情请见 :https://vmshell.com/ 以及 https://tototel.com/,网站所有的文件和内容禁止大陆网站搬迁复制,谢谢,VPS营销投稿邮箱: admin@linuxxword.com,我们免费帮大家发布,不收取任何费用,请提供完整测试文稿!

精彩评论

友情链接

他们同样是一群网虫,却不是每天泡在网上游走在淘宝和网游之间、刷着本来就快要透支的信用卡。他们或许没有踏出国门一步,但同学却不局限在一国一校,而是遍及全球!申请交换友链

站点统计

  • 文章总数: 2590 篇
  • 草稿数目: 22 篇
  • 分类数目: 6 个
  • 独立页面: 0 个
  • 评论总数: 2 条
  • 链接总数: 0 个
  • 标签总数: 13020 个
  • 注册用户: 139 人
  • 访问总量: 8,657,468 次
  • 最近更新: 2024年11月21日