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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/64438.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

白话java设计模式

创建模式 单例模式(Singleton Pattern): 就是一次创建多次使用,它的对象不会重复创建,可以全局来共享状态。 工厂模式(Factory Method Pattern): 可以通过接口来进行实例化创建&a…

MATLAB引用矩阵元素的几种方法

引用矩阵元素可以通过索引,也可以通过逻辑值 索引 通过引用元素在矩阵中的位置来提取元素,例如: - 逻辑值 通过某种逻辑运算来使得要提取的值变为逻辑 1 1 1,用 A ( ) A() A()提取即可, A A A为原矩阵的名称。 例如&…

Python发送带key的kafka消息

在Python中发送带有键(key)的Kafka消息,通常会使用confluent-kafka或kafka-python这样的库。这里我将分别展示如何使用这两个库来实现这个功能。 ### 使用 confluent-kafka 首先,确保你已经安装了confluent-kafka库。如果没有安装…

机器学习预处理-表格数据的空值处理

机器学习预处理-表格数据的空值处理 机器学习预处理-表格数据的分析与可视化中详细介绍了表格数据的python可视化,可视化能够帮助我们了解数据的构成和分布,是我们进行机器学习的必备步骤。上文中也提及,原始的数据存在部分的缺失&#xff0…

了解 SpringMVC 请求流程

文章目录 1. Spring 基础 - SpringMVC 请求流程1.1 引入1.2 什么是 MVC1.3 什么是 Spring MVC1.4 请求流程核心架构的具体流程步骤补充 1.5 案例**Maven 包引入****业务代码的编写**DaoServiceControllerwebapp 下的 web.xmlspringmvc.xmlJSP 视图 2. Spring 进阶 - Dispatcher…

【mysql】如何解决主从架构从库延迟问题

目录 1. 说明2.优化主库的写入性能3. 优化网络性能4. 增强从库的硬件性能5. 调整从库的配置6. 主从架构优化7. 监控和调优8.使用 GTID 和 Group Replication 1. 说明 1.在 MySQL 数据库中,从库延迟(replication lag)是指主库和从库之间的数据…

Springboot3.x配置类(Configuration)和单元测试

配置类在Spring Boot框架中扮演着关键角色,它使开发者能够利用Java代码定义Bean、设定属性及调整其他Spring相关设置,取代了早期版本中依赖的XML配置文件。 集中化管理:借助Configuration注解,Spring Boot让用户能在一个或几个配…

鸿道Intewell-C纯实时构型,适合有功能安全认证需求的工业操作系统

鸿道Intewell-C纯实时构型,适合有功能安全认证需求的工业操作系统 鸿道Intewell-C是一款工业实时微内核操作系统,由科东软件自主研发,具有超低延迟和最小抖动,保障工业设备可以高效处理时间敏感的现场业务,支持多种工…

Stream– ESP8266物联网应用,(客户端向服务器发送数据信息 客户端向服务器请求数据信息)

Stream– ESP8266物联网应用 Stream对于ESP8266-Arduino语言来说指的是数据序列。请留意:在C编程中Stream常被翻译作“流”。我们认为将Stream称为数据序列更加直观。因为数据序列这一概念有两个很关键特点。 第一个特点是“序”,即数据序列不能是杂乱…

提升PHP技能:18个实用高级特性

掌握PHP基础知识只是第一步。 深入了解这18个强大的PHP特性,将显著提升您的开发效率和代码质量。 1、超越 __construct() 的魔法方法 虽然 __construct() 为大多数开发者所熟知,PHP 却提供了更多强大的魔术方法,例如: class Da…

Spring MVC 请求头中 ContentType和DataType区别

一、Spring MVC 请求头中ContentType和DataType区别用途 1. dataType【通常在JQuery中使用】 定义:dataType 通常用于描述前端希望从服务器接收的数据格式。常见场景:这是前端参数,通常在 jQuery.ajax 或其他前端框架中使用,告诉…

Vue 3 中的 `update:modelValue` 事件详解

在 Vue 3 中,update:modelValue​ 事件通常与 v-model​ 指令一起使用,以实现自定义组件的双向数据绑定。以下是对该事件的详细分析: 事件定义 首先,我们需要在组件中定义 update:modelValue​ 事件。可以使用 defineEmits​ 函…

芯品荟|SWM221系列芯片之TFTLCD彩屏显示及控制

“革新未来,智驭控制新纪元”,由广东华芯微特集成电路有限公司市场总监张琢,对SWM221系列的强大功能表现进行了整体介绍。 确实,华芯微特在TFTLCD显示及控制有十多年应用基础和积累的团队,仍勇于挑战,自我…

MIT S6081 2024 Lab 1 | Operating System | Notes

目录 安装与下载 实验1 开始我们的实验 sleep(简单) pingpong(简单) primes (中等)/(困难) find(中等) xargs(中等) finally Reference I. Tools Debian 或 Ubuntu Arch…

华为认证HCIA——数据传输形式,数据封装的基本概念

前言: 整理下学习笔记,打好基础,daydayup!!! 对网络概念有基本理解后(华为认证HCIA——网络基本概念),开始进一步学习数据传输。 数据传输的形式 数据传输主要有三种形式: 1,电路传…

opencv小练习(未完成版)

读取一张彩色图像并将其转换为灰度图。 import cv2# 读取图片 img cv2.imread("./duck.png") img cv2.resize(img, dsizeNone, fx0.4, fy0.4, interpolationcv2.INTER_LINEAR) # 读取一张灰度图 img_gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 展示图片 cv2.im…

WSL (Windows Subsystem for Linux)

文章目录 Windows下使用Linux的三种方式:1.WSL(1)安装WSL(2)初始化Linux系统(3)安装、创建、激活 Python虚拟环境 2.虚拟机3.Docker Windows下使用Linux的三种方式: 1.WSL 是最简单的在 Windows 上运行 Linux 环境的方式,适用于日常开发和命…

搭建分布式HBase集群

title: 搭建分布式HBase集群 date: 2024-11-28 23:27:00 categories: - 服务器 tags: - HBase - 大数据搭建分布式HBase集群 本次实验环境:Centos 7-2009、Hadoop-3.1.4、JDK 8、Zookeeper-3.6.3、Hbase-2.4.11 功能规划 MasterSlave1Slave2主节点从节点从节点H…

金融分析-Transformer模型(基础理论)

Transformer模型 1.基本原理 transformer的core是注意力机制,其本质就是编码器-解码器。他可以通过多个编码器进行编码,再把编码完的结果输出给解码器进行解码,然后得到最终的output。 1.1编码器 数据在编码器中会经过一个self-attention的…

【一本通】两个数的最小公倍数

【一本通】两个数的最小公倍数 C语言代码C 代码Java代码Python代码 💐The Begin💐点点关注,收藏不迷路💐 输入两个正整数,编程计算两个数的最小公倍数。 输入 两个整数 输出 最小公倍数 样例输入 12 18样例输出 …