当前位置: 首页 > news >正文

F5中获取客户端ip地址(client ip)

当F5设备对其原始设置上的所有IP地址使用NAT时,连接到poo成员(nodes、backend servers)的出站连接将是NAT IP地址。

pool 成员(nodes、backend servers)将无法看到真实的客户端 ip地址,因为看到的是F5上的NAT IP地址。

如果池是HTTP WEB服务器,则可以使用X-Forwarded-For HTTP标头。

但是,对于非HTTP池服务器,需要禁用BIG-IP NAT,以允许客户端ip在访问pool成员是成为源IP地址。

1.环境

1.BIG-IP

2.配置了NAT或者SNAT

3.NAT 的设置为 All IPv4 Addresses

4.NAT的 VLAN / Tunnel Traffic 配置为 All

5.Virtual Server's Source Address Translation 配置为 None

2.操作

2.1.Pool 是一个 HTTP Web 服务器

本文介绍在 BIG-IP 系统上配置了 SNAT 对象时,如何允许池成员 Web 服务器接收原始客户端 IP 地址。

SNAT 对象将原始客户端 IP 地址映射到 BIG-IP 设备上定义的转换地址。当 BIG-IP 系统收到来自客户端 IP 地址的请求时,如果请求中的客户端 IP 地址是在 SNAT 中定义的,则 BIG-IP 系统会将传入数据包的源 IP 地址转换为 SNAT 地址。

当 BIG-IP 系统将传入数据包的源 IP 地址转换为 SNAT 地址时,Web 服务器会将请求视为源自 SNAT 地址,而不是原始客户端 IP 地址。如果需要 Web 服务器记录请求的原始客户端 IP 地址,则 SNAT 地址转换行为可能会出现问题。

为避免记录 SNAT 地址,可以将 BIG-IP 系统配置为在 X-Forwarded-For (XFF) HTTP 标头中插入原始客户端 IP 地址,并将接收请求的 Web 服务器配置为记录标头中的客户端 IP 地址,而不是 SNAT 地址。

BIG-IP 系统仅插入一个 HTTP X-Forwarded-For 标头。如果请求中存在现有的 X-Forwarded-For 标头,则 BIG-IP 会将客户端 IP 地址附加到末尾。例如:

X-Forwarded-For: 192.0.2.1, 198.51.100.1X-转发对象:192.0.2.1、198.51.100.1

注意:在 BIG-IP 13.0.0 及更早版本中,如果请求中存在现有的 X-Forwarded-For 标头,系统会附加新的 X-Forwarded-For 标头。运行 BIG-IP 13.0.0 及更早版本时,对于需要单个 X-Forwarded-For 标头的应用程序,可以使用 iRule 而不是 HTTP 配置文件选项,将客户端 IP 地址附加到任何现有 X-Forwarded-For 标头的末尾。F5 DevCentral iRules 代码共享包含一个示例 iRule:X Forwarded For Single Header Insert。

注意:只有当客户端连接到配置了客户端 SSL 配置文件的 BIG-IP 虚拟服务器时,才能在 HTTPS 流量中插入 HTTP 标头。当 BIG-IP 系统终止 SSL 连接时,它可以访问未加密的 HTTP 数据。有关配置 SSL 虚拟服务器的信息,请参阅 BIG-IP 配置指南。有关如何查找 F5 产品手册的信息,请参阅K98133564:搜索 AskF5 和查找产品文档的提示。

2.1.1 插入 X-Forwarded-For HTTP 标头

若要将 BIG-IP 系统配置为在 X-Forwarded-For HTTP 标头中插入原始客户端 IP 地址,请使用以下方法之一:

在 HTTP 配置文件中启用 Insert X-Forwarded-For 选项

使用 iRule 将原始客户端 IP 地址插入 X-Forwarded-For HTTP 标头中

