首页 > 系统相关 >NGINX根据客户端真实ip限制/referer限制

NGINX根据客户端真实ip限制/referer限制

时间:2023-04-21 12:23:36浏览次数:36  
标签:http nginx ip NGINX referer IP Referer

最近后端服务被攻击,所有接口被疯狂调用,记录一次nginx应对攻击的方案,包括黑白名单、referer限定等。

一、NGINX根据用户真实IP限源
1、nginx日志打印
在nginx.conf配置文件中的http模块打印

log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
2、NGINX根据用户真实IP限源
同样在http模块中,将客户端真实ip记录在X-Forwarded-For中

#配置使deny可以根据客户端真实ip禁用
real_ip_header X-Forwarded-For;
set_real_ip_from 0.0.0.0/0;
real_ip_recursive on;
ngx_http_realip_module 模块有如下三个指令;

①:set_real_ip_from

该指令用于设置授信 IP,即请求过来时由某个头字段携带的 IP 中 nginx 自己认为可信的 IP,该头字段由 real_ip_header 指令指定;
该指令值一般是前几层代理的 IP ;


②:real_ip_header

该指令用于告知 nginx 从每个客户端请求中的哪个头字段来获取客户端真实的 IP;
该指令默认值是 X-Real-IP,不过现在主流的都是通过 X-Forwarded-For 字段来获取客户端真实 IP,X-Forwarded-For 目前已经是主流运用的字段了;
我们也可以在 nginx 配置时自定义一个新的字段;


③:real_ip_recursive

nginx 从 real_ip_header 指令指定的头字段中获取 IP,可能会有多个 IP 值;

当 real_ip_recursive 指令值为 off,nginx 从获取到 IP 值中从右往左(也即从后往前)的顺序,以最后一个 IP 值作为客户端的真实 IP ,此时不会排除授信 IP;
当 real_ip_recursive 指令值为 on,nginx 从获取到 IP 值中从右往左(也即从后往前)的顺序,排除 set_real_ip_from 指令指定的授信 IP,以最后一个非授信 IP 值作为客户端的真实 IP ;


3、NGINX的黑白名单deny/allow
经过slb的请求默认会将真实ip放在$http_x_forwarded_for中,根据日志中打印出的攻击ip进行禁用,同样在http模块中。

#禁用某个ip
deny 123.123.123.123;
#禁用某个ip段
deny 123.123.123.0/24;
#禁用全部ip
deny all;
Nginx的deny和allow指令是由ngx_http_access_module模块提供,Nginx安装默认内置了该模块。

语法
1、allow 指令
允许哪些 IP 访问,all 表示允许所有;
2、deny 指令
禁止哪些 IP 访问,all 表示禁止所有;
作用域 http / server / location / limit_except ;

二、nginx根据referer限制
根据nginx日志中打印的$http_referer来进行限制

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

2、valid_referers 指令
语法: valid_referers none | blocked | server_names | string … ;

配置段: server, location

指定合法的来源'referer', 他决定了内置变量$invalid_referer的值,如果referer头部包含在这个合法网址里面,这个变量被设置为0,否则设置为1. 需要注意的是:这里并不区分大小写的.

参数说明:

none:请求头缺少Referer字段,即空Referer
blocked:请求头Referer字段不为空(即存在Referer),但是值被代理或者防火墙删除了,这些值不以“http://”或“https://”开头,通俗点说就是允许“http://”或"https//"以外的请求。
server_names:Referer请求头白名单。
arbitrary string:任意字符串,定义服务器名称或可选的URI前缀,主机名可以使用*号开头或结尾,Referer字段中的服务器端口将被忽略掉。
regular expression:正则表达式,以“~”开头,在“http://”或"https://"之后的文本匹配。

e.g.


server {
......
#配置合法referers,其余拦截
#微信小程序域名:servicewechat.com 浙里办域名:mapi.zjzwfw.gov.cn
valid_referers blocked servicewechat.com mapi.zjzwfw.gov.cn Apifox;
if ($invalid_referer) {
return 403 ;
}
......
}
上面配置合法的Referer为 servicewechat.com / mapi.zjzwfw.gov.cn / Apifox 和 无Referer(浏览器直接访问,就是没有Referer的) ; 其他非法Referer请求过来时, $invalid_referer 值为1 , 就return 403。
————————————————
版权声明:本文为CSDN博主「Thomas灬Wade」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/jnloverll/article/details/128103837

