Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >雷池社区版 如何配置才能正确获取到源 IP

雷池社区版 如何配置才能正确获取到源 IP

作者头像
用户3358450
修改于 2024-11-19 06:58:32
修改于 2024-11-19 06:58:32
950
举报

问题说明

image.png
image.png

默认情况下,雷池会通过 HTTP 连接的 Socket 套接字读取客户端 IP。在雷池作为最外层网管设备的时候这没有问题,雷池获取到的 IP 就是攻击者的真实 IP。

但是,有些情况下我们需要在雷池前面再叠加其他代理设备(如 Nginx,CDN,应用交付,API 网管等等)。在这种情况下,实际连接雷池的不是真正的网站用户,而是这些代理设备,这种情况下我们就需要根据实际网络拓扑来调整雷池的 IP 获取方式。

先了解什么是 X-Forwarded-For

X-Forwarded-For 是一个相对通用的 HTTP 请求头。

HTTP 流量在经过代理时,由于网络连接被截胡,服务器无法得知真正的客户端 IP。这时代理设备会给当前的流量加上一个 X-Forwarded-For 头,里面的内容就是连接这个代理的客户端 IP。

下面这个例子中 HTTP 代理通过 X-Forwarded-For 头告诉服务器,真正的客户端地址是 1.2.3.4

代码语言:http
AI代码解释
复制
GET / HTTP/1.1

Host: demo.waf-ce.chaitin.cn