与所需的性能(例如验证 HTTP 1.x 事务的正确格式)相比,使用这两种方法对性能的影响应该很小。

  1. Log in to the Configuration utility.登录到 Configuration 实用程序。
  2. Go to Local Traffic > Profiles. 转到 Local Traffic > Profiles
  3. For Services, select HTTP. 对于 Services (服务),选择 HTTP。
  4. Select Create. 选择 创建
  5. Enter a name for the HTTP profile.输入 HTTP 配置文件的名称。
  6. Select the Insert X-Forwarded-For check box.选中 Insert X-Forwarded-For 复选框。

    Note: Older versions of BIG-IP software may display the option as Insert XForwarded For instead of Insert X-Forwarded-For.注意:旧版本的 BIG-IP 软件可能会将选项显示为 Insert XForwarded For 而不是 Insert X-Forwarded-For

  7. For Insert X-Forwarded-For, select Enabled.对于 Insert X-Forwarded-For(插入 X-Forwarded-For),选择 Enabled(已启用)。
  8. Select Finished. 选择 Finished (完成)。

    You must now associate the new HTTP profile with the virtual server.现在,您必须将新的 HTTP 配置文件与虚拟服务器关联。详细步骤如下图:

这里存在一个问题,就是在服务器端抓包是可以看到客户端IP但是在日志记录上还是F5的服务IP。

2.1.2 使用 iRule 将原始客户端 IP 地址插入 X-Forwarded-For HTTP 标头
  1. Log in to the Configuration utility.登录到 Configuration 实用程序。
  2. Go to Local Traffic > iRules. 转到 iRules > 本地流量
  3. Select Create. 选择 创建
  4. Enter a name for the iRule. 输入 iRule 的名称。
  5. For Definition, enter the following iRule:对于“定义”,输入以下 iRule:

