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


1.背景

  F5負載均衡設備,很多場景下需要采用旁掛的方式部署。為了保證訪問到源站的數據流的request和response的TCP路徑一致,f5采用了snat機制。但是這樣導致源站上看到的來源IP都是snat地址,而看不到真實的訪問源地址。

2.http訪問

  對於HTTP應用可以直接在VS中開啟X-Forwarded規則

      

3.https訪問  

  由於HTTPS應用到達F5的數據都是密文,F5只能看到網絡層的地址,4—7層的內容無法看到,所以F5也無法像http應用一樣將客戶端地址插入到X_forward_for字段;

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

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

  2)F5將加密數據解密后通過X_forward_for功能插入用戶端源IP

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

  此過程在原有服務器上進行證書撤銷操作,會影響到應用中斷,建議重新搭建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是在傳輸層,業務服務器默認只讀網絡層


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM