コンテンツにスキップ

オリジンサーバーとの統合

このページでは、2 つの統合段階について説明します:

  1. 直接統合 — CDN エッジがオリジンサーバーに直接転送します(ベースラインテスト)
  2. F5 XC 挿入 — CDN とオリジンの間に F5 XC HTTP ロードバランサーを挿入します(セキュリティデモ)

まず直接統合でベースラインを確立し、準備が整ったら F5 XC を挿入します。

オリジンサーバーリファレンス

Section titled “オリジンサーバーリファレンス”

origin-server ラボコンポーネントは、セキュリティテスト用の脆弱な Web アプリケーションを提供します。

プロパティ
ドキュメントf5-sales-demo.github.io/origin-server
リポジトリgithub.com/f5-sales-demo/origin-server
デフォルトポート80
ヘルスチェックGET /health

オリジンサーバーの公開マニフェストから現在のアプリケーションカタログを取得します:

Terminal window
MANIFEST_URL=$(curl -sf https://api.github.com/repos/f5-sales-demo/origin-server/releases/latest \
| python3 -c "import sys,json; assets=json.load(sys.stdin).get('assets',[]); print(next((a['browser_download_url'] for a in assets if a['name']=='manifest.json'),''))")
curl -sf "$MANIFEST_URL" | python3 -m json.tool

リリースがまだ存在しない場合は、リポジトリのソースを直接使用します:

Terminal window
curl -sf https://raw.githubusercontent.com/f5-sales-demo/origin-server/main/manifest.json | python3 -m json.tool

マニフェストには、すべてのアプリケーションパス、ヘルスチェック、コンテナイメージ、およびデモ機能のマッピングが記載されています。

パスアプリケーションデモ機能
/ランディングページ
/healthヘルスチェック
/juice-shop/OWASP Juice ShopWeb アプリファイアウォール (WAF)、Bot 標準防御、API セキュリティ
/dvwa/DVWAWeb アプリファイアウォール (WAF)、Bot 標準防御
/vampi/VAmPIAPI セキュリティ
/httpbin/httpbin診断
/whoami/whoamiヘッダー検証
/csd-demo/CSD Demoクライアントサイド防御

ステージ 1:直接統合(ベースライン)

Section titled “ステージ 1:直接統合(ベースライン)”
┌──────────┐ ┌──────────────────────┐ ┌─────────────────────┐
│ Client │────▶│ CDN Edge (NGINX) │────▶│ Origin Server │
│ │ │ 20.65.90.112 │ │ 20.12.78.159 │
└──────────┘ │ 67+ CDN headers │ │ Juice Shop, DVWA, │
│ Disk cache │ │ VAmPI, httpbin, │
└──────────────────────┘ │ whoami, CSD Demo │
└─────────────────────┘

CDN エッジの NGINX 設定にオリジンサーバーの IP を設定します:

