雷池 WAF 如何配置才能正确获取到源 IP

server/2024/12/22 2:54:36/

经常有大哥反馈说雷池攻击日志里显示的 IP 有问题。

这里我来讲一下为什么一些情况下雷池显示的攻击 IP 会有问题。

问题说明

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

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 连接直接来获取。

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

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

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

对大多数 CDN 来说,会将 CDN 自身的 IP 也放到 XFF 中, 此时需要设置为从上上一级 获取


http://www.ppmy.cn/server/127737.html

相关文章

中间件技术

在Java开发中,中间件技术是一种非常关键且广泛使用的技术。中间件通常被定义为位于操作系统、网络和数据库之上的软件层,用于简化分布式系统的开发、部署和管理。它们提供了一系列服务,如消息传递、事务管理、安全控制等,以帮助开…

【深海王国】初中生也能画的电路板?目录合集

Hi٩(๑ ^ o ^ ๑)۶, 各位深海王国的同志们,早上下午晚上凌晨好呀~辛勤工作的你今天也辛苦啦 (o゜▽゜)o☆ 今天大都督为大家带来系列文章《初中生也能画的电路板》,帮你一周内快速入门PCB设计,手把手教你从元器件库添加、电路原理图绘制、…

pytorch线性/非线性回归拟合

一、线性回归 1. 导入依赖库 import numpy as np import matplotlib.pyplot as plt import torch from torch import nn, optim from torch.autograd import Variable numpy:用来构建数据matplotlib.pyplot: 将构建好的数据可视化torch.nn&#xff1a…

Excel中查找某个值的位置,用位置取值

有 2022 年 1 月的日销售额统计表如下所示: 找出销售额最大的是哪一天,在 C2 单元格里输入: spl("E(?1).pmax(Sales)",A1:B32)返回结果 12 接着找出销售额最大的那天的前 5 天和后 5 天的销售额: spl("E(?1).…

漫谈前端:2025年框架是该选vue还是react?

相信很多前端小伙伴都有过纠结的时候,开始一个项目的时候是该选vue还是react。很多情况下,都是根据团队现有框架延续,或者是自身数量度。渐渐的公司组件和规范全基于某一种框架,虽然很爽但Allin难掉头。本文就浅浅的比较下vue和re…

OpenAI大模型API代码落地实战模拟本地知识库和多轮会话实现

学习OpenAI API的意义在于多方面的,不仅限于对技术本身的掌握,更关乎于对当前大模型领域发展趋势的理解与应用。 技术创新与引领: OpenAI作为大模型技术的先行者之一,其API设计和功能定义往往代表了行业内的最新趋势和技术标准。…

python 实现Adler32算法

Adler32算法介绍 Adler-32算法是一种常用的校验和算法,由Mark Adler于1995年提出,它是对Fletcher校验和算法的修改。该算法通过计算两个16位校验和A和B,并将它们的位连接成32位整数来获得Adler-32校验和。以下是对Adler-32算法的详细解释&am…

CentOS 替换 yum源 经验分享

视频教程在bilibili:CentOS 替换 yum源 经验分享_哔哩哔哩_bilibili问题原因 解决方法 1. 进入镜像目录 [rootlocalhost ~]# cd /etc/yum.repos.d/ 2.备份文件 [rootlocalhost yum.repos.d]# rename repo bak * 3.寻找阿里镜像源复制 https://developer.aliyun.com/mirror/ …