User-Agent: Mozilla/5.0 (X11; Linux x86\_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36

X-Forwarded-For: 1.2.3.4

X-Forwarded-For 实际上是一个链式结构。如果流量经过了多层代理设备,X-Forwarded-For 会记录途径的所有 IP。

下面这个例子中 HTTP 代理通过 X-Forwarded-For 头告诉服务器,流量经过了三层代理,真正的客户端地址是 1.2.3.4,第一层代理的是 11.12.13.14,第二层代理的地址是 21.22.23.24,第三次代理的地址可以通过 Socket 连接直接来获取。

代码语言:http
AI代码解释
复制
GET / HTTP/1.1

Host: demo.waf-ce.chaitin.cn

User-Agent: Mozilla/5.0 (X11; Linux x86\_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36

X-Forwarded-For: 1.2.3.4, 11.12.13.14, 21.22.23.24

IP-Forwarded-For 头靠谱么

在代理设备和代理链路可信的情况下 IP-Forwarded-For 头传递的内容是很靠谱的,可以放心的试用。

但是呢,如果代理设备不可信,那么攻击者会通过伪造 IP-Forwarded-For 头的办法来实现伪造源 IP。

雷池的配置

雷池全局配置里有一个这样的选项,专门用来解决这个问题。

image.png
image.png

雷池在这个配置里提供了几个选项,根据上面讲到的知识,大家可以根据实际情况来选择最适合的选项

  • **从网络连接中获取**: 当雷池作为最外层代理设备,无其他前置代理时选用
  • **从 X-Forwarded-For 中获取上一级代理的地址**:在流量到达雷池之前还有**一层**代理设备(如 Nginx,CDN 等)时可选用
  • **从 X-Forwarded-For 中获取上上一级代理的地址**:在流量到达雷池之前还有**两层**代理设备(如 Nginx,CDN 等)时可选用
  • **从 X-Forwarded-For 中获取上上上一级代理的地址**:在流量到达雷池之前还有**三层**代理设备(如 Nginx,CDN 等)时可选用
  • **从其他 HTTP Header 中获取**:有几种情况
  • 流量经过了一些特殊的反向代理设备,这类代理不会发送 X-Forwarded-For 头,但是可以通过配置,把 IP 通过其他头发过来
  • 流量到达雷池有多种途径,可能有一层代理,也可能有两层代理,可以通过配置前置代理设备来统一 HTTP

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
应用获取客户端真实IP
remote_addr代表客户端IP,但是它的值不是由客户端提供的,而是服务端根据客户端IP指定的。当你访问某个应用时,当中间没有经过任何代理,那么应用获取到的remote_addr就是你的主机IP。如果中间经过了代理转发,正常情况下,应用获取到的remote_addr就是代理的IP,除非在代理服务器上手动将remote_addr的地址设置成你的主机IP。
没有故事的陈师傅
2023/11/16
1.1K0
应用获取客户端真实IP
nginx配置解析之客户端真实IP的传递
前后端分离之后,采用nginx作为静态服务器,并通过反向代理的方式实现接口跨域的方式,在降低开发成本的同时也带来了诸多问题,例如客户端真实IP的获取。
木子墨
2018/09/13
2.7K0
nginx配置解析之客户端真实IP的传递
客户端IP获取
从标准格式可以看出,X-Forwarded-For头信息可以有多个,中间用逗号分隔,第一项为真实的客户端ip,剩下的就是曾经经过的代理或负载均衡的ip地址,经过几个就会出现几个。
码客说
2021/02/25
4.6K0
php获取用户真实IP和防刷机制
X-Forwarded-For(XFF):  是用来识别通过HTTP代理或负载均衡方式连接到Web服务器的客户端最原始的IP地址的HTTP请求头字段, 格式:clientip,proxy1,proxy2
smy
2018/11/28
4.8K0
php获取用户真实IP和防刷机制
获取客户端真实 IP 地址的最佳实践
公司从去年全面推动业务上云,而以往 IDC 架构部署上,接入层采用典型的 4 层 LVS 多机房容灾架构,在业务高峰时期,扩容困难(受限于物理机资源和 LVS 内网网段的网络规划),且抵挡不住 HTTPS 卸载引发的高 CPU 占用。
仁扬
2023/07/23
1.1K0
在LightHouse上安装雷池WAF保护你的网站
最近闲来无事发现一款免费的,号称使用智能语义分析算法的WAF(SafeLine,也叫雷池WAF)于是打算搭建试用一下 。
猫猫摸大鱼
2023/08/29
2.4K0
在LightHouse上安装雷池WAF保护你的网站
k8s生产实践之获取客户端真实IP
通常web应用获取用户客户端的真实ip一个很常见的需求,例如将用户真实ip取到之后对用户做白名单访问限制、将用户ip记录到数据库日志中对用户的操作做审计等等
仙人技术
2021/08/31
4.1K0
k8s生产实践之获取客户端真实IP
获取用户的真实ip
做网站时候经常会用到remote_addr和x_forwarded_for 这两个头信息来获取,客户端ip,然而当有反向代理或者CDN的情况下,这两个就不够准确了,需要调整一些配置 remote_addr: remote_addr 代表客户端的ip,但它的值不是由客户端提供的,而是服务端根据服务端的ip指定的, 当你的浏览器访问某个网站时候,假设中间没有任何代理,那么网站的web服务器(Nginx,Apache等) 就会把remote_addr设为你的机器ip 如果你用了某代理,那么你的浏览器会先访问这
joshua317
2018/04/16
4.4K0
nginx——关于获取真实ip
做网站时经常会用到remote_addr和x_forwarded_for这两个头信息来获取客户端的IP,然而当有反向代理或者CDN的情况下,这两个值就不够准确了,需要调整一些配置。
江小白
2018/07/16
5.2K0
nginx——关于获取真实ip
ASP.NET Core 搭配 Nginx 的真实IP问题
Nginx(Engine X)是一个高性能HTTP和反向代理服务,是由俄罗斯人伊戈尔·赛索耶夫为访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。 如果你是一名 ASP.NET Core 开发人员,并且你的 ASP.NET Core 应用部署在Linux上,相信你应该或多或少与 Nginx 有过接触,在我们将 ASP.NET Core 部署在 Linux 上时,它是被用做反向代理的最好选择之一。今天和大家聊一聊当我们使用了 Nginx 反向代理后,我们程序中获取真实IP(客户端真实ip,本文简称“真实IP”)的问题。
晓晨
2018/12/12
9070
ASP.NET Core 搭配 Nginx 的真实IP问题
Nginx(Engine X)是一个高性能HTTP和反向代理服务,是由俄罗斯人伊戈尔·赛索耶夫为访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。 如果你是一名 ASP.NET Core 开发人员,并且你的 ASP.NET Core 应用部署在Linux上,相信你应该或多或少与 Nginx 有过接触,在我们将 ASP.NET Core 部署在 Linux 上时,它是被用做反向代理的最好选择之一。今天和大家聊一聊当我们使用了 Nginx 反向代理后,我们程序中获取真实IP(客户端真实ip,本文简称“真实IP”)的问题。
晓晨
2018/11/12
1.7K0
ASP.NET Core 搭配 Nginx 的真实IP问题
【Go】获取用户真实的ip地址
用户请求到达提供服务的服务器中间有很多的环节,导致服务获取用户真实的 ip 非常困难,大多数的框架及工具库都会封装各种获取用户真实 ip 的方法,在 exnet 包中也封装了各种 ip 相关的操作,其中就包含获取客户端 ip 的方法,比较实用的方法如下:
thinkeridea
2019/11/04
4.6K0
Java杂谈之获取客户端IP
获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid,nginx等反向代理软件就不能获取到客户端的真实IP地址了。
你呀不牛
2021/05/28
4.9K0
Nginx结构全解析(33)
基于变量:如binary_remote_addr、remote_addr这样的变量,其值就为真实的IP!这样做连接限制(limit_conn模块)才有意义!
陈不成i
2021/05/12
2310
Nginx - 在Nginx中透传客户端真实IP的技巧
在使用 Nginx 作为反向代理服务器时,默认情况下,后端服务器只能看到 Nginx 的 IP 地址。为了记录日志、限制访问或进行其他基于 IP 地址的操作,获取客户端的真实 IP 地址非常重要。
小小工匠
2024/05/26
6.5K0
Nginx - 在Nginx中透传客户端真实IP的技巧
干货:Java正确获取客户端真实IP方法整理
在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了。 如果使用了反向代理软件,将http://192.168.1.110:2046/的URL反向代理为http://www.abc.com/的URL时,用request.getRemoteAddr()方法获取的IP地址是:127.0.0.1或192.168.1.110,而并不是客户端的真实IP。 经过
Java技术栈
2018/04/02
4K0
干货:Java正确获取客户端真实IP方法整理
nginx反向代理到后端tomcat,并将IP地址发送到后端的配置
/usr/local/nginx/conf/nginx.conf 在http段不要有下面4行:
保持热爱奔赴山海
2019/09/18
1.3K0
一文搞懂各种场景下的数据路由转发(二)——云厂商篇
目前腾讯云、阿里云等大型云厂商基本上都是通过提供CLB服务进行路由转发,什么是CLB?
粲然忧生
2024/05/06
8300
一文搞懂各种场景下的数据路由转发(二)——云厂商篇
如何在容器服务中获取客户端真实源IP
jokey,腾讯云容器产品工程师,热衷于云原生领域。目前主要负责腾讯云TKE 的售中、售后的技术支持,根据客户需求输出合理技术方案与最佳实践。 适用范围:腾讯云容器服务(Tencent Kubernetes Engine ,TKE), 以下简称 TKE。 为什么需要获取客户端真实源 IP? 当需要能感知到服务请求来源去满足一些业务需求时,就需要后端服务能准确获取到请求客户端的真实源 IP, 比如以下场景: 对服务请求的来源有做审计的需求,如异地登陆告警。 针对安全攻击或安全事件溯源需求,如 APT 攻击、
腾讯云原生
2020/10/19
7.1K4
Java 实战系列·获取请求 IP 地址
在 Spring 中,获取客户端真实 IP 地址的方法是 request.getRemoteAddr(),这种方法在大部分情况下都是有效的,但是在通过了 Squid 等反向代理软件就无法工作。
数媒派
2022/12/01
11.1K0
相关推荐
应用获取客户端真实IP
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档