基于Geoip2实现Nginx拦截国外IP访问网站

这篇具有很好参考价值的文章主要介绍了基于Geoip2实现Nginx拦截国外IP访问网站。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近公司上线了一个APP,过段时间发现告警群总有些莫名的异常,通过排查发现是被攻击了,并且攻击IP全是国外的,基于APP业务全在国内,最简单办法就是屏蔽这些IP。云上虽有产品但收费,自己动手才是王道。

目录

一、实现思路

二、配置方法   

2.1 软件下载

2.1.1 Nginx下载

2.1.2 IP识别模块下载

2.1.3 IP库下载

2.2 安装步骤

2.2.1 安装geoip2依赖

2.2.2 nginx配置IP库

2.2.3 添加IP拦截逻辑


一、实现思路

geoip2-cn网站,服务器&运维,网络,nginx,ip,安全 

实现方法需要使用到ngx_http_geoip2模块,对于未装过Nginx环境的步骤可以参考阿里云上的一篇文章 https://developer.aliyun.com/article/982261。如果对于已经有Nginx情况下再添加新模块,过程会有些不一样,当初在配置时还是踩了一些坑。所以本文重点是介绍已有Nginx情况怎么升级。

二、配置方法   

2.1 软件下载

2.1.1 Nginx下载

添加新的Nginx Module必须要用到Nginx源程序对Module进行编译,所以还需要下载Nginx,版本要和当前运行的Nginx版本一致。若下载其它版本,直接修改链接中的版本号即可,如果机器上已经有Nginx安装源文件可以无须下载。 

http://nginx.org/download/nginx-1.20.1.tar.gz

2.1.2 IP识别模块下载

ngx_http_geoip2_module模块是实现IP拦截的一个Nginx 模块,必须下载。

模块官方git地址:https://github.com/leev/ngx_http_geoip2_module

模块下载地址https://codeload.github.com/leev/ngx_http_geoip2_module/zip/refs/heads/master

2.1.3 IP库下载

geoip2 module仅是一个模块程序并不包含IP库数据,所以还需要单独下载IP库。IP没有好的规则可以直接判断是哪个国家的,所以只能使用IP库进行判断,这个库可以去maxmind官网免费下载,但要先注册账号。

https://www.maxmind.com/en/geoip2-databases?utm_source=kb&utm_medium=kb-link&utm_campaign=kb-create-account

下面文件是2023-04-20号新下载的,ip库比较新,如果要保证拦截准确率的话后面定期更新即可,理论上来说变化不会太大。

文件大家可以在下面链接下载 https://download.csdn.net/download/caizi1288/88665724

下载ip到国家的库就行,会比较小点,比如要精确到城市的话,文件有60m

geoip2-cn网站,服务器&运维,网络,nginx,ip,安全

2.2 安装步骤

阿里云文档提供的是新搭建nginx时的安装方法,对于已经安装好nginx的系统再添加该Module时,坑稍微有点多。

2.2.1 安装geoip2依赖

1、给系统安装geoip2扩展依赖

  yum install libmaxminddb-devel -y

2对module进行编译

进入到nginx源文件中,执行以下命令

./configure --add-dynamic-module=/path/to/ngx_http_geoip2_module make

make install

#make install 命令只是用来编译可以生成Module.so文件,并不是真正的就安装到nginx上了

3、配置Module到nginx中

 编译成功会生成ngx_http_geoip2_module.so,此时要配置到nginx中

load_module "/usr/lib64/nginx/modules/ngx_http_geoip2_module.so";

配置好后此时执行nginx -t有可能会遇到以下问题

nginx -t shows: nginx: [emerg] module "/usr/share/nginx/modules/ngx_http_geoip2_module.so" is not binary compatible in /etc/nginx/nginx.conf:5

出现该问题是因为给已经安装过的nginx添加新的Module时需要把之前已经安装过的module信息全部加进来一起编译,这个问题可以见 Issues https://github.com/leev/ngx_http_geoip2_module/issues/82

需要使用以下方式重新编译,编译后再重新执行nginx -t

nginx -V 2>&1 | egrep "^configure" | cut -d: -f2 > /tmp/nginx_build_options.txt sh -c "./configure $(cat /tmp/nginx_build_options.txt) --add-dynamic-module=../ngx_http_geoip2_module-master"

2.2.2 nginx配置IP库

在nginx 的http 中加入ip库及字典变量配置

GeoLite2-Country.mmdb ip库文件需要下载后传到服务器上

    #从geoip2文件中加载数据,1000分钟自动reload一次数据
    geoip2 /home/geoip2/GeoLite2-Country.mmdb {
        auto_reload 1000m;
        $geoip2_data_country_code country iso_code;
    }
   
    # 如果是CN IP返回yes,其它国家都返回no 
    map $geoip2_data_country_code $allowed_country {
          default no;
          CN yes;
    }

   

geoip2-cn网站,服务器&运维,网络,nginx,ip,安全

2.2.3 添加IP拦截逻辑

可以把以下规则放到一个文件中,其它server引用该配置: deny-ip.conf

#如果变量值为no,则直接返回403
if ($allowed_country = no) {
     return 403;
 }

 

在server中引用以上规则(哪个server要拦截,哪个server去加上就行了,http、https要分别添加)

include /etc/nginx/deny-ip.conf;

geoip2-cn网站,服务器&运维,网络,nginx,ip,安全

