コンテンツにスキップ

統合

このオリジンサーバーは、F5 Distributed Cloud HTTPロードバランサーの背後にあるオリジンプールメンバーとして使用するよう設計されています。F5 XC プラットフォームは、このオリジンの前段でWeb アプリファイアウォール (WAF)、Bot Defense、API セキュリティ、およびクライアントサイド防御を提供します。

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
オリジンプール上記で作成したプール
WAFWAFポリシーを適用
Bot Defense必要に応じて有効化
API DiscoveryVAmPIエンドポイント向けに有効化

各アプリケーションは、ロードバランサーを通じてそれぞれのパスプレフィックスでアクセスできます:

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がオリジンに到達するリクエストにインジェクトするヘッダーを確認します:

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

レスポンスにおいて、以下のF5 XCによってインジェクトされたヘッダーを確認してください:

ヘッダー意味
X-Forwarded-ForF5 XCを通じたクライアントIPチェーン
True-Client-IPオリジナルのクライアントIP
X-Forwarded-ProtoF5 XCでTLSが終端される場合は 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)で動作します。これはcrAPIがシングルページアプリケーションであり、APIパスをハードコードしているため、パスプレフィックスの背後では提供できないためです。crAPIをF5 XCに統合するには:

設定
オリジンサーバータイプオリジンサーバーのパブリックIP
IPアドレス<terraform output public_ip>
ポート8888
ヘルスチェックHTTP、パス /

ポート8888のcrAPI向けに別のオリジンプールを作成するか、既存のプールにポート8888の2番目のオリジンプールメンバーを追加し、ルートルールを使用してトラフィックを誘導します:

Terminal window
# F5 XCを通じたcrAPIのテスト(設定済みの場合)
curl -sk "https://${LB_DOMAIN}:8888/"
# または同じLBドメインでルートルールを使用する場合:
# HostヘッダーまたはパスプレフィックスにマッチするF5 XCルートルールを設定し
# crAPIオリジンプール(ポート8888)にフォワードする

スティッキーセッションの考慮事項

Section titled “スティッキーセッションの考慮事項”

オリジンサーバーは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)として扱う必要があります。

マルチコンポーネントアーキテクチャ

Section titled “マルチコンポーネントアーキテクチャ”

CDN シミュレーターと組み合わせると、完全なラボアーキテクチャは以下のようになります:

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

CDN シミュレーターはF5 XC HTTPロードバランサーのVIPをオリジンとして使用し、F5 XCロードバランサーはこのオリジンサーバーをバックエンドとして使用します。これにより、包括的なテストのための現実的なマルチレイヤーアーキテクチャが構築されます。