F5 iRule 用于管理 HTTP 代理 CONNECT 请求

Posted

技术标签:

【中文标题】F5 iRule 用于管理 HTTP 代理 CONNECT 请求【英文标题】:F5 iRule to manage HTTP proxy CONNECT requests 【发布时间】:2015-02-25 22:29:55 【问题描述】:

我在 Web 服务器前面有一个配置了客户端 https 加密的 F5 虚拟服务器。

我希望这个 VS 也可以管理 HTTP CONNECT 请求,以便客户端可以将其作为 Web 服务器或代理来请求。

也就是说VS应该解密所有TCP连接,但是如果第一个TCP包以“CONNECT”开头,它应该先响应HTTP 200,然后等待下一个包(那一定是“client hello”)并处理 SSL 握手。

使用一些iRule当然可以,但是我不能轻易得到解决方案,而且我在互联网上找不到任何帮助,因为F5 doc没有打开。有小伙伴知道怎么做吗?

【问题讨论】:

【参考方案1】:

我终于找到了解决办法。

VS 默认行为是从第一个 TCP 数据包开始处理 SSL 解密: 所以必须查看第一个 TCP 数据包,如果它以 CONNECT 开头,

禁用 SSL 解密, 响应 HTTP 200, 然后为应该紧随其后的“client hello”重新启用 SSL 解密

它适用于两种情况:

在 TCP 上下文中,在 SSL 解密之前,检测 CONNECT 请求

在 HTTP 上下文中,正确响应 CONNECT 请求

当 CLIENT_ACCEPTED # TCP CONTEXT TCP::collect 7 # 查看 TCP 流的前 7 个字节 当 CLIENT_DATA if [TCP::payload] starts_with "CONNECT" SSL::disable # 禁用 SSL 解密 当 HTTP_REQUEST # HTTP CONTEXT if [HTTP::method] eq "CONNECT" HTTP::respond 200 # 发送 HTTP 200 SSL::enable # 为下一个“client hello”重新启用 SSL 解密

【讨论】:

以上是关于F5 iRule 用于管理 HTTP 代理 CONNECT 请求的主要内容,如果未能解决你的问题,请参考以下文章

F5 iRules设置访客白名单

f5 irules 是啥语言

F5负载均衡上使用iRule 来选择SNAT pool

通过F5提取客户端的mac address,插入到http header内

CVE-2016-3081(Struts2)漏洞分析以及F5应对方法

F5 采用TCP::OPTION 方式做源地址插入