三、常见问题

编译Module可能会遇到一些问题,缺少的model重新安装即可

1、 ./configure: error: SSL modules require the OpenSSL library.

重新安装

sudo yum install openssl-devel

2、 ./configure: error: the HTTP XSLT module requires the libxml2/libxslt

sudo yum install libxml2-devel libxslt-devel 文章来源地址https://www.toymoban.com/news/detail-794052.html

到了这里,关于基于Geoip2实现Nginx拦截国外IP访问网站的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何通过openresty 限制国外Ip访问

    参考代码 首先 需要的依赖: libmaxminddb 需要 gcc 编译,可用 Dockerfile 里面编译生成so文件,然后复制到 openresty/openresty:centos-rpm 镜像中,然后把 Country.mmdb (Ip数据库) 也复制到镜像中 Dockerfile 如下: 然后配置lua脚本,OpenResty(也称为 ngx_openresty)是一个基于 Nginx 与 Lua 的高性

    2024年02月01日
    浏览(42)
  • iptables结合ipset禁止国外IP进行访问

    0x01 ipset 可以使用 iptables 对访问地址进行一定的限制,但是当受限地址数量过多时,维护管理起来就不太方便,而且数量过多的 iptables 条目也会影响设备的性能。此时就可以使用 ipset 工具来解决此种问题。 ipset 理解起来比较容易,理解为地址组就好,具有相同作用的地址段

    2024年02月06日
    浏览(37)
  • nginx配置拦截访问域名

    1、Nginx Referer模块 nginx模块ngx_http_referer_module通常用于阻挡来源非法的域名请求。当一个请求头的Referer字段中包含一些非正确的字段,这个模块可以禁止这个请求访问站点。构造Referer的请求很容易实现,所以使用这个模块并不能100%的阻止这些请求。 2、valid_referers 指令 语法

    2024年02月13日
    浏览(53)
  • Nginx配置IP拦截

    最近百家饭团队开源了一个Nginx日志分析工具APIcat,这周在生成报告的基础上,实现了基于Nginx的自动拦截防护,正好研究了一下Nginx配置IP拦截的配置 nginx配置ip拦截基本是通过deny和allow两个配置来实现的。可以配置单ip的拦截放行,也可以配置网段的拦截放行,比如:

    2023年04月08日
    浏览(33)
  • Nginx常用内置模块, 实现目录索引+状态监控+IP访问控制+用户访问控制

    1.安装nginx 2.配置nginx扩展配置文件,实现自定义网页根目录 3.配置autoindex自动索引模块 4.配置nginx状态监控模块 5.配置nginx基于IP访问控制access模块 6.配置nginx基于用户访问控制auth模块 1.挂载光盘,进入nginx软件包目录 umount /dev/cdrom /mnt eject mount /dev/cdrom /mnt cd /mnt/nginx-rpm/ 2.使用

    2024年01月21日
    浏览(57)
  • nginx网站服务(下载,配置,命令,实现访问状态统计,访问控制,域名 IP端口访问,身份验证)

    目录 概念 Nginx的优势和特点: 下载配置nginx(两种方式编译和yum) 编译安装,安装依赖  创建运行用户、组 解压nginx压缩包 配置Nginx  编译安装 修改权限 让系统识别nginx的操作命令 配置 nginx命令 nginx的配置文件 全局配置 模块 location的配置 1. root 指令: 2. alias 指令: 实现

    2024年02月19日
    浏览(53)
  • 如何用Nginx实现对城市以及指定IP的访问限制?

    在【如何用Nginx代理MySQL连接,并限制可访问IP】一文中,我们实现了通过Nginx代理MySQL连接,并限制了指定IP才能通过Nginx进行连接,以提高数据安全性。 该场景适用于根据具体的IP地址来进行访问限制,假如我们要上线一个新的功能,但是只想在某些地区进行小规模的测试,

    2024年02月05日
    浏览(40)
  • 小项目:C++拦截Linux下IP和文件访问

    仓库链接:https://github.com/sixsixQAQ/ip_file_hook Linux下实现IP和文件访问拦截,代码量1000行。 C++实现,构建工具cmake。 so preload机制 inotify API ptrace系统调用 其他常用linux系统调用 这个小项目可以拆出多个模块,前几篇博客都有总结。 1. 优雅地细化异常 2. 自定义format 3. 优雅地实现

    2024年02月16日
    浏览(38)
  • 树莓派使用Nginx+cpolar内网穿透实现无公网IP访问内网本地站点

    安装 Nginx(发音为“engine-x”)可以将您的树莓派变成一个强大的 Web 服务器,可以用于托管网站或 Web 应用程序。相比其他 Web 服务器,Nginx 的内存占用率非常低,可以在树莓派等资源受限的设备上运行。同时结合cpolar内网穿透工具即可实现无公网IP远程访问。 在树莓派安装

    2024年02月10日
    浏览(45)
  • 如何在树莓派部署Nginx并实现无公网ip远程访问内网制作的web网站

    安装 Nginx(发音为“engine-x”)可以将您的树莓派变成一个强大的 Web 服务器,可以用于托管网站或 Web 应用程序。相比其他 Web 服务器,Nginx 的内存占用率非常低,可以在树莓派等资源受限的设备上运行。同时结合cpolar内网穿透工具即可实现无公网IP远程访问。 在树莓派安装

    2024年03月12日
    浏览(64)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包