when HTTP_REQUEST { 当HTTP_REQUEST {HTTP::header insert X-Forwarded-For [IP::remote_addr]
HTTP::header 插入 X-Forwarded-For [IP::remote_addr]}

 X-Forwarded-For 是一个常见的 HTTP 标头,可能是接收系统预期的 HTTP 标头。在提供的示例 iRule 中,您还可以使用自定义 HTTP 标头名称而不是通用的 X-Forwarded-For,以更好地识别 BIG-IP 系统插入的 HTTP 标头。使用自定义 X-Forwarded-For HTTP 报头名称可能需要在接收系统上进行自定义配置,以便能够使用自定义 HTTP 报头值信息。

为了提高安全性,您可以先删除自定义 X-Forwarded-For HTTP 标头(如果 HTTP 请求中存在),然后使用描述的 iRules 语法添加它。标头值在到达 BIG-IP 系统之前可能已经被修改。如果系统使用自定义 X-Forwarded-For HTTP 标头信息进行身份验证或允许列表(例如在 Web 应用程序防火墙中),则可能需要先删除自定义标头。有关安全注意事项的更多信息,请参阅 RFC7239 的 Security Considerations 部分。

          6.Select Finished. 选择 Finished (完成)。

You must now associate the new iRule with the virtual server.

现在,您必须将新的 iRule 与虚拟服务器相关联。

2.2 Pool is a non-HTTP server

环境

  • BIG-IP BIG-IP 协议
  • NAT or SNAT is configured 配置了 NAT 或 SNAT
  • SNAT's Origin is set to All IPv4 AddressesSNAT 的 Origin 设置为 All IPv4 Addresses
  • NAT or SNAT's  VLAN / Tunnel Traffic is set to AllNAT 或 SNAT 的 VLAN/隧道流量 (VLAN/隧道流量) 设置为 全部
  • Virtual Server's Source Address Translation is NoneVirtual Server 的源地址转换为 None

操作

  1. Login to the Configuration Terminal.登录到 Configuration 终端
  2. Navigate to Local Traffic > Pools > Pool List.导航到 本地流量 > 池 > 池列表
  3. Click the Pool Name associate with the Virtual Server you want to disable NAT/SNAT.单击与要禁用 NAT/SNAT 的虚拟服务器关联的池名称
  4. Change Configuration to Advanced. 将 Configuration (配置) 更改为 Advanced (高级)。
  5. Change Allow SNAT to No. 将 Allow SNAT 更改为 No
  6. Change Allow NAT to No. 将 Allow NAT 更改为 No
  7. Click Update. 单击 Update (更新)。

 重要提示:禁用 NAT/SNAT 后,请确保池服务器能够将流量返回给 BIG-IP。如果流量返回到另一个网关,这将导致非对称路由问题。避免这种情况的一种方法是将面向内部的 BIG-IP 自身 IP 配置为池服务器的网关。

这里存在一个问题,当virual Pool中的server与self ip不在一个vlan时,设置gateway生效不了。

只有在同一个vlan的时候,gateway才生效,而且设置了gateway后过ssh就不通,需要单独添加路由。

参考文章:

https://my.f5.com/manage/s/article/K09202229

https://my.f5.com/manage/s/article/K47059113

https://my.f5.com/manage/s/article/K4816

相关文章:

F5中获取客户端ip地址(client ip)

当F5设备对其原始设置上的所有IP地址使用NAT时,连接到poo成员(nodes、backend servers)的出站连接将是NAT IP地址。 pool 成员(nodes、backend servers)将无法看到真实的客户端 ip地址,因为看到的是F5上的…...

Maven(生命周期、POM、模块化、聚合、依赖管理)详解

目录 Maven构建项目的生命周期 Maven的常用命令 POM 依赖管理 依赖导入 依赖范围设置 依赖版本维护 依赖传递 依赖冲突 解决依赖冲突的方法 使用maven提供的依赖调节原则 排除依赖,排除依赖的jar包 锁定版本 项目模块化 Maven项目的继承 Maven项目…...

电力场景绝缘子缺陷识别分割数据集labelme格式1099张3类别

数据集格式:labelme格式(不包含mask文件,仅仅包含jpg图片和对应的json文件) 图片数量(jpg文件个数):1099 标注数量(json文件个数):1099 标注类别数:3 标注类别名称:["brokenpart","brokeninsulator…...

【k8s集群应用】Kubernetes 容器编排系统

文章目录 Kubernetes 容器编排系统背景与发展Kubernetes 基本概念Kubernetes 集群架构与组件Kubernetes 核心组件Master 组件配置存储中心Node 组件 Kubernetes核心概念1. Pod2. Pod控制器3. Label与Label选择器4. Service5. Ingress6. Volume7. Name与Namespace K8S创建Pod资源…...

Unity3D仿星露谷物语开发2之工程初始化

1、依赖包安装 进入【Window -> Package Manager】 安装如下插件: 1)Cinemachine 它是一套专门控制Unity Camera的模块,适用于各种游戏场景中物体的移动变化,解决了许多关于摄像机间的复杂控制,混合&#xff0c…...

Kafka篇之参数优化进而提高kafka集群性能

1. Kafka性能优化分类 Kafka集群的性能优化涉及多个方面,包括硬件资源、网络、配置文件参数等。 调优目标通常是为了提高吞吐量、减少延迟、提升稳定性和故障恢复能力。 以下是Kafka集群调优的常见策略,以及调优后的配置文件示例。 1. 硬件资源调优 C…...

关于SAP Router连接不稳定的改良

这个也是网上看来的,之前在用的时候也在想是不是建立一个长连接,就不至于断线。今天正好看到。 关于SAP Router连接不稳定的改良 我们在使用SAPRouter时经常会碰到断线,其发生原因有很多,如:网络不稳定、操作间隔时间…...

使用pygame做游戏(2):2048游戏的进一步改造,以失败告终

前言 受《Python树莓派编程从零开始》里的示例启发,我决定将上篇的2048游戏进行“面向对象化”改造。 这次除了要建立一些对象,还要能有移动效果,并能显示中文。 另外我还发现一个bug:方块放满了不代表输了,还要检查能…...

【CSS in Depth 2 精译_078】12.6 调整字间距,提升可读性 + 12.7 本章小结

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第四部分 视觉增强技术 ✔️【第 12 章 CSS 排版与间距】 ✔️ 12.1 间距设置 12.1.1 使用 em 还是 px12.1.2 对行高的深入思考12.1.3 行内元素的间距设置 12.2 Web 字体12.3 谷歌字体12.4 font-fac…...

泷羽sec学习打卡-brupsuite7搭建IP炮台

声明 学习视频来自B站UP主 泷羽sec,如涉及侵权马上删除文章 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都 与本人无关,切莫逾越法律红线,否则后果自负 关于brupsuite的那些事儿-Brup-IP炮台搭建 搭建炮台服务端安装zmap1、更新系统和安装基础依赖&#xff…...

使用Svelte构建轻量级应用详解

文章目录 前言一、为什么选择Svelte?二、快速上手Svelte三、理解Svelte的核心概念四、优化性能与用户体验五、案例研究:构建一个待办事项应用结语 前言 Svelte是一款新兴的前端框架,以其小巧的体积、高效的性能和直观的API赢得了开发者的青睐…...

Qt设置部件的阴影效果

QT中的比如QWidget,QLabel,QPushbutton,QCheckBox都可以设置阴影效果,就像这样: 以QWidget为例,开始尝试使用样式表的形式添加阴影,但没有效果,写法如下: QWidget#widget1::shadow{color: rgb…...

Python 助力 DBA:高效批量管理数据库服务器的多线程解决方案-多库查询汇总工具实现

批量数据库服务器连接测试与数据汇总:Python实现方案 作为数据库服务器运维人员,我们经常需要面对大量服务器的连接测试和数据汇总工作。本文将介绍一个使用Python实现的高效解决方案,可以帮助我们快速完成这些任务。 需求概述 从配置文件…...

vue响应式数据-修改对象的属性值,视图不更新

如图: 一:问题是: 我把数据处理后能console.log()打印出来,但是页面的内容不能同步的更新渲染; 二:要求: 在数组循环列表里面,我点击单个的item按钮时,需要实时加载进度…...

【OpenCV计算机视觉】图像处理——平滑

本篇文章记录我学习【OpenCV】图像处理中关于“平滑”的知识点,希望我的分享对你有所帮助。 目录 一、什么是平滑处理 1、平滑的目的是什么? 2、常见的图像噪声 (1)椒盐噪声 ​编辑(2) 高斯噪声 &a…...

C#编程报错- “ComboBox”是“...ComboBox”和“...ComboBox”之间的不明确的引用

1、问题描述 在学习使用C#中的Winform平台编写一个串口助手程序时, 在编写一个更新ComboBox列表是遇到了问题,出错的代码是 2、报错信息 CS1503 参数 2: 无法从“System.Windows.Forms.ComboBox”转换为“System.Windows.Forms.ComboBox” CS1503 …...

JAVA:访问者模式(Visitor Pattern)的技术指南

1、简述 访问者模式(Visitor Pattern)是一种行为型设计模式,允许你将操作分离到不同的对象中,而无需修改对象本身的结构。这种模式特别适合复杂对象结构中对其元素进行操作的场景。 本文将介绍访问者模式的核心概念、优缺点,并通过详细代码示例展示如何在实际应用中实现…...

YashanDB共享集群产品能力观测:细节足见功底

本文基于前泽塔数科研发总监-王若楠2024年11月在“2024年国产数据库创新生态大会”-“根”技术专场的演讲整理形成,主要对崖山共享集群YAC的架构、功能、高可用性、性能四大方面进行全面测试,并分享了测试环境和测试结论。 年初,基于某些商业…...

【Linux】—简单实现一个shell(myshell)

大家好呀,我是残念,希望在你看完之后,能对你有所帮助,有什么不足请指正!共同学习交流哦! 本文由:残念ing原创CSDN首发,如需要转载请通知 个人主页:残念ing-CSDN博客&…...

@FeignClient用于Nacos微服务间的接口调用

依赖&#xff1a;<!-- spring-boot启动依赖 --> <!-- 提供者 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- openFeign --> <…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 &#xff08;结构体大小计算及位段 详解请看&#xff1a;自定义类型&#xff1a;结构体进阶-CSDN博客&#xff09; 1.在32位系统环境&#xff0c;编译选项为4字节对齐&#xff0c;那么sizeof(A)和sizeof(B)是多少&#xff1f; #pragma pack(4)st…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

基于 TAPD 进行项目管理

起因 自己写了个小工具&#xff0c;仓库用的Github。之前在用markdown进行需求管理&#xff0c;现在随着功能的增加&#xff0c;感觉有点难以管理了&#xff0c;所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD&#xff0c;需要提供一个企业名新建一个项目&#…...

iview框架主题色的应用

1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题&#xff0c;无需引入&#xff0c;直接可…...

go 里面的指针

指针 在 Go 中&#xff0c;指针&#xff08;pointer&#xff09;是一个变量的内存地址&#xff0c;就像 C 语言那样&#xff1a; a : 10 p : &a // p 是一个指向 a 的指针 fmt.Println(*p) // 输出 10&#xff0c;通过指针解引用• &a 表示获取变量 a 的地址 p 表示…...