F5 iRule管理HTTP代理CONNECT请求

时间:2014-12-29 18:15:17

标签: ssl proxy f5 http-tunneling

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

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

也就是说,VS应解密所有TCP连接,但如果第一个TCP数据包以“CONNECT”开头,它应首先响应HTTP 200,然后等待下一个数据包(必须是“客户端问候”)并处理SSL握手。

对于某些iRule肯定是可能的,但我无法轻易获得解决方案,而且我无法在Internet上找到任何帮助,因为F5 doc没有打开。任何男孩都知道怎么做吗?

1 个答案:

答案 0 :(得分:1)

我终于找到了解决方案。

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

  • 禁用SSL解密,
  • 以HTTP 200回复​​,
  • 然后为“客户端问候”重新启用SSL解密,该解密应该在
  • 之后

它适用于两种情况:

  • 在TCP上下文中,在SSL解密之前,检测CONNECT请求
  • 并在HTTP上下文中,正确响应CONNECT请求

    when CLIENT_ACCEPTED {     # TCP CONTEXT
        TCP::collect 7         # look at the first 7 bytes of TCP stream
    }
    when CLIENT_DATA {
        if { [TCP::payload] starts_with "CONNECT" } {
            SSL::disable       # disable SSL decryption
        }
    }
    
    when HTTP_REQUEST {        # HTTP CONTEXT
        if { [HTTP::method] eq "CONNECT" } {
            HTTP::respond 200  # send HTTP 200
            SSL::enable        # re-enable SSL decryption for next "client hello"
        }
    }