iis 403 - 禁止访问: 访问被拒绝。_通过Nginx来实现禁止国外IP访问网站

前言:先来说说为啥要写这篇文章,之前小编看了下 nginx 的访问日志,发现每天有好多国外的 IP 地址来访问我的网站,并且访问的内容基本上都是恶意的。因此 我决定 禁止国外 IP 来访问我的网站

想要实现这个功能有很多方法,下面我就来介绍基于 NGINX 的 ngx_http_geoip2 模块 来禁止国外 IP 访问网站

一、安装 geoip2 扩展依赖

[root@fxkj ~]# yum install libmaxminddb-devel -y

二、下载 ngx_http_geoip2_module 模块

[root@fxkj tmp]#  git clone https://github.com/leev/ngx_http_geoip2_module.git
[ro tmp]#

三、解压模块到指定路径

我这里解压到/usr/local 目录下

[root@fxkj tmp]# mv ngx_http_geoip2_module/ /usr/local/
[root@fxkj local]# ll ngx_http_geoip2_module/
total 60
-rw-r--r-- 1 root root  1199 Aug 13 17:20 config
-rw-r--r-- 1 root root  1311 Aug 13 17:20 LICENSE
-rw-r--r-- 1 root root 23525 Aug 13 17:20 ngx_http_geoip2_module.c
-rw-r--r-- 1 root root 21029 Aug 13 17:20 ngx_stream_geoip2_module.c
-rw-r--r-- 1 root root  3640 Aug 13 17:20 README.md

四、安装 nginx 模块

首先说明下环境,我的 nginx 版本是 1.16 , 在网上查了下 安装 ngx_http_geoip2 模块至少需要 1.18 版本及以上,因此此次安装我是 升级 nginx1.18,添加 ngx_http_geoip2 模块。

  • 下载 nginx 1.18 版本
[root@fxkj ~]# yum install libmaxminddb-devel -y
  • 解压 nginx1.18 软件包并 升级为 nginx1.18 ,添加 ngx_http_geoip2 模块

需要注意:

1、升级 nginx, 添加 nginx 模块 只需要 编译 然后 make 不需要 make instll 不然线上的 nginx 会被新版本 nginx 完完整整的替换掉

2、编译前 需要看下 nginx 当前安装了哪些模块

[root@fxkj tmp]# /usr/local/nginx/sbin/nginx -V

nginx version: nginx/1.16.0

built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC)

built with OpenSSL 1.0.2k-fips 26 Jan 2017

TLS SNI support enabled

configure arguments: –with-http_stub_status_module –prefix=/usr/local/nginx –user=nginx –group=nginx –with-http_ssl_module –with-stream

编译安装

[root@fxkj tmp]# tar -xf nginx-1.18.0.tar.gz
[root@fxkj tmp]# cd nginx-1.18.0/
[root@fxkj nginx-1.18.0]# ./configure --with-http_stub_status_module \
 --prefix=/usr/local/nginx \
 --user=nginx --group=nginx --with-http_ssl_module --with-stream \
 --add-module=/usr/local/ngx_http_geoip2_module
[root@fxkj nginx-1.18.0]# make
[root@fxkj nginx-1.18.0]# cp /usr/loca/nginx/sbin/nginx /usr/loca/nginx/sbin/nginx1.16    #备份
[root@fxkj nginx-1.18.0]# cp objs/nginx /usr/local/nginx/sbin/    #用新的去覆盖旧的
[root@fxkj nginx-1.18.0]# pkill nginx     #杀死nginx
[root@fxkj nginx-1.18.0]# /usr/local/nginx/sbin/nginx    #再次启动Nginx

查看 nginx 版本 以及安装的模块

[root@fxkj nginx-1.18.0]# /usr/local/nginx/sbin/nginx -V

nginx version: nginx/1.18.0

built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC)

built with OpenSSL 1.0.2k-fips 26 Jan 2017

TLS SNI support enabled

configure arguments: –with-http_stub_status_module –prefix=/usr/local/nginx –user=nginx –group=nginx –with-http_ssl_module –with-stream –add-module=/usr/local/ngx_http_geoip2_module

五、下载最新的 IP 地址数据库文件

模块安装成功后,还要在 Nginx 里指定数据库,在安装运行库时默认安装了两个,位于 /usr/share/GeoIP/ 目录下,一个只有 IPv4,一个包含 IPv4 和 IPv6:

登录 www.maxmind.com 网址,创建账户 下载最新的库文件(账户创建就不演示了)

点击左侧 ,Download Files

4414547df3a5e5124897cc0f5af4c4d0.png

选择 GeoLite2 Country ,点击 Download GZIP 下载即可

1bf050466766dd09d6a99b786f5553ef.png

上传到 /usr/share/GeoIP/ 下并解压

[root@fxkj local]# cd /usr/share/GeoIP/
[root@fxkj GeoIP]# ll
total 69612
lrwxrwxrwx. 1 root root       17 Mar  7  2019 GeoIP.dat -> GeoIP-initial.dat
-rw-r--r--. 1 root root  1242574 Oct 30  2018 GeoIP-initial.dat
lrwxrwxrwx. 1 root root       19 Mar  7  2019 GeoIPv6.dat -> GeoIPv6-initial.dat
-rw-r--r--. 1 root root  2322773 Oct 30  2018 GeoIPv6-initial.dat
-rw-r--r--  1 root root  3981623 Aug 12 02:37 GeoLite2-Country.mmdb

六、配置 nginx 配置文件

修改前 先备份配置文件

[root@fxkj ~]# cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf-bak

[root@fxkj ~]# vim /usr/local/nginx/conf/nginx.conf

在 http 中添加 几行,定义数据库文件位置

geoip2 /usr/share/GeoIP/GeoLite2-City.mmdb {
auto_reload 5m;
$geoip2_data_country_code country iso_code;
}
  map $geoip2_data_country_code $allowed_country {
                default yes;
                CN no;
}
bd0300dc1a2dc1ace372b36f8e28dbb8.png

在 server 中的 location 下 添加 条件

如果满足 IP 是国外 IP 就 执行下面的 return 动作,我这里定义了 3 种, 注释了其中两个。

当访问 IP 是国外 IP ,直接返回 404

if ($allowed_country = yes) {
       # return https://www.baidu.com;
       # return /home/japan;
        return 404;
 }

修改完毕后, 检测下配置文件,重新加载下 nginx

[root@fxkj ~]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[roo@fxkj ~]# /usr/local/nginx/sbin/nginx -s reload

7、模拟测试验证

使用海外节点的服务器去访问网站

这里我的 IP 是 来自于韩国

28470af4f78c9495e0c41441b2258f85.png

可以看到访问网站报错 404 Not Found

7a603d566d3effb502db8257c7f6f654.png

我们再来看下 nginx 的访问日志

“13.125.1.194 – – [14/Aug/2020:16:15:51 +0800] “GET /favicon.ico HTTP/1.1” 404 548 “https://www.fxkjnj.com/” “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36”
5663d6a9356db224a11af8657b9fc781.png

通过 Nginx 来实现禁止国外 IP 访问网站

到此 我们通过 Nginx 来实现禁止国外 IP 访问网站 就结束了

来源:https://www.toutiao.com/i6860736292339057156/

8dfaacb938467c0d74a6c8b132f3aec4.png

f93e5e36ed4b27ca569df3f1d5c3c3a5.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了小程序应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值