标签:http,nginx,ip,NGINX,referer,IP,Referer
From: https://www.cnblogs.com/gaoyanbing/p/17339925.html

相关文章

  • Nginx配置referer校验,实现简单的防盗链
    1、NginxReferer模块nginx模块ngx_http_referer_module通常用于阻挡来源非法的域名请求。当一个请求头的Referer字段中包含一些非正确的字段,这个模块可以禁止这个请求访问站点。构造Referer的请求很容易实现,所以使用这个模块并不能100%的阻止这些请求。2、valid_referers指令......
  • eclipse
    安装eclipseeclipse官网下载安装JDK配置环境变量安装gradlemaven配置环境变量,修改maven阿里云安装spring-tool-suite4插件spring-tool-suite4安装gradle插件BuildshipGradleIntegration示例HelloController.javapackagecom.example.demo.controller;import......
  • hive出现MetaException(message:Metastore contains multiple versions (2)异常
    1、使用Spark操作Hive表时发生的报错2、错误日志23/04/1908:49:28WARNmetadata.Hive:Failedtoaccessmetastore.Thisclassshouldnotaccessedinruntime.org.apache.hadoop.hive.ql.metadata.HiveException:java.lang.RuntimeException:Unabletoinstantiateor......
  • JavaScript 测试及效验工具
    JavaScript是一款强大的广泛运用于现代Web站点及应用的脚本语言。作为一个技艺精湛的Web开发者,掌握JavaScript可以增强用户的使用体验,提供交互及富客户端等功能。尽管JavaScript的语法非常简单,但对于写程序而言仍然是困难重重,就是因为它的运行环境:基于Web浏览器。以下您可以看......
  • 代理IP在广告管理和自动化中的应用
    对于企业来说,广告投放可以帮助企业树立品牌形象、提高销售额、增强市场竞争力等。但是,广告投放同样也是一项非常繁琐的工作,需要投放人员在不同时间、不同地理位置、不同平台进行投放,如何管理这些广告、如何优化广告效果,成为了现代企业广告投放的一大难点。 而广告管理和自动化......
  • 如何在 .NET Core WebApi 中处理 MultipartFormDataContent 中的文件
    在上一篇文章(如何在.NETCoreWebApi中处理MultipartFormDataContent)中,我们有描述过如何以最简单的方式在.NETCoreWebApi中处理MultipartFormDataContent。基于框架层面的封装,我们可以快速的从Request.Form中分别拿到文件内容和文本内容,但是这些默认的解析方式都是建......
  • Stata中的治疗效果:RA:回归调整、 IPW:逆概率加权、 IPWRA、 AIPW|附代码数据
    全文链接:http://tecdat.cn/?p=10148最近我们被客户要求撰写关于Stata中的治疗效果的研究报告,包括一些图形和统计输出。治疗效果估算器根据观察数据估算治疗对结果的因果关系。我们将讨论四种治疗效果估计量:RA:回归调整IPW:逆概率加权IPWRA:具有回归调整的逆概率加权AI......
  • AdGuard Home 排除对某个局域网 IP 的拦截
    最近装上了AdGuardHome来解决一下移X宽带惨不忍睹的DNS问题,但是发现网X云一直都没速度,手机APP也显示设备离线,登录后台一看,发现是AdGuard把迅X的API拦截了于是,在"过滤器-自定义过滤规则"里关掉对客户端192.168.10.4,也就是网X云的局域网IP的拦截@@||*.*^$clien......
  • JavaScript学习
    JS中的注释学习一个语言,先学习一个语言的注释,因为注释是给我们自己看的,也是给开发人员看的写好一个注释,有利于我们以后阅读代码5-1单行注释一般就是用来描述下面一行代码的作用可以直接写两个/,也可以按ctrl+///我是一个单行注释//下面代码表示在浏览器里面出现一个弹出......
  • JavaScript学习笔记
    SassSASS官网世界上最成熟、最稳定、最强大的专业级CSS扩展语言!sass是一个css的预编译工具也就是能够更优雅的书写csssass写出来的东西浏览器不认识依旧是要转换成css在浏览器中运行变量定义一个变量,在后面的代码中使用使用$来定义变量//定义一个$c作为变量,值是红......