0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

jf_TEuU2tls 来源:头条号运维小弟 2023-12-01 11:12 次阅读

前言

大家好,这里是浩道Linux,主要给大家分享Linux、Python网络通信网络安全等相关的IT知识平台。

最近不少小伙伴反馈自己维护的项目中,经常在后台可以看到来自国外IP的攻击,令人头疼。今天浩道跟大家分享如何通过Nginx来实现禁止国外IP访问网站,确保你网站免遭国外IP攻击了!

如果你对nginx相关知识感兴趣,可以看看这篇,可以确保你快速掌握其功能与应用场景!

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

一、安装 geoip2 扩展依赖

[root@fxkj~]#yuminstalllibmaxminddb-devel-y

二、下载 ngx_http_geoip2_module 模块

[root@fxkjtmp]#gitclonehttps://github.com/leev/ngx_http_geoip2_module.git
[rotmp]#

三、解压模块到指定路径

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

[root@fxkjtmp]#mvngx_http_geoip2_module//usr/local/
[root@fxkjlocal]#llngx_http_geoip2_module/
total60
-rw-r--r--1rootroot1199Aug1317:20config
-rw-r--r--1rootroot1311Aug1317:20LICENSE
-rw-r--r--1rootroot23525Aug1317:20ngx_http_geoip2_module.c
-rw-r--r--1rootroot21029Aug1317:20ngx_stream_geoip2_module.c
-rw-r--r--1rootroot3640Aug1317:20README.md

四、安装 nginx 模块

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

下载 nginx 1.18 版本

[root@fxkj~]#yuminstalllibmaxminddb-devel-y

解压 nginx1.18 软件包并 升级为 nginx1.18 ,添加 ngx_http_geoip2 模块

需要注意:

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

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

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

nginxversion:nginx/1.16.0

builtbygcc4.8.520150623(RedHat4.8.5-39)(GCC)

builtwithOpenSSL1.0.2k-fips26Jan2017

TLSSNIsupportenabled

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

编译安装

[root@fxkjtmp]#tar-xfnginx-1.18.0.tar.gz
[root@fxkjtmp]#cdnginx-1.18.0/
[root@fxkjnginx-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@fxkjnginx-1.18.0]#make
[root@fxkjnginx-1.18.0]#cp/usr/loca/nginx/sbin/nginx/usr/loca/nginx/sbin/nginx1.16#备份
[root@fxkjnginx-1.18.0]#cpobjs/nginx/usr/local/nginx/sbin/#用新的去覆盖旧的
[root@fxkjnginx-1.18.0]#pkillnginx#杀死nginx
[root@fxkjnginx-1.18.0]#/usr/local/nginx/sbin/nginx#再次启动Nginx

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

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

nginxversion:nginx/1.18.0

builtbygcc4.8.520150623(RedHat4.8.5-39)(GCC)

builtwithOpenSSL1.0.2k-fips26Jan2017

TLSSNIsupportenabled

configurearguments:–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

0bdd08ee-8fdc-11ee-939d-92fbcf53809c.png

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

0beed3ee-8fdc-11ee-939d-92fbcf53809c.png

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

[root@fxkjlocal]#cd/usr/share/GeoIP/
[root@fxkjGeoIP]#ll
total69612
lrwxrwxrwx.1rootroot17Mar72019GeoIP.dat->GeoIP-initial.dat
-rw-r--r--.1rootroot1242574Oct302018GeoIP-initial.dat
lrwxrwxrwx.1rootroot19Mar72019GeoIPv6.dat->GeoIPv6-initial.dat
-rw-r--r--.1rootroot2322773Oct302018GeoIPv6-initial.dat
-rw-r--r--1rootroot3981623Aug1202:37GeoLite2-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_reload5m;
$geoip2_data_country_codecountryiso_code;
}
map$geoip2_data_country_code$allowed_country{
defaultyes;
CNno;
}
0bfcf550-8fdc-11ee-939d-92fbcf53809c.png

在 server 中的 location 下 添加 条件

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

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

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

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

[root@fxkj~]#/usr/local/nginx/sbin/nginx-t
nginx:theconfigurationfile/usr/local/nginx/conf/nginx.confsyntaxisok
nginx:configurationfile/usr/local/nginx/conf/nginx.conftestissuccessful
[roo@fxkj~]#/usr/local/nginx/sbin/nginx-sreload

7、模拟测试验证

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

这里我的 IP 是 来自于韩国

0c075bc6-8fdc-11ee-939d-92fbcf53809c.png

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

0c27edc8-8fdc-11ee-939d-92fbcf53809c.png

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

“13.125.1.194––[14/Aug/2020:16:15:51+0800]“GET/favicon.icoHTTP/1.1”404548“https://www.fxkjnj.com/”“Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/84.0.4147.125Safari/537.36”
0c356110-8fdc-11ee-939d-92fbcf53809c.png

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

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    10990

    浏览量

    206734
  • IP
    IP
    +关注

    关注

    5

    文章

    1404

    浏览量

    148272
  • 网站
    +关注

    关注

    1

    文章

    256

    浏览量

    22747
  • nginx
    +关注

    关注

    0

    文章

    135

    浏览量

    11985

