用Nginx禁止国外IP访问我的网站...

news/2024/5/8 21:51:24/文章来源:https://blog.csdn.net/qq_17231297/article/details/117887969

点击上方蓝色字体,选择“标星公众号”

优质文章,第一时间送达

关注公众号后台回复paymall获取实战项目资料+视频

作者:运维小弟

出处:toutiao.com/i6860736292339057156/

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

图片来自 Pexels

想要实现这个功能有很多方法,下面我就来介绍基于 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 模块。

需要注意:

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

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

[root@fxkj tmp]# /usr/local/nginx/sbin/nginx -Vnginx version: nginx/1.16.0built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC)built with OpenSSL 1.0.2k-fips 26 Jan 2017TLS SNI support enabledconfigure 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 -Vnginx version: nginx/1.18.0built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC)built with OpenSSL 1.0.2k-fips 26 Jan 2017TLS SNI support enabledconfigure 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:

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

上传到 /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;
}

在 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

⑦模拟测试验证

使用海外节点的服务器去访问网站,这里我的 IP 是来自于韩国:

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

我们再来看下 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”

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


有热门推荐????
刚刚用鸿蒙跑了个“hello world”!跑通后,我特么开始怀疑人生了....号称下一代监控系统,来看看它有多强!
SpringBoot整合Redis+mybatis,封装RedisUtils工具类等实战(附源码)昨天我开除了一名程序员,因为简历造假!
字节又莫名其妙发奖金了!网友:突然到账五万,吓得我差点报警...Java封装OkHttp3工具类,真TM厉害!
两瓶毒药:Spring BeanUtils 和 Apache BeanUtils 你用哪个?2W 字详解设计模式从零搭建SpringCloud服务(史上最详细)老板逼走员工的23种套路,我服!别再用kill -9关闭程序了......点击阅读原文,前往学习SpringCloud实战项目

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_748193.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

又一神器,输入网址,点击下一步,瞬间克隆一个网站...!

点击上方蓝色字体,选择“标星公众号”优质文章,第一时间送达关注公众号后台回复pay或mall获取实战项目资料视频HTTrack是一个免费的网站克隆工具。它允许您将Internet上的万维网站点下载到本地目录,以递归方式构建所有目录,并从服…

阿里云 + Ubuntu + WordPress 建造个人博客网站

前言 需要准备的东西: 需要注册一个域名域名需要备案需要购买一个ESC服务器 上述的操作,非常的简单,就不多叙述了 一、阿里云ESC服务器配置 1.首先远程连接服务器 输入用户名密码 根据提示输入,Linux 用户名一般为 root&…

新建的windows服务器总是弹出 “Internet Explorer增强安全配置正在阻止来自下列网站的此应用程序中的内容“

问题描述 最近由于工作原因,申请了一个windows服务器,打开自带的Internet Explorer,输入任何网址都会弹出该问题: 问题原因 windows服务器为了安全起见,默认启用了Internet Explorer 增强安全配置,当我…

最适合晚上睡不着看的 8 个网站,建议收藏哦

大家好,我是老赵1. 菜鸟教程一个涵盖了几乎所有编程教程的文档网站,不出意外你查询的所有 API 都可以在这里找到,不仅限于于前端、后端,还包括设计模式、工具等。官网:https://www.runoob.com/2. 慕课网一个涵盖了几乎…

一个网站从0到1搭建部署上线的完整流程(包教包会)

大家好,我是老赵!有很多做网页的前端后端小白都想把自己辛辛苦苦做出来的网站放到网上,让别人观摩观摩。可无奈技术有限,对于网站部署流程有些迷茫。在这里,我会告诉大家,如何将自己做出来的网站放到网上。…

php接入qq登陆,网站接入QQ登录-腾讯开放平台

完成开发者认证使用qq登录完成实名认证,点击创建应用创建网站应用填写相关信息回调域填写很重要如果填写错误扫码会出现 100010【QQ登录】登录常见错误码前端这是目前网站接入的qq登录,注意点1.其中关于涉及到**appkey**的接口的貌似通过客户端提交不过去&#xff0…

为什么构建网站时常会用到负载均衡

