跳到內容

整合

此來源伺服器設計為在 F5 分散式雲端 HTTP 負載平衡器後方作為來源池成員使用。F5 XC 平台在此來源前方提供 WAF、Bot Defense、API Security 及 Client-Side Defense 功能。

End User -> F5 XC HTTP LB (WAF/Bot/API/CSD) -> Origin Server VM (nginx -> Docker apps)

建立指向此 VM 公用 IP 的 F5 XC 來源池:

設定
來源伺服器類型來源伺服器的公用 IP
IP 位址<terraform output public_ip>
連接埠80
健康檢查HTTP,路徑 /health

使用來源池建立 HTTP 負載平衡器:

設定
網域您的示範網域(例如 demo.example.com
來源池上方建立的池
WAF附加您的 WAF 政策
Bot Defense視需要啟用
API Discovery為 VAmPI 端點啟用

每個應用程式均可透過負載平衡器的路徑前綴存取:

F5 XC LB URL來源路徑應用程式
https://demo.example.com/juice-shop//juice-shop/Juice Shop(4 個實例,Cookie 黏性)
https://demo.example.com/dvwa//dvwa/DVWA(4 個實例 + MariaDB,Cookie 黏性)
https://demo.example.com/vampi//vampi/VAmPI(4 個實例,ip_hash 黏性)
https://demo.example.com/httpbin//httpbin/httpbin(4 個實例,輪詢)
https://demo.example.com/whoami//whoami/請求診斷(4 個實例)
https://demo.example.com/csd-demo//csd-demo/CSD Demo(4 個實例,ip_hash 黏性)
https://demo.example.com/dvga//dvga/DVGA(4 個實例,ip_hash 黏性)
https://demo.example.com/restaurant//restaurant/RESTaurant(4 個實例,輪詢)
https://demo.example.com/health/health健康檢查(nginx 直接)

使用 whoami 端點驗證 F5 XC 向抵達來源的請求所注入的標頭:

Terminal window
LB_DOMAIN="demo.example.com"
curl -sk "https://${LB_DOMAIN}/whoami/"

在回應中尋找以下 F5 XC 注入標頭:

標頭含義
X-Forwarded-For通過 F5 XC 的用戶端 IP 鏈
True-Client-IP原始用戶端 IP
X-Forwarded-Proto若 TLS 於 F5 XC 終止則為 https
X-Volterra-Bot-TypeBot 分類(啟用 Bot Defense 時)
X-Request-IDF5 XC 請求追蹤 ID

將 WAF 政策附加至 HTTP 負載平衡器後,測試攻擊酬載:

Terminal window
LB_DOMAIN="demo.example.com"
# SQL Injection(應被 WAF 封鎖)
curl -sk "https://${LB_DOMAIN}/dvwa/vulnerabilities/sqli/?id=%27+OR+1%3D1--&Submit=Submit"
# XSS(應被 WAF 封鎖)
curl -sk "https://${LB_DOMAIN}/juice-shop/rest/products/search?q=<script>alert(1)</script>"
# Command Injection(應被 WAF 封鎖)
curl -sk "https://${LB_DOMAIN}/dvwa/vulnerabilities/exec/" \
-d "ip=127.0.0.1;cat+/etc/passwd&Submit=Submit"
# 正常請求(應通過)
curl -sk "https://${LB_DOMAIN}/httpbin/get" | jq .

在 HTTP 負載平衡器上啟用 API Discovery 以對應 VAmPI 的 API 端點:

Terminal window
# 這些請求會在 F5 XC 中建立 API 清單
curl -sk "https://${LB_DOMAIN}/vampi/users/v1"
curl -sk -X POST "https://${LB_DOMAIN}/vampi/users/v1/register" \
-H "Content-Type: application/json" \
-d '{"username":"apitest","password":"test123","email":"api@test.com"}'
curl -sk -X POST "https://${LB_DOMAIN}/vampi/users/v1/login" \
-H "Content-Type: application/json" \
-d '{"username":"apitest","password":"test123"}'

crAPI 執行於專用連接埠(8888),因為它是一個單頁應用程式,其 API 路徑為硬編碼,無法在路徑前綴後方提供服務。若要將 crAPI 與 F5 XC 整合:

設定
來源伺服器類型來源伺服器的公用 IP
IP 位址<terraform output public_ip>
連接埠8888
健康檢查HTTP,路徑 /

為 crAPI 在連接埠 8888 建立獨立的來源池,或在現有池中新增第二個連接埠 8888 的來源池成員,並使用路由規則引導流量:

Terminal window
# 透過 F5 XC 測試 crAPI(若已設定)
curl -sk "https://${LB_DOMAIN}:8888/"
# 或若在相同 LB 網域上使用路由規則:
# 設定符合 Host 標頭或路徑前綴的 F5 XC 路由規則
# 以將流量轉發至 crAPI 來源池(連接埠 8888)

來源伺服器在內部使用 nginx 黏性工作階段,將有狀態應用程式路由至一致的後端容器。設定 F5 XC HTTP 負載平衡器時,請注意以下事項:

應用程式黏性方法原因
Juice Shophash $cookie_tokenNode.js 工作階段狀態
DVWAhash $cookie_PHPSESSIDPHP 工作階段狀態
VAmPIip_hash每個實例各自的 SQLite 資料庫
CSD Demoip_hash每個實例各自的記憶體內滲漏日誌
DVGAip_hash每個實例各自的 SQLite 資料庫
RESTaurant輪詢共享 PostgreSQL 後端
crAPI—(單一連接埠 8888)7 個微服務,PostgreSQL + MongoDB
httpbin輪詢無狀態
whoami輪詢無狀態

F5 XC 無需複製這些黏性工作階段——來源 VM 上的 nginx 負責處理後端路由。F5 XC 應將來源視為單一端點(VM 的公用 IP,連接埠 80)。

與 CDN 模擬器結合時,完整的實驗室架構為:

End User -> CDN Simulator (nginx cache) -> F5 XC HTTP LB -> Origin Server (this component)

CDN 模擬器使用 F5 XC HTTP 負載平衡器 VIP 作為其來源,而 F5 XC 負載平衡器則使用此來源伺服器作為其後端。這構建了一個真實的多層架構,適用於全面性測試。