为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 地址。
它可以在以下场景中:
- 对于我们想知道导致帐户锁定的源主机的电子邮件用户地址。
- 安全团队希望收集具有真实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
6、选择Finished
到virtual server中关联HTTP配置文件
使用 iRule” X-Forwarded-For “在HTTP 标头中插入原始客户端 IP 地址
1、打开Local Traffic > iRules
2、选择Create
3、输入 iRule 的名称
4、输入iRule内容:
1 | when HTTP_REQUEST { |
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 | when HTTP_REQUEST { |
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 | set_real_ip_from <big-ip floating snat ip address>; |
将 < 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 | set_real_ip_from <big-ip self ip address active device>; |
注意: 在此示例*<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 | set_real_ip_from <snat pool ip address 1>; |
*注: 将 **< snat pool ip address >*的每个实例替换为 SNAT 池配置中列出的每个 IP 地址。
Apache2
您可以将 Apache Web 服务器配置为从 X-Forwarded-For HTTP 标头中提取 IP 地址,并通过将相应的日志记录指令添加到主 Apache 配置文件(通常称为 httpd.conf)或相关的虚拟主机配置文件,将该 IP 地址记录到 Web 服务器日志文件中。
例如,将以下行添加到 Apache2 配置文件中:
1 | LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" proxy |
Apache
您可以将 Apache Web 服务器配置为从 X-Forwarded-For HTTP 标头中提取 IP 地址,并通过将相应的日志记录指令添加到主 Apache 配置文件(通常称为 httpd.conf)或相关的虚拟主机配置文件,将该 IP 地址记录到 Web 服务器日志文件中。
例如:
1 | LogFormat "%v %{X-Forwarded-For}i %l %u %t \"%r\" %>s %b" 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 中启用自定义日志记录角色服务,请执行以下操作:
打开服务器管理器
单击添加角色和功能
在“添加角色和功能”向导中,导航到“Web 服务器> Web 服务器>运行状况和诊断”类别下的“自定义日志记录角色”
在“确认”页上,单击“安装”
现在打开 IIS 管理器>选择“日志记录”
单击选择字段
创建新的自定义字段:
字段名称 - 我们可以提供任何名称,以便它将作为新列反映在日志上
源类型 – 请求标头
源 – X-Forwarded-For
在此之后执行 IIS 重置。之后我们在 IIS 日志中看到的IP地址就变为了客户端IP地址,而不是Loadbalancer的 IP。