集成
F5 XC 源池集成
Section titled “F5 XC 源池集成”此源服务器设计为在 F5 Distributed Cloud 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)创建一个指向此虚拟机公网 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 端点启用 |
基于路径的路由
Section titled “基于路径的路由”每个应用程序均可通过负载均衡器的路径前缀访问:
| 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 测试”为 HTTP 负载均衡器附加 WAF 策略后,测试攻击载荷:
LB_DOMAIN="demo.example.com"
# SQL 注入(应被 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>"
# 命令注入(应被 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 域名上使用路由规则:# 配置 F5 XC 路由规则,匹配 Host 请求头或路径前缀,# 将流量转发至 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 无需复制这些粘性会话——源虚拟机上的 nginx 负责处理后端路由。F5 XC 应将源服务器视为单一端点(虚拟机公网 IP 的 80 端口)。
与 CDN 模拟器结合使用时,完整的实验室架构如下:
End User -> CDN Simulator (nginx cache) -> F5 XC HTTP LB -> Origin Server (this component)CDN 模拟器以 F5 XC HTTP 负载均衡器的虚拟 IP 作为其源,F5 XC 负载均衡器以此源服务器作为其后端。这构建了一个真实的多层架构,可用于全面的测试场景。