原文标题:网站经常遭受外国IP攻击?可以通过Nginx来禁止其访问!

文章出处:【微信号:浩道linux,微信公众号:浩道linux】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    网站用户终于解决访问网站慢的问题

    成熟,提供的也不是很多.以个人的经验,下面给大家介绍一下双线主机吧!双线主机服务 双线服务器实际是一台服务器分别有电信和网通两条线路接入,通过对用户 IP 地址的智能解析,实现电信用户访问
    发表于 08-03 15:47

    IP屏蔽软件作用

    国外用户访问,当然也可以只限制某个地区访问!由于许多公司产品相似,一些同行竞争对手缺乏原创精神,总是拷贝别人网站上一些优秀图片及文字发布到自己的
    发表于 11-05 13:58

    如何在电脑上禁止访问QQ空间

    今天教大家如何在电脑上不影响QQ正常使用的前提下,禁止访问QQ空间。IE的那个设置不行,因为一旦登录qzone.qq.com网站,qq程序会自动引导解除屏蔽,改hosts也不行,所以我们要用其他
    发表于 04-28 15:02

    如何访问国外网站,包括github网站????

    `想***,可是网速会不不给力。同志们,谁有好方法去访问米国的网站呢????`
    发表于 03-12 10:57

    【NanoPi NEO试用体验】之安装配置Nginx环境WEB网站详解

    WEB网站的经典环境。首先NanoPi NEO原生就是为LINUX系统而开发的所以系统方面不用担心。至于NGINX和PHP在WEB网站用户访问量不超过1000次并发
    发表于 10-18 12:25

    NanoPi NEO - 可靠的Nginx 网络服务器

    )是为任何规模的网站,尤其是繁忙的网站有用的一些附加功能的替代PHP 的FastCGI 实现),安装如下:#apt-get -y install php7.0-fpm5. 配置nginx
    发表于 06-20 15:43

    如何通过Dataworks禁止MaxCompute 子账号跨Project访问

    ://ram.console.aliyun.com/2、通过用户管理创建RAM子账号,同时保存ak信息。3、开通RAM子账号独立登录访问权限。4、通过Dataworks项目管理,实现
    发表于 03-15 11:21

    Linux运维Nginx软件优化之安全优化

    一、Nginx优化分类安全优化(提升网站安全性配置)性能优化(提升用户访问网站效率)二、Nginx安全优化2.1 隐藏
    发表于 12-17 15:12

    nginx实现的负载均衡

    nginx实现负载均衡
    发表于 05-04 13:42

    主要学习下nginx的安装配置

    处理。因为有了中间件,使得大型网站在规划有了更好的层次性,维护上更加方便。也可以实现负载均衡、安全防护等。Nginx是一个开源高性能、可靠的HTTP中间件、代理服务,在目前企业中得到了很大的利用。今天
    发表于 10-19 14:12

    苹果禁止iPhone黑客访问App Store应用商店

    苹果禁止iPhone黑客访问App Store应用商店  据国外媒体报道,苹果近日对曾经入侵iPhone手机操作系统的黑客采取了较为严历的打击措
    发表于 02-22 09:34 568次阅读

    配置Nginx访问日志

    每当处理客户请求时,Nginx都会在访问日志中生成一个新记录。每个事件记录都包含一个时间戳,并包含有关客户端和所请求资源的各种信息。访问日志可以显示访问者的位置,
    的头像 发表于 05-24 09:59 1994次阅读

    如何通过Nginx实现远程调试本机代码

    做 HTTPS 就不需要改代码了,只需修改 host 将后端测试环境域名指向 nginx 服务的 IP 即可,而且可以适用于其它的 HTTP 服务开发调试。
    发表于 03-03 15:26 287次阅读

    多个相同IP设备通过网段隔离器实现不同IP访问映射

    )来解决这一问题,它允许多个设备在内部网络上共享单个公共IP地址,并实现外网的跨网段访问。 网段隔离器可以通过WAN和LAN不同防火墙区域进行网段隔离;
    的头像 发表于 11-15 17:21 351次阅读
    多个相同<b class='flag-5'>IP</b>设备<b class='flag-5'>通过</b>网段隔离器<b class='flag-5'>实现</b>不同<b class='flag-5'>IP</b>的<b class='flag-5'>访问</b>映射

    Nginx的配置文件如何设置头信息保留真实IP不丢失

    Nginx 配置中设置头信息以保留客户端的真实 IP 地址通常是在使用反向代理的场景中需要的。当 Nginx 作为反向代理时,客户端的真实 IP 地址可能会在转发请求时丢失,因为到
    的头像 发表于 11-30 10:54 914次阅读