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.rhkb.cn/news/491872.html

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

相关文章

升级thinkphp8最新版本,升级后发现版本不变

升级thinkphp8.0.3最新版本8.1.1,升级后发现版本不变, 更新TP有两个方法 1 全部更新(所有插件都一起更新) composer update 2 只更新TP框架核心 composer update topthink/framework 造成可能有两个原因,一是缓存问题,二是更新…

STM32F030在MDK环境下如何查当前程序中外设优先级别

最在在写程序时,发现有几个中断可能在打架,原来没有认真查过在MDK下如何查看当前外设的中断优先级别,摸索了一会儿,方法如下: 菜单栏,选中 ”nvic“ 优先级别在这里了 不过,要说明的一点的是&…

Oracle 适配 OpenGauss 数据库差异SQL汇总

背景 国产化进程中,需要将某项目的数据库从 Oracle 转为 OpenGauss ,项目初期也是规划了适配不同数据库的,MyBatis 配置加载路径设计的是根据数据库类型加载指定文件夹的 xml 文件。 后面由于固定了数据库类型为 Oracle 后,只写…

从开始实现扩散概率模型 PyTorch 实现

目录 一、说明 二、从头开始实施 三、线性噪声调度器 四、时间嵌入 五、下层DownBlock类块 六、中间midBlock类块 七、UpBlock上层类块 八、UNet 架构 九、训练 十、采样 十一、配置(Default.yaml) 十二、数据集 (MNIST) keyword: Diffusion…

CCF-GESP 等级考试 2024年12月认证C++七级真题解析

2024年12月真题 一、单选题(每题2分,共30分) 正确答案:D 解析:考察字符类型和ASCII码值。 字符类型参与运算,是它所对应的ASCII码值在参与运算,运算结果为整数值。小写字母 b 的ASCII码为98&am…

递归实现指数型枚举(递归)

92. 递归实现指数型枚举 - AcWing题库 每个数有选和不选两种情况 我们把每个数看成每层,可以画出一个递归搜索树 叶子节点就是我们的答案 很容易写出每dfs函数 dfs传入一个u表示层数 当层数大于我们n时,去判断每个数字的选择情况,输出被选…

事务-介绍与操作四大特性

一.数据准备: 1.员工表: -- 员工管理 create table tb_emp (id int unsigned primary key auto_increment comment ID,username varchar(20) not null unique comment 用户名,password varchar(32) default 123456 comment 密码,n…

[白月黑羽]关于风机协议工具的解答

架构 python3.8pyqt5 先来看下原题: 视频中软件的效果 先来看下程序的效果如何,看上去大概相似 对应代码已经上传到了gitcode https://gitcode.com/m0_37662818/fan_protocol_tool/overview 实现中的难点是双悬浮可视化,同时要高亮悬浮对…

HCIA-Access V2.5_4_1_1路由协议基础_IP路由表

大型网络的拓扑结构一般会比较复杂,不同的部门,或者总部和分支可能处在不同的网络中,此时就需要使用路由器来连接不同的网络,实现网络之间的数据转发。 本章将介绍路由协议的基础知识、路由表的分类、静态路由基础与配置、VLAN间…

ISCTF复现-misc

File_Format 下载附件后用010打开查看文件头会发现是个exe文件 格式:文件描述(后缀名),文件头(hex):文件头标识(十六进制)PNG (png),文件头(hex):89504E47 PNGImageFile…

Windows设置所有软件默认以管理员身份运行

方法一、修改注册表 winr打开运行,输入“regedit”打开注册表; 打开此路径“计算机HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionPoliciesSystem”; 在右侧找到“EnableLUA”,将其值改为0,重启电脑。 …

【题解】—— LeetCode一周小结50

🌟欢迎来到 我的博客 —— 探索技术的无限可能! 🌟博客的简介(文章目录) 【题解】—— 每日一道题目栏 上接:【题解】—— LeetCode一周小结49 9.判断国际象棋棋盘中一个格子的颜色 题目链接:…

Docker安全性与最佳实践

一、引言:Docker安全性的重要性 Docker作为一种容器化技术,已成为现代应用程序部署和开发的核心工具。然而,随着容器化应用的普及,Docker的安全性问题也日益突出。容器本身的隔离性、网络配置、权限管理等方面的安全隐患&#xf…

利用notepad++删除特定关键字所在的行

1、按组合键Ctrl H,查找模式选择 ‘正则表达式’,不选 ‘.匹配新行’ 2、查找目标输入 : ^.*关键字.*\r\n (不保留空行) ^.*关键字.*$ (保留空行)3、替换为:(空) 配置界面参考下图: ​​…

上传图片的预览

解决:在上传图片时,1显示已有的图片 2显示准备替换的图片 前 后 在这个案例中可以预览到 【已有与准备替换】 2张图片 具体流程 1创建一个共享组件 与manage.py同级别路径的文件 manage.py custom_widgets.py# custom_widgets.py from django import forms from dja…

MySQL学习之DDL操作

目录 数据库的操作 创建 查看 选择 删除 修改 数据类型 表的创建 表的修改 表的约束 主键 PRIMARY KEY 唯一性约束 UNIQUE 非空约束 NOT NULL 外键约束 约束小结 索引 索引分类 常规索引 主键索引 唯一索引 外键索引 优点 缺点 视图 创建 删除 修改…

国际网络专线是什么?有什么优势?

国际网络专线作为一种独立的网络连接方式,通过卫星或海底光缆等物理链路,将全球不同国家和地区的网络直接互联,为企业提供了可靠的通信渠道。本文将详细探讨国际网络专线的优势以及其广泛的应用场景。 国际网络专线的优势解析 1. 专属连接&am…

密码编码学与网络安全(第五版)答案

通过如下代码分别统计一个字符的频率和三个字符的频率,"8"——"e",“;48”——“the”,英文字母的相对使用频率,猜测频率比较高的依此为),t,*,5,分别对应s,o,n,…

【功能安全】随机硬件失效导致违背安全目标的评估(FMEDA)

目录 01 随机硬件失效介绍 02 FMEDA介绍 03 FMEDA模板 01 随机硬件失效介绍 GBT 34590 part5

mybatis 的动态sql 和缓存

动态SQL 可以根据具体的参数条件,来对SQL语句进行动态拼接。 比如在以前的开发中,由于不确定查询参数是否存在,许多人会使用类似于where 1 1 来作为前缀,然后后面用AND 拼接要查询的参数,这样,就算要查询…