統合
F5 XC オリジンプール統合
Section titled “F5 XC オリジンプール統合”このオリジンサーバーは、F5 Distributed Cloud HTTPロードバランサーの背後にあるオリジンプールメンバーとして使用するよう設計されています。F5 XC プラットフォームは、このオリジンの前段でWeb アプリファイアウォール (WAF)、Bot Defense、API セキュリティ、およびクライアントサイド防御を提供します。
アーキテクチャ
Section titled “アーキテクチャ”End User -> F5 XC HTTP LB (WAF/Bot/API/CSD) -> Origin Server VM (nginx -> Docker apps)オリジンプールの設定
Section titled “オリジンプールの設定”この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エンドポイント向けに有効化 |
パスベースのルーティング
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 | F5 XCでTLSが終端される場合は 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)で動作します。これはcrAPIがシングルページアプリケーションであり、APIパスをハードコードしているため、パスプレフィックスの背後では提供できないためです。crAPIをF5 XCに統合するには:
| 設定 | 値 |
|---|---|
| オリジンサーバータイプ | オリジンサーバーのパブリックIP |
| IPアドレス | <terraform output public_ip> |
| ポート | 8888 |
| ヘルスチェック | HTTP、パス / |
ポート8888のcrAPI向けに別のオリジンプールを作成するか、既存のプールにポート8888の2番目のオリジンプールメンバーを追加し、ルートルールを使用してトラフィックを誘導します:
# 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)として扱う必要があります。
マルチコンポーネントアーキテクチャ
Section titled “マルチコンポーネントアーキテクチャ”CDN シミュレーターと組み合わせると、完全なラボアーキテクチャは以下のようになります:
End User -> CDN Simulator (nginx cache) -> F5 XC HTTP LB -> Origin Server (this component)CDN シミュレーターはF5 XC HTTPロードバランサーのVIPをオリジンとして使用し、F5 XCロードバランサーはこのオリジンサーバーをバックエンドとして使用します。これにより、包括的なテストのための現実的なマルチレイヤーアーキテクチャが構築されます。