Terminal window
ssh azureuser@<CDN_EDGE_IP>
sudo sed -i 's|proxy_pass .*;|proxy_pass http://<ORIGIN_IP>;|' /etc/nginx/conf.d/cdn-edge.conf
sudo rm -rf /var/cache/nginx/cdn/*
sudo nginx -t && sudo systemctl reload nginx

または、terraform.tfvars を使用して Terraform デプロイ時に設定します:

origin_server = "http://<ORIGIN_IP>"

すべてのアプリケーションの検証

Section titled “すべてのアプリケーションの検証”

CDN を通じて各オリジンアプリケーションをテストします:

Terminal window
CDN=<CDN_EDGE_IP>
# ヘルスチェック(CDN ローカル)
curl -sf "http://$CDN/health" | python3 -m json.tool
# ランディングページ
curl -sf -o /dev/null -w "/ : HTTP %{http_code}\n" "http://$CDN/"
# Juice Shop
curl -sf -o /dev/null -w "/juice-shop/ : HTTP %{http_code}\n" "http://$CDN/juice-shop/"
# DVWA(ログインへのリダイレクトに従う)
curl -sf -o /dev/null -w "/dvwa/ : HTTP %{http_code}\n" -L "http://$CDN/dvwa/"
# VAmPI API
curl -sf "http://$CDN/vampi/users/v1" | python3 -m json.tool | head -5
# httpbin ヘッダー(JSON で CDN ヘッダーを表示)
curl -sf "http://$CDN/httpbin/headers" | python3 -m json.tool | head -10
# whoami(オリジンが受信するすべてのヘッダーを表示)
curl -sf "http://$CDN/whoami/"
# CSD Demo
curl -sf -o /dev/null -w "/csd-demo/ : HTTP %{http_code}\n" "http://$CDN/csd-demo/"

すべてのパスは HTTP 200 を返す必要があります(DVWA はリダイレクト時に 302 を返し、その後 200 を返します)。

オリジンでの CDN ヘッダーの検証

Section titled “オリジンでの CDN ヘッダーの検証”

/whoami/ エンドポイントは、オリジンが受信するすべてのヘッダーを表示します。CDN を通じてアクセスすると、67 以上のベンダーヘッダーがすべて表示されます:

Terminal window
curl -sf "http://$CDN/whoami/"

以下の主要なヘッダーが存在することを確認します:

ベンダーヘッダー期待値
標準X-Forwarded-For<your_ip>, <cdn_edge_ip>
AkamaiTrue-Client-Ip<your_ip>
CloudflareCf-Connecting-Ip<your_ip>
CloudFrontCloudfront-Viewer-CountryUS
FastlyFastly-Client-Ip<your_ip>
Azure FDX-Azure-Clientip<your_ip>

両サーバーのアクセスログを比較して、トラフィックフローを確認します:

Terminal window
# CDN エッジログ — クライアント IP がソースとして表示される
ssh azureuser@<CDN_EDGE_IP> "sudo tail -5 /var/log/nginx/access.log"
# オリジンログ — CDN エッジ IP がソースとして表示される
ssh azureuser@<ORIGIN_IP> "sudo tail -5 /var/log/nginx/access.log"

オリジンログには CDN エッジ IP が接続クライアントとして表示され、実際のクライアント IP は X-Forwarded-For およびベンダー固有のヘッダーに含まれます。

Terminal window
# 最初のリクエスト — MISS(オリジンから取得)
curl -s -I "http://$CDN/whoami/" | grep X-Cache-Status
# 2 回目のリクエスト — HIT(CDN キャッシュから提供)
curl -s -I "http://$CDN/whoami/" | grep X-Cache-Status

ステージ 2:F5 XC 挿入(セキュリティデモ)

Section titled “ステージ 2:F5 XC 挿入(セキュリティデモ)”

ベースラインテストの後、CDN とオリジンの間に F5 XC HTTP ロードバランサーを挿入します:

┌──────────┐ ┌────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ Client │────▶│ CDN Edge │────▶│ F5 XC HTTP LB │────▶│ Origin Server │
│ │ │ (NGINX) │ │ WAF + Bot + API │ │ │
└──────────┘ └────────────────┘ └──────────────────┘ └─────────────────┘
  1. F5 XC HTTP ロードバランサーを作成し、オリジンプールにオリジンサーバーを追加します
  2. CDN エッジを更新して、オリジンに直接ではなく F5 XC VIP を指すようにします:
Terminal window
ssh azureuser@<CDN_EDGE_IP>
sudo sed -i 's|proxy_pass .*;|proxy_pass https://<F5XC_LB_VIP>;|' /etc/nginx/conf.d/cdn-edge.conf
sudo rm -rf /var/cache/nginx/cdn/*
sudo nginx -t && sudo systemctl reload nginx
  1. フルチェーンを通じた WAF 適用の検証
Terminal window
# CDN → F5 XC WAF を通じた SQL インジェクション(ブロックされるはず)
curl -I "http://$CDN/dvwa/vulnerabilities/sqli/?id=%27+OR+1%3D1--"
# 通常のリクエストはパスするはず
curl -sf -o /dev/null -w "%{http_code}" "http://$CDN/juice-shop/"
  1. F5 XC で信頼済みクライアント IP ヘッダーを設定し、CDN ヘッダーから実際のクライアント IP を読み取ります(例:Akamai シミュレーション用の True-Client-IP、Cloudflare シミュレーション用の CF-Connecting-IP

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

Section titled “マルチコンポーネントアーキテクチャ”
コンポーネントリポジトリ目的
CDN エッジ(本リポジトリ)cdn-simulatorキャッシュ、ベンダーヘッダー
オリジンサーバーorigin-server脆弱な Web アプリ
F5 XC 設定各種(waf、api-protection、bot-* など)セキュリティポリシー

各コンポーネントは、AI アシスタントがインフラをデプロイするために読み取るドキュメントを公開しています。オリジンサーバーは、すべてのアプリケーションパスとヘルスチェックを一覧表示するエンドポイントマニフェストを GitHub リリースアーティファクトとして公開しています。