跳转到内容

集成

此源服务器设计为在 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 负载均衡器:

设置
域名您的演示域名(例如 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-ProtoTLS 在 F5 XC 终止时为 https
X-Volterra-Bot-TypeBot 分类(启用 Bot Defense 时)
X-Request-IDF5 XC 请求追踪 ID

为 HTTP 负载均衡器附加 WAF 策略后,测试攻击载荷:

Terminal window
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 .

在 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 域名上使用路由规则:
# 配置 F5 XC 路由规则,匹配 Host 请求头或路径前缀,
# 将流量转发至 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 无需复制这些粘性会话——源虚拟机上的 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 负载均衡器以此源服务器作为其后端。这构建了一个真实的多层架构,可用于全面的测试场景。