2020年,最新NGINX的ngx_http_geoip2模块以精准禁止特定国家或者地区IP访问
1.0 geoip2核心识别库
安装geoip2 lib步骤:
cd /usr/local/src
rm -f libmaxminddb-1.4..tar.gz
wget https://github.com/maxmind/libmaxminddb/releases/download/1.4.2/libmaxminddb-1.4.2.tar.gz
tar -xzf libmaxminddb-1.4..tar.gz
cd libmaxminddb-1.4.
yum install gcc gcc-c++ make -y
./configure
make
make check
sudo make install echo '/usr/local/lib' > /etc/ld.so.conf.d/geoip.conf
sudo ldconfig
2.0 下载ngx_http_geoip2_module 模块
cd /usr/local/src
wget https://github.com/leev/ngx_http_geoip2_module/archive/3.3.tar.gz
tar -xzf 3.3.tar.gz
mv ngx_http_geoip2_module-3.3 ngx_http_geoip2_module
nginx集成步骤:
cd /usr/local/src
wget http://nginx.org/download/nginx-1.16.1.tar.gz
tar -zxf nginx-1.16..tar.gz
cd nginx-1.16.1
useradd -M -s /sbin/nologin www yum install gcc gcc-c++ make pcre-devel zlib-devel openssl-devel -y
./configure --user=www --group=www --prefix=/usr/local/nginx \
--with-ld-opt="-Wl,-rpath -Wl,/usr/local/lib" \
--with-http_sub_module \
--with-http_realip_module \
--with-http_gzip_static_module \
--with-http_ssl_module \
--with-http_v2_module \
--add-module=/usr/local/src/ngx_http_geoip2_module make
make install
geoip2 IP地址库下载:
2020年最新GeoLite2-City.mmdb 无法直接下载,必须注册maxmind账号 . 需要在maxmind 后台注册账号,并且生成Account/User ID 和 License key
. 安装geoipupdate, 下载地址https://github.com/maxmind/geoipupdate/releases
. 配置geoipupdate的GeoIP.conf , 填写maxmind账号的User ID 和 License key 和 EditionIDs 博主使用的是centos
安装如下
cd /usr/local/src/
wget https://github.com/maxmind/geoipupdate/releases/download/v4.2.0/geoipupdate_4.2.0_linux_amd64.rpm
rpm -ivh geoipupdate_4..0_linux_amd64.rpm
rpm -ql geoipupdate
vi /etc/GeoIP.conf
#填写AccountID XXXX
#填写LicenseKey XXXX
#EditionIDs可以不修改,系统默认有填 GeoLite2-Country GeoLite2-City
#笔者EditionIDs只保留GeoLite2-City
#保存退出 运行geoipupdate
/usr/bin/geoipupdate
cd /usr/share/GeoIP/
会看到GeoLite2-City.mmdb
把GeoLite2-City.mmdb文件cp到需要使用的目录
sudo mkdir -p /usr/local/nginx/geoip/
\cp -rf /usr/share/GeoIP/GeoLite2-City.mmdb /usr/local/nginx/geoip/maxmind-city.mmdb
注意GeoLite2 City 和GeoLite2 Country 两个IP库,请下载City的mmdb数据文件,较于其他两者信息更丰富
nginx 配置geoip2 样例,geoip2的配置字段在http
http {
...
geoip2 /usr/local/nginx/geoip/maxmind-city.mmdb {
$geoip2_data_country_code default=US source=$remote_addr country iso_code;
$geoip2_data_country_name country names en;
$geoip2_data_city_name default=London city names en;
$geoip2_data_province_name subdivisions names en;
$geoip2_data_province_isocode subdivisions iso_code;
}
....
fastcgi_param COUNTRY_CODE $geoip2_data_country_code;
fastcgi_param COUNTRY_NAME $geoip2_data_country_name;
fastcgi_param CITY_NAME $geoip2_data_city_name;
....
}
stream {
...
geoip2 /usr/local/nginx/geoip/maxmind-city.mmdb {
$geoip2_data_country_code default=US source=$remote_addr country iso_code;
$geoip2_data_country_name country names en;
$geoip2_data_city_name default=London city names en;
$geoip2_data_province_name subdivisions names en;
$geoip2_data_province_isocode subdivisions iso_code;
}
...
}
nginx配置中的变量名如,geoip2_data_country_code,geoip2_data_country_name 等等,都是自定义的名称,可以加在日志字段中
3.0 在nginx 中配置黑名单国家的变量 $blacklist_country
在http{} 字段,任何include之前,添加如下配置
[...]
map geoip2_data_country_code $allowed_country {
default yes;
US no;
JP no;
SG no;
}
[...]
以上配置将允许所有的国家,除了美国,日本,和新加坡 (您可以查看所有国家代码的列表,点这里)
相反的,如果你想阻止所有国家,除了少数几个国家可以访问,请参考如下的配置
[...]
map geoip2_data_country_code $allowed_country {
default no;
CN yes;
HK yes;
US yes;
}
[...]
现在,你做了如上配置,并不会阻止任何的国家,那只是设置了一个变量$allowed_country
想要实际阻止国家/地区,必须修改vhost的配置
把下面的代码放到server{}字段, 这个代码也可以放到location{}字段
[...]
if ($allowed_country = no) {
return 403;
}
[...]
任何从黑名单国家的用户访问,都会收到403错误代码,
修改完配置,不要忘记reload nginx
/usr/local/nginx/sbin/nginx -s reload
4.0 通过如下命令可以直接本地查询IP信息
如
/usr/local/bin/mmdblookup --file /usr/local/nginx/geoip/maxmind-city.mmdb --ip 8.8.8.8
会出来许多信息,用json格式展示
{
"country":
{
"geoname_id":
<uint32>
"iso_code":
"US" <utf8_string>
"names":
{
"de":
"USA" <utf8_string>
"en":
"United States" <utf8_string>
}
}
}
如果IP 后面可以跟不同的查询,如下面查询了国家的英文名
/usr/local/bin/mmdblookup --file /usr/local/nginx/geoip/maxmind-city.mmdb --ip 8.8.8.8 country names en
"United States" <utf8_string>
2020年,最新NGINX的ngx_http_geoip2模块以精准禁止特定国家或者地区IP访问的更多相关文章
- nginx的ngx_http_geoip2模块以精准禁止特定地区IP访问
要求:对网站的信息,比如某个访问节点不想国内或者国外的用户使用,禁止国内或者国外或者精确到某个城市的那种情况. 解决方式:1.Cloudfalre来实现禁止特定国家的ip访问,比较简单,但是需要mon ...
- 企业运维实践-Nginx使用geoip2模块并利用MaxMind的GeoIP2数据库实现处理不同国家或城市的访问最佳实践指南
关注「WeiyiGeek」公众号 设为「特别关注」每天带你玩转网络安全运维.应用开发.物联网IOT学习! 希望各位看友[关注.点赞.评论.收藏.投币],助力每一个梦想. 本章目录 目录 0x00 前言 ...
- nginx禁止特定UA访问
一.UA是什么? User Agent 简称UA,就是用户代理.通常我们用浏览器访问网站,在网站的日志中,我们的浏览器就是一种UA. 二.禁止特定UA访问 最近有个网站(www.C.com)抄袭公司主 ...
- Nginx安装echo模块
echo-nginx-module 模块可以在Nginx中用来输出一些信息,可以用来实现简单接口或者排错. 项目地址:https://github.com/openresty/echo-nginx-m ...
- 开始Nginx的SSL模块
nginx: [emerg] the "ssl" parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/n ...
- nginx內建模块使用
目录 nginx內建模块使用 1. 內建模块的引入 1.1 查看安装信息 1.2 重新指定配置信息 2. 內建模块的使用 2.1 http_stub_status_module 2.2 http_ra ...
- nginx 安装第三方模块(lua)并热升级
需求: nginx上将特定请求拒绝,并返回特定值. 解决办法: 使用lua脚本,实现效果. 操作步骤: 安装Luajit环境 重新编译nginx(目标机器上nginx -V 配置一致,并新增两个模块n ...
- 2020年最新ZooKeeper面试题(附答案)
2020年最新ZooKeeper面试题 1. ZooKeeper 是什么? ZooKeeper 是一个开源的分布式协调服务.它是一个为分布式应用提供一致性服务的软件,分布式应用程序可以基于 Zooke ...
- Nginx 编译 echo 模块
Nginx 编译 echo 模块 echo模块下载地址:https://github.com/openresty/echo-nginx-module 查看nginx已经编译的模块, nginx -V ...
随机推荐
- 转载:字符编码简介 ASCII UTF-8 ISO8859-1
字符编码简介 ASCII UTF-8 ISO8859-1 博客分类: 电脑综合知识 XP数据结构Windows 计算机中的一切都是以数字来表示的,字符同样如此.字符编码就是将字符集编码成为数字序列, ...
- MySQL分析工具explain介绍
EXPLAIN是MySQl必不可少的一个分析工具,主要用来测试sql语句的性能及对sql语句的优化,或者说模拟优化器执行SQL语句. 简单的说是execute plan, 获取MySQL数据库的执行计 ...
- 面向对象+闭包+三种对象的声明方式(字面式、new Object、构造函数、工厂模式、原型模式、混合模式)
面向对象: 对代码的一种抽象,对外统一提供调用接口的编程思想 对象的属性:事物自身拥有的东西 对象的方法:事物的功能 对象:事物的一个实例 对象的原型:.prototype -> 内存地址 -& ...
- css基础-盒子模型+背景和列表
border-style的值: none 无 dotted 点状 dashed 虚线 solid 实线 double 双实线 margin: 垂直方向两个相邻元素都设置了外边距,那么外边距会发生合并 ...
- 生成指定规模大小的redis cluster对关系
需求: 指定一批ip列表,生成指定规模大小的redis cluster主从对应关系. ip_list=(1.1.1.1 2.2.2.2 3.3.3.3 4.4.4.4 5.5.5.5) port=70 ...
- CentOS7配置ftp
1.下载vsftpd yum install -y vsftpd 2.设置开机自启动 systemctl enable vsftpd.service 3.启动 systemctl start vsft ...
- 2019sdqdCSP-J游记
特别鸣谢:Miku -------------------------- 中午上了车,和ljx坐在一块.太阳是多么好啊,我们在看着刚出的tg题,cmz找不到了准考证,sbl在临时打印准考证 等到好不容 ...
- #AcWing系列课程Level-2笔记——2. 归并排序算法
归并排序算法 编写归并排序,记住下面的思路,代码也就游刃有余了! 1.首先确定数组的中间位置的分界点(下标),也就是mid=(left+right)>>1,分成left,right两段. ...
- CF1230E Kamil and Making a Stream
题目大意是求 \(\sum_{v,fa,lca(v,fa)=fa}gcd(v \to fa)\) 容易发现 \(\gcd\) 只会变小,所以根据这玩意是从上到下的,每次暴力一下就可以了,\(\gcd\ ...
- Python集合详解
集合介绍: 集合(set)是一个无序的不重复元素序列.可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典 ...