hgxfg9

人生若只如初见,何事秋风悲画扇。

0%

为F5的SNAT保留真实客户端IP地址

为F5的SNAT保留真实客户端IP地址

主题

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

描述

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

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

您可能需要 BIG-IP 系统将原始客户端 IP 地址插入 HTTP 标头,并将接收请求的 Web 服务器配置为记录客户端 IP 地址而不是 SNAT 地址。

它可以在以下场景中:

  1. 对于我们想知道导致帐户锁定的源主机的电子邮件用户地址。
  2. 安全团队希望收集具有真实IP的日志,以便将来对受感染的帐户进行任何调查。

在大多数情况下,Exchange 服务是通过Loadbalancer发布的,服务器位于Loadbalancer后面。当 Exchange 在第 7 层进行负载平衡时,它的IP地址将变得不透明。因此,实际的客户端源 IP 地址将替换为Loadbalancer自己的 IP 地址,因此只有此地址将记录在 IIS 日志中。因此,Microsoft IIS 客户端登录 Exchange 中的每个客户端连接都将记录分配的负载平衡 IP,而不是实际的源 IP。

例如,如果 Exchange 服务通过负载均衡器(如 KEMP、F5 等)通过 SNAT 发布,则 IIS 日志无法获取真正的源 IP。由于它位于 SNAT 中,因此将保留目标 IP 地址,但更改实际的源 IP 地址。

SNAT示例:

断续器

当数据包通过 NAT 设备时,源或目标 IP 地址都会根据其使用的 NAT 类型进行修改。但是,有关对数据包所做的这些更改的信息保留在 NAT 设备的连接表中。

在大多数Loadbalancer(如 KEMP,F5)中都有一个选项来创建 X-Forwarded-For 标头并启用它们。

完成后,启用时的 X-Forwarded-For 标头选项将捕获客户端的源地址并将其附加到标头中。

在此之后,我们需要在所有 Exchange 服务器上的高级日志记录模块中添加一个额外的值,以便在 IIS 日志上记录此真实 IP。

配置流程

F5:

若要将 BIG-IP 系统配置为在 X-Forwarded-For HTTP 标头中插入原始客户端 IP 地址,有两种方案:

  • 在 HTTP 配置文件中启用“ X-Forwarded-For”选项
  • 使用 iRule” X-Forwarded-For “在HTTP 标头中插入原始客户端 IP 地址

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

1、打开Local Traffic > Profiles

2、在 Services中, 选择 HTTP

3、选择Create

4、输入 HTTP 配置文件的名称

5、勾选Insert X-Forwarded-For,选择Enabled

image-20220818094605743

6、选择Finished

到virtual server中关联HTTP配置文件

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

1、打开Local Traffic > iRules

2、选择Create

3、输入 iRule 的名称

4、输入iRule内容:

1
2
3
when HTTP_REQUEST {
HTTP::header insert X-Forwarded-For [IP::remote_addr]
}

image-20220818094814462

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 应用程序防火墙中),则可能需要先删除自定义标头。

例如:

1
2
3
4
when HTTP_REQUEST {
HTTP::header remove X-Custom-XFF
HTTP::header insert X-Custom-XFF [IP::remote_addr]
}

5、选择Finished

到virtual server中关联iRule配置文件

配置 Web 服务器以从 HTTP 标头中提取 IP 地址

将 BIG-IP 系统配置为使用 X-Forwarded-For HTTP 标头将原始客户端 IP 地址插入 HTTP 标头后,还必须将 Web 服务器配置为从 HTTP 标头中提取 IP 地址,然后将 IP 地址记录到 Web 服务器日志文件中。

NGINX

您可以将NGINX Web服务器配置为从X-Forwarded-For HTTP标头中提取IP地址,并通过将适当的日志记录指令添加到主nginx.conf配置文件或相关的虚拟主机配置文件中,将该IP地址记录到Web服务器日志文件中。

修改 NGINX 配置文件,添加以下语法:

1
2
set_real_ip_from <big-ip floating snat ip address>;
real_ip_header X-Forwarded-For;

< big-ip floating snat ip address > 替换为活动BIG-IP在向NGINX Web服务器发送请求时使用的SNAT IP地址或浮动Self IP地址。对于 BIG-IP 不使用自 IP 浮动 IP 地址或使用 SNAT 池的配置,请为 SNAT 池的每个 SNAT IP 地址添加一行。

例如,对于 HA 部署,其中每个 BIG-IP 设备都使用 NGINX Web 服务器网络上的非浮动自 IP 地址。

