f5源站獲取http/https訪問的真實源IP解決方案

1.背景後端

  F5負載均衡設備,不少場景下須要採用旁掛的方式部署。爲了保證訪問到源站的數據流的request和response的TCP路徑一致,f5採用了snat機制。可是這樣致使源站上看到的來源IP都是snat地址,而看不到真實的訪問源地址。服務器

2.http訪問網絡

  對於HTTP應用能夠直接在VS中開啓X-Forwarded規則負載均衡

      

3.https訪問  tcp

  因爲HTTPS應用到達F5的數據都是密文,F5只能看到網絡層的地址,4—7層的內容沒法看到,因此F5也沒法像http應用同樣將客戶端地址插入到X_forward_for字段;測試

  目前HTTPS應用的加解密工做都是由服務器自身完成的,爲了保證F5可以看到4—7層的數據,須要將加解密工做交給F5來作:加密

  1)根證書和KEY文件導入F5設備,F5代替服務器同用戶端創建SSL通道;spa

  2)F5將加密數據解密後經過X_forward_for功能插入用戶端源IP命令行

  3)業務部門將服務器上的443端口更改成80端口即取消證書加解密工做code

  此過程在原有服務器上進行證書撤銷操做,會影響到應用中斷,建議從新搭建2臺提供相同業務的80端口服務器;

  4)F5設備上配置一個測試VS關聯新搭建的80服務器及SSL策略,驗證F5是否能夠成功發佈HTTPS業務、HTTPS業務插入源地址等功能。即新建測試的vip,訪問端口爲443,關聯SSL加解密策略,後端關聯80的POOL。

   VS中

  

4.非http/https  

   對於TCP協議則須要經過TCP OPTION來實現客戶需求

  TCP  Options須要配合IRULSE+TCP Profile來實現。

  Irulse(當服務創建起鏈接時,轉換客戶端的ip地址並以點」.」劃分爲四個部分,在TCP報頭中插入kind爲29類型的字段。設置變量,輸出log信息。

  當服務創建起鏈接時,轉換客戶端的ip地址並以點」.」劃分爲四個部分,在TCP報頭中插入kind爲29類型的字段。設置變量,輸出log信息):

  1)irule  

when SERVER_CONNECTED {

scan [IP::client_addr] {%d.%d.%d.%d} a b c d

TCP::option set 29 [binary format cccc $a $b $c $d] all

set a [binary format cccc $a $b $c $d]

log "insert ip to tcp option $a"

}

  2)Tcp Profile案例(須要在tmsh下運行,其中tcplh3爲手動建立的tcp profile名稱):

  create ltm profile tcp tcplh3 tcp-options 「{8 first} {28 last}」

  步驟:

  1)模擬業務環境,在F5中創建Pool,創建VS,VS關聯特定的pool,關聯上述指定的iRule腳本和profile;

   

  3)用SshClient登陸F5的命令行,運行tcpdump抓取數據包,同時用客戶端屢次訪問VS地址。

  抓包命令:tcpdump -s0 -ni 0.0:nnnp host 10.160.100.49 and port 25 -w /var/tmp/test_0907.pcap

  即,須要抓10.160.100.49的25端口,保存目錄爲/var/tmp/,保存文件爲test.pcap。

  抓包結果以下:

   

  

  其中1d=29,表示tcp類型爲29;06表示字節數

  後邊的十六進制轉換爲十進制後即爲真實源地址

  此時即代表f5已經成功將真實源地址插入到option字段,具體如何讀取需服務器端配置。

   

  TCP三次握手

  注:option是在傳輸層,業務服務器默認只讀網絡層

相關文章
相關標籤/搜索