整合
F5 XC 來源池整合
Section titled “F5 XC 來源池整合”此來源伺服器設計為在 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 負載平衡器設定
Section titled “HTTP 負載平衡器設定”使用來源池建立 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 直接) |
驗證 F5 XC 標頭注入
Section titled “驗證 F5 XC 標頭注入”使用 whoami 端點驗證 F5 XC 向抵達來源的請求所注入的標頭:
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-Type | Bot 分類(啟用 Bot Defense 時) |
X-Request-ID | F5 XC 請求追蹤 ID |
透過 F5 XC 進行 WAF 測試
Section titled “透過 F5 XC 進行 WAF 測試”將 WAF 政策附加至 HTTP 負載平衡器後,測試攻擊酬載:
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 .API 安全測試
Section titled “API 安全測試”在 HTTP 負載平衡器上啟用 API Discovery 以對應 VAmPI 的 API 端點:
# 這些請求會在 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)
Section titled “crAPI 整合(連接埠 8888)”crAPI 執行於專用連接埠(8888),因為它是一個單頁應用程式,其 API 路徑為硬編碼,無法在路徑前綴後方提供服務。若要將 crAPI 與 F5 XC 整合:
| 設定 | 值 |
|---|---|
| 來源伺服器類型 | 來源伺服器的公用 IP |
| IP 位址 | <terraform output public_ip> |
| 連接埠 | 8888 |
| 健康檢查 | HTTP,路徑 / |
為 crAPI 在連接埠 8888 建立獨立的來源池,或在現有池中新增第二個連接埠 8888 的來源池成員,並使用路由規則引導流量:
# 透過 F5 XC 測試 crAPI(若已設定)curl -sk "https://${LB_DOMAIN}:8888/"
# 或若在相同 LB 網域上使用路由規則:# 設定符合 Host 標頭或路徑前綴的 F5 XC 路由規則# 以將流量轉發至 crAPI 來源池(連接埠 8888)黏性工作階段注意事項
Section titled “黏性工作階段注意事項”來源伺服器在內部使用 nginx 黏性工作階段,將有狀態應用程式路由至一致的後端容器。設定 F5 XC HTTP 負載平衡器時,請注意以下事項:
| 應用程式 | 黏性方法 | 原因 |
|---|---|---|
| Juice Shop | hash $cookie_token | Node.js 工作階段狀態 |
| DVWA | hash $cookie_PHPSESSID | PHP 工作階段狀態 |
| VAmPI | ip_hash | 每個實例各自的 SQLite 資料庫 |
| CSD Demo | ip_hash | 每個實例各自的記憶體內滲漏日誌 |
| DVGA | ip_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 負載平衡器則使用此來源伺服器作為其後端。這構建了一個真實的多層架構,適用於全面性測試。