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

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

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

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

1. 安装 geoip2 扩展依赖:

yum install libmaxminddb-devel -y

2. 下载 ngx_http_geoip2_module 模块:

 git clone https://github.com/leev/ngx_http_geoip2_module.git

3. 解压模块到指定路径

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

# mv ngx_http_geoip2_module/ /usr/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

4. 安装 nginx 模块

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

下载 nginx 1.18 版本:

# yum install libmaxminddb-devel -y

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

需要注意:

  • 升级 nginx,添加 nginx 模块,只需要编译,然后 make。不需要 make install,不然线上的 nginx 会被新版本 nginx 完完整整的替换掉。
  • 编译前需要看下 nginx 当前安装了哪些模块。
#/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

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

# /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

5. 下载最新的 IP 地址数据库文件

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

登录 www.maxmind.com 网址,创建账户,下载最新的库文件。(账户创建就不演示了)点击左侧,Download Files:

用 Nginx 禁止国外 IP 访问我的网站...,nginx,nginx,tcp/ip,运维

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

用 Nginx 禁止国外 IP 访问我的网站...,nginx,nginx,tcp/ip,运维

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

# cd /usr/share/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

6. 配置 nginx 配置文件

修改前先备份配置文件:

# cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf-bak
# 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;
        }

用 Nginx 禁止国外 IP 访问我的网站...,nginx,nginx,tcp/ip,运维

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

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

if( $allowed_country= yes) {

	# return https://www.baidu.com;
	
	return 404;
}

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

# /usr/local/nginx/sbin/nginx -t
# /usr/local/nginx/sbin/nginx -s reload

7. 模拟测试验证

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

用 Nginx 禁止国外 IP 访问我的网站...,nginx,nginx,tcp/ip,运维

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

用 Nginx 禁止国外 IP 访问我的网站...,nginx,nginx,tcp/ip,运维

我们再来看下 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 访问我的网站...,nginx,nginx,tcp/ip,运维

至此,我们通过 Nginx 来实现禁止国外 IP 访问网站就结束了~文章来源地址https://www.toymoban.com/news/detail-545425.html

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

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

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

相关文章

  • Nginx禁止某个IP或者IP段访问的方法

    当Nginx代理了很多网站时,我们想让一部分人能访问,一部分人访问不了;那么我们可以来到每个网站的Nginx代理配置文件,针对某个网站单独设置:禁止或允许IP或IP段访问网站。 例:配置文件 如果想禁止某个准确的IP,deny 后直接加IP(deny xxx.xxx.xxx.xxx;) 即可。 上面的配置

    2024年02月11日
    浏览(50)
  • Nginx配置禁止特定IP和端口访问

    Nginx是一款常用的高性能Web服务器和反向代理服务器。它通过灵活的配置文件能够实现各种功能,包括限制特定IP地址和端口的访问。本文将详细介绍如何使用Nginx配置禁止特定IP和端口的访问。 首先,确保你已经正确安装和配置了Nginx。以下是一个简单的Nginx配置文件示例:

    2024年02月02日
    浏览(40)
  • Nginx或Apache禁止某些IP段访问的两种方法

    修改Nginx配置文件nginx.conf Nginx配置访问IP可以修改nginx.conf文件,只需要在server中添加allow和deny的IP即可,如下: server {     listen       80;     server_name  localhost;     allow all;     deny 123.123.123.123;     error_page   500 502 503 504  /50x.html; }   注意!上面的配置中allow必须在deny的前

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

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

    2024年02月06日
    浏览(37)
  • nginx 配置 可使用服务器IP访问网站

    如果想要在局域网中使用ip访问nginx配置的网站,需要在防火墙中设置开放端口 nginx 默认监听的是80端口,,我们也可以在nginx的配置文件中复制粘贴多个server,并设置不同的监听端口 1,添加80端口  firewall-cmd --zone=public --add-port  80/tcp  --permanent 2,重启防火墙服务:systemctl

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

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

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

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

    2024年03月12日
    浏览(64)
  • Nginx禁止/屏蔽攻击服务器的IP地址

    nginx安装在IP为x.x.x.x的服务器上 第一步,nginx安装。 第二步,nginx配置。 第三步,nginx启动和访问站点。 第四步,nginx服务关闭和重启。 第五步,新建nginx启动脚本可以不进入nginx根目录即可进行相应的操作,设置服务器重启时nginx会自动启动。 第一步,在/etc/nginx文件夹中新

    2024年02月06日
    浏览(53)
  • Nginx配置只允许部分ip访问

           前几天解答一个需求,公司的服务器映射的外网ip被恶意的绑定了域名了,导致人家可以通过域名直接访问我们的测试服务,运营商觉得我们绑定未备案域名,联系我们让我们整改,简单的处理就是只允许通过外网ip访问,过滤掉域名访问方式。       简单处理如下:

    2024年02月11日
    浏览(52)
  • 通过Nginx配置访问IP白名单

          有时部署的应用需要只允许某些特定的IP能够访问,其他IP不允许访问,这时,就要设置访问白名单; 设置访问白名单有多种方式: 1.通过网络防火墙配置,例如阿里云/华为云管理平台 2.通过服务器防火墙配置,iptables 3.通过nginx配置访问分发限制 4.通过nginx的allow、den

    2024年02月16日
    浏览(48)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包