1
2
3
set_real_ip_from <big-ip self ip address active device>;
set_real_ip_from <big-ip self ip address standby device>;
real_ip_header X-Forwarded-For;

注意: 在此示例*<big-ip self ip 地址活动设备>是活动 BIG-IP 设备的Self IP 地址,它使用 SNAT 将流量定向到 NGINX Web 服务器,<big-ip 自 IP 地址备用设备>*是备用 BIG-IP 设备的Self IP 地址,该设备使用 SNAT 将流量定向到 NGINX Web 服务器。

例如,BIG-IP系统使用SNAT池,其中包含将流量发送到NGINX Web服务器时使用的三个地址。

1
2
3
4
set_real_ip_from <snat pool ip address 1>;
set_real_ip_from <snat pool ip address 2>;
set_real_ip_from <snat pool ip address 3>;
real_ip_header X-Forwarded-For;

*: 将 **< snat pool ip address >*的每个实例替换为 SNAT 池配置中列出的每个 IP 地址。

Apache2

您可以将 Apache Web 服务器配置为从 X-Forwarded-For HTTP 标头中提取 IP 地址,并通过将相应的日志记录指令添加到主 Apache 配置文件(通常称为 httpd.conf)或相关的虚拟主机配置文件,将该 IP 地址记录到 Web 服务器日志文件中。

例如,将以下行添加到 Apache2 配置文件中:

1
2
3
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""  proxy
SetEnvIf X-Forwarded-For "^.*\..*\..*\..*" forwarded
CustomLog "/var/log/apache2/access_log" proxy

Apache

您可以将 Apache Web 服务器配置为从 X-Forwarded-For HTTP 标头中提取 IP 地址,并通过将相应的日志记录指令添加到主 Apache 配置文件(通常称为 httpd.conf)或相关的虚拟主机配置文件,将该 IP 地址记录到 Web 服务器日志文件中。

例如:

1
2
LogFormat "%v %{X-Forwarded-For}i %l %u %t \"%r\" %>s %b" X-Forwarded-For
CustomLog /var/log/apache/www.example.com-xforwarded.log X-Forwarded-For

Microsoft IIS Web Server(Exchange SMTP)

您可以将 Microsoft IIS Web 服务器配置为从 X-Forwarded-For HTTP 标头中提取 IP 地址,并将 IP 地址记录到 Web 服务器日志文件中。为此,必须从 DevCentral 上的 IIS X-Forwarded-For ISAPI 日志筛选器页下载并安装 IIS X-Forwarded-For ISAPI 日志筛选器的 32 位或 64 位发行版。若要安装筛选器,请使用 Microsoft IIS 管理器实用工具将其添加到 Microsoft IIS 网站。

IIS ISAPI 筛选器(可以安装在 IIS 7.x 或 IIS 6.x 下)在 HTTP 请求中查找 X-Forwarded-For HTTP 标头。如果 IIS ISAPI 筛选器在 HTTP 请求中找到 X-Forwarded-For HTTP 标头,它将 W3SVC 日志跟踪中的客户端 IP 地址替换为 X-Forwarded-For HTTP 标头的值。

从 IIS 7.0 开始,Microsoft 还为 IIS 提供了可选的高级日志记录功能,该功能允许您定义自定义日志定义,这些定义可以捕获其他信息,例如 X-Forwarded-For For 标头中包含的客户端 IP 地址,而无需安装 ISAPI 日志筛选器。若要将 IIS Web 服务器配置为记录 X-Forwarded-For For 标头,必须已安装 IIS 高级日志记录

若要在 Windows Server 2012 R2 & 2016 中启用自定义日志记录角色服务,请执行以下操作:

  1. 打开服务器管理器

  2. 单击添加角色和功能

  3. 在“添加角色和功能”向导中,导航到“Web 服务器> Web 服务器>运行状况和诊断”类别下的“自定义日志记录角色”

  4. 在“确认”页上,单击“安装”

现在打开 IIS 管理器>选择“日志记录”

image-20220817175830935

单击选择字段

image-20220817175908336

创建新的自定义字段:

字段名称 - 我们可以提供任何名称,以便它将作为新列反映在日志上

源类型 – 请求标头

源 – X-Forwarded-For

image-20220817180108607

在此之后执行 IIS 重置。之后我们在 IIS 日志中看到的IP地址就变为了客户端IP地址,而不是Loadbalancer的 IP。

-------- 本文结束 感谢阅读 --------
你的鼓励是我更新的动力!