对于用户数较多、负载较大的网站,我们通常都会使用负载均衡(LB:Load Balance)来增加服务器的承载能力。负载均衡是云计算的一个基本服务组件,通常都会搭配云主机来构建云服务,比如阿里云的SLB(S…

CDN加速会影响网站排名吗?CDN要网站备案后才能使用?

网络环境复杂多变,为了满足业务快速发展的需要,许多企业会使用CDN给网站、app加速,加快网站访问速度,提升用户体验。由于蔚可云CDN会将网站内容分发至各个边缘节点,还会隐藏源站IP,CDN加速会不会影响网站排…

防止网站被爬虫抓取的五种有效方法

对于网络爬虫,我们是既爱又恨。一方面爬虫可以带来客观的流量,另一方面又会占用服务器资源。因此在面对爬虫时,进行爬虫管理很有必要。那么我们该如何防止网站被爬虫呢? 一、分辨爬虫的善恶 网络爬虫分为两种,一种是…

多域名ssl证书是关联网站域名的吗?

大家想要知道一下多域名ssl证书理应如何做吗?现阶段的互联网技术对于 SSL证书一些是兼容问题在很多地区此外运用,一个SSL证书仅有关联在一个网站域名上。因而ssl针对诸多顾客对可用多网站域名的规定,现如今目前大部分我国都普及化营销推广了s…

织梦系统学习:文章页当前位置的写法(自认对SEO有用)

这是我在{dede:field nameposition/}后的结果,想想如果能把正文换成本文的标题,而且加上指向自己的链接是不是也更能对SEO有好处呢?(自认为可以,欢迎指正) 于是我的代码写成了 {dede:field nameposition}&l…

网站SSL证书申请怎么做?

现在很多的网站都在安装SSL证书了,毕竟网站安装SSL证书之后,网站的信息传输就是加密的,在一定的程度上也能够避免网站的核心数据被窃取,也能够避免网站信息传输出现篡改的情况,对于网站以及网站浏览者来说,…

网站为什么需要进行ssl证书认证

ssl证书是数字证书的一种,这种证书可以配置在网站服务器当中,给网站提供安全防护,保护网站信息安全。但是,配置这种证书的时候,ssl认证是很重要的。但是,网站为什么需要进行ssl认证呢? 为什么网…

网站ssl证书的作用,怎么使用网站ssl证书

网站ssl证书在当今很多企业网站当中都出现了,企业为了给网站更好的安全防护,特地在CA机构蔚可云当中去申请这种证书。CA是一个权威机构,颁发的ssl证书安全性极高,所以在这个机构申请ssl证书是正确的。不过,网站ssl证书…

如何开启网站https协议?https的作用是什么?

当下大部分的网站都开始配置SSL证书了,网站在配置SSL证书之后,网站的通讯协议就从http升级成了https,要知道http和https之间的区别是很大的,而大家在申请配置SSL证书之后,通过https加密传输,就不用担心信息…

ssl证书对网站有哪些作用呢?

如果网站连基本的安全防护都没有,此时的安全性就无法保障,所以为了给网站安全保驾护航,直接给网站配置ssl证书是很好的。另外,ssl证书的好处有很多,所以给网站配置ssl证书是有必要的。那么,ssl证书的好处是…

如何查看网站安全证书,怎么申请网站安全证书?

为了提高网站的信息安全,给网站配置一个安全证书是很不错的,该证书的安全性是很高的,可以为网站的信息安全保驾护航。其次,浏览网站的时候一定要提前去查看该完整是否有安全证书,此时就可以保护网站信息安全。那么&…

网站ssl证书的意义在哪?为什么要做网站ssl证书

用户在浏览网站的时候,有时浏览器弹出了“警告”这一般是因为网站不安全引起的,用户收到警告之后,那么是不会继续浏览网站的,毕竟网站的安全性是很重要的,有些网站出现了这些情况,一般是因为网站没有配置SS…

ssl证书过期该怎么办?网站如何关掉ssl证书错误?

互联网技术如今是人们日常生活不可或缺的一部分,愈来愈多的人早已贮备一部分互联网知识,在有的那时候还可以挑选自身处理互联网技术疑难病症,那麼有些人问了,平台网站如何关掉https证书错误呢? https证书过期该怎么办 …

浏览网站ssl证书错误该怎么办?

人们早已不可或缺互联网技术了,坚信大伙儿早已对动态网页传送协议书证书拥有基本的了解,那麼提醒ssl证书风险性如何处理?在遇到相近状况,在平时登录网站地址的那时候仔细观查,就会发觉有些是http有的缺是https&#xf…