ドメインが CDN に接続されてコンテンツアクセラレーションを行う場合、オリジンサーバーは SQL インジェクションや XSS などの Web 攻撃にさらされます。本ベストプラクティスでは、CDN のオリジンアクセスパスに WAF を配置し、CDN アクセラレーションを維持しながら悪意のあるトラフィックをフィルタリングする方法について説明します。
適用範囲
適用アーキテクチャ:本ドキュメントは、CDN と Elastic Compute Service (ECS) を使用した動的・静的混在アーキテクチャに適用され、静的コンテンツは引き続き CDN によって高速化され、WAF は動的リソースの保護に重点を置きます。CDN+Object Storage Service (OSS) の純粋な静的ホスティングアーキテクチャの場合、OSS は静的ファイルのみを保存し、アプリケーション層の攻撃リスクがないため、WAF 保護は限定的です。この場合、WAF を追加するとオリジンリクエストチェーンが増加し、アクセス遅延が発生するため、推奨されません。
前提条件:対象ドメインが Alibaba Cloud CDN、DCDN、または他の CDN プロバイダーに接続されている必要があります。
注意事項:本ドキュメントでは Alibaba Cloud CDN を例として使用します。DCDN または他のプロバイダーの CDN サービスにも同じロジックが適用されます。
ビジネスへの影響:サービスへの影響を最小限に抑えるため、これらの操作はオフピーク時に実行してください。
接続方式の選択
WAF は、他のクラウド製品との協調デプロイをサポートし、多層防御アーキテクチャを構築します。WAF がないアーキテクチャでは、ユーザーリクエストは DNS を介して CDN ノードに解決され、その後オリジンサーバーに直接ルーティングされます。つまり、攻撃トラフィックと正常なトラフィックの両方がフィルタリングされずにオリジンサーバーに到達します。
WAF には、CNAME アクセスとクラウドネイティブアクセスという 2 つの接続方式があります。以下のオプションを比較して、アーキテクチャに最適な方式を選択してください。
機能 | クラウドネイティブアクセス | CNAME アクセス |
メリット | CDN オリジン設定を変更する必要がありません。サービスへの影響が最小限です。迅速な接続シナリオに適しています。 | 幅広い適用性があります。機能制限が少ないです。クロスアカウントおよびクロスクラウドデプロイをサポートします。 |
接続対象 | Alibaba Cloud 製品インスタンス。 | ドメイン名。 |
制限事項 |
| 設定がやや複雑です。CDN オリジン設定の構成とクライアントのリアル IP の取得が必要です。 |
接続方式の比較と原理の詳細については、「概要」をご参照ください。
手順
WAF の有効化 (WAF が有効化されていない場合にのみ必要):WAF が有効化されていない場合は、Web Application Firewall 3.0 (従量課金) 購入ページにアクセスします。 初回利用時は、[支払方法] を 従量課金 にすることを推奨します。 購入手順については、「従量課金制の WAF 3.0 インスタンスを有効化する」をご参照ください。
WAF コンソールへの移動: Web アプリケーションファイアウォールコンソールにログオンします。上部のナビゲーションバーで、WAF インスタンスのリソースグループとリージョン(中国本土、中国本土以外)を選択します。左側のナビゲーションペインで、アクセス管理をクリックします。
アセットの接続:以下のいずれかの方式を選択して、保護するアセットを接続します:CNAME アクセスまたはクラウドネイティブアクセス。
説明以下の操作では、既存の CDN 設定を参照する必要があります。正確性を確保するため、操作を進める前に CDN コンソールに移動して、ドメイン名、オリジン、および関連設定を確認してください。
CNAME アクセス
CNAME アクセス タブで、追加 をクリックします。Listener 設定 ページで、次のパラメーターを設定します。
パラメーター
説明
[ドメイン名]
すでに CDN に接続されているドメイン名を入力します。保護するドメイン名は 1 つだけ入力できます。完全一致ドメイン名 (例:
www.aliyundoc.com) とワイルドカードドメイン名 (例:*.aliyundoc.com) の両方がサポートされています。[プロトコルタイプ]とポート
CDN ですでに設定されているオリジンプロトコルとポートに基づいて選択します:
プロトコル:CDN オリジンプロトコルと一致している必要があります。
ポート:CDN オリジンポートと一致している必要があります。
デフォルトでは、CDN オリジンポートが 443 に設定されている場合、オリジンリクエストには HTTPS が使用されます。その他のすべてのポートでは、HTTP が使用されます。
HTTPS を使用する場合、ドメイン名と一致する証明書ファイルをアップロードします。 証明書がアカウントの証明書管理サービスにアップロードされている場合、既存の証明書を直接選択できます。
[WAF の前にレイヤー 7 プロキシがあるかどうか (Anti-DDoS Proxy や CDN など)]
トラフィックは CDN を経由するため、ここでは [はい] を選択します。誤って設定すると、WAF はクライアントのリアル IP を取得できず、レポートではすべてのリクエストが CDN ノードからのものとして表示されます。
クライアント IP の取得方法 を 【推奨】偽装 XFF を回避するために、指定したヘッダの最初の IP アドレスをクライアント送信元 IP アドレスとするに設定します。
ヘッダフィールド を
ali-cdn-real-ipに設定します。これは、Alibaba Cloud CDN がオリジンリクエストで実際のクライアント IP を格納するためにデフォルトで付与する HTTP リクエストヘッダーです。
説明Alibaba Cloud CDN のオリジンリクエストでクライアントのリアル IP を保存するために使用されるフィールドは
ali-cdn-real-ipです。他のプロバイダーの CDN 製品を使用する場合は、その公式ドキュメントを参照して、対応するフィールド名を確認してください。または、CDN でカスタムアウトバウンドリクエストヘッダーを追加し、カスタムオリジンリクエストフィールドを使用するように設定することもできます。
次へ をクリックして、転送ルールの設定 ページに移動します。オリジンアドレス を入力し、サブミット をクリックします。
オリジンアドレスは、CDN コンソールで設定されているものと同じである必要があります。
追加完了 ページで、Copy CNAME をクリックします。
CDN コンソールに移動します。ドメイン名 をクリックし、WAF に接続されているドメイン名を見つけ、管理 列の 操作 をクリックします。オリジンサイト情報 セクションで、変更 列の 操作 をクリックします。オリジンサイト情報 を、前の手順でコピーした CNAME アドレスに変更します。この操作により、CDN のオリジンパスが WAF を指すようになります。
重要以下のシナリオでは、追加の設定が必要です:
CDN オリジン HOST 設定:デフォルトのオリジン HOST が設定されている場合は、CDN オリジンパスが WAF を指すように更新します。
静的ファイルの WAF バイパス:WAF をバイパスする静的ファイルリクエストのパフォーマンスオーバーヘッドを削減するには、CDN の条件付きオリジンを設定するか、関連リソースをWAF ホワイトリストに追加します。
オリジンサーバーでのクライアントのリアル IP の記録:オリジンサーバー (例:NGINX の access.log) でクライアントのリアル IP を記録するには、リアル IP フィールドを抽出するようにオリジンサーバーを設定します。詳細については、「クライアントのリアル IP アドレスの取得」をご参照ください。
CNAME アクセスの高度な機能:WAF の CNAME アクセス方式は、HTTPS、IPv6、オリジンロードバランシング、高可用性などの高度な機能をサポートしています。これらの設定をカスタマイズするには、「CNAME 経由での WAF へのドメインの追加」をご参照ください。
クラウドネイティブアクセス
クラウドプロダクトアクセス タブで、接続するクラウド製品のタイプを選択します。 ECS インスタンスを例に、Elastic Compute Service (ECS) をクリックし、対象のインスタンスを見つけ、その 操作 列にある 今すぐアクセスする をクリックします。
説明他のクラウド製品を接続する場合は、以下の設定項目を参照し、対応する「クラウドネイティブアクセス」のドキュメントに基づいてセットアップを完了してください。
表示される 今すぐアクセスする ダイアログボックスの 操作 列で ポートの追加 をクリックし、CDN で既に設定されているオリジンプロトコルとポートに基づいて選択します。
プロトコル:CDN オリジンプロトコルと一致している必要があります。
ポート:CDN オリジンポートと一致している必要があります。
デフォルトでは、CDN オリジンポートが 443 に設定されている場合、オリジンリクエストには HTTPS が使用されます。その他のすべてのポートでは、HTTP が使用されます。
HTTPS を使用する場合、ドメイン名と一致する証明書ファイルをアップロードします。アカウントの証明書管理サービスに証明書がアップロードされている場合、既存の証明書を直接選択できます。設定後、OKをクリックします。
今すぐアクセスする ページに戻ります。トラフィックは CDN を経由するため、WAF の前にレイヤー 7 プロキシがあるかどうか (Anti-DDoS Proxy や CDN など) セクションで「はい」を選択します。設定が正しくない場合、WAF は実際のクライアント IP を取得できず、レポートではすべてのリクエストが CDN ノードからのものとして表示されます。
クライアント IP の取得方法 を 【推奨】偽装 XFF を回避するために、指定したヘッダの最初の IP アドレスをクライアント送信元 IP アドレスとするに設定します。
ヘッダフィールド を
ali-cdn-real-ipに設定します。これは、Alibaba Cloud CDN がオリジンリクエストで実際のクライアント IP を格納するためにデフォルトで付与する HTTP リクエストヘッダーです。
説明Alibaba Cloud CDN のオリジンリクエストでクライアントのリアル IP を保存するために使用されるフィールドは
ali-cdn-real-ipです。他のプロバイダーの CDN 製品を使用する場合は、その公式ドキュメントを参照して、対応するフィールド名を確認してください。または、CDN でカスタムアウトバウンドリクエストヘッダーを追加し、カスタムオリジンリクエストフィールドを使用するように設定することもできます。
OK をクリックして接続を完了します。
説明WAF をバイパスする静的ファイルリクエストのパフォーマンスオーバーヘッドを削減するには、CDN の条件付きオリジンを設定するか、関連リソースをWAF ホワイトリストに追加します。
検証テスト:ブラウザで保護しているウェブサイトのドメイン名を入力し、CDN と WAF の接続が成功したかどうかをテストします。
ドメイン名の後に Web 攻撃コードを追加します (例:
<protected-domain>/alert(xss)、ここでalert(xss)はテスト用のクロスサイトスクリプティング攻撃コードです)。405 ブロックページが返された場合、攻撃がインターセプトされ、WAF 保護が成功しています。[F12] を押して、ブラウザの開発者ツールを開きます。ページを更新した後、[ネットワーク] タブに切り替えます。対象の静的リソースをクリックします。[ヘッダー] タブで、[X-Cache] フィールドを見つけます。値が [miss] ではなく [hit] の場合、キャッシュヒットが発生し、CDN アクセラレーションが有効になっています。

カスタム WAF 保護ルールの設定:WAF は、保護対象に一連のデフォルトの保護ルールを有効にします。これは日常的な保護シナリオに適しており、 ページで確認できます。デフォルトのルールが要件を満たさない場合 (たとえば、特定の特性を持つリクエストをホワイトリストに登録する場合など)、保護ルールを作成または変更します。詳細については、「保護設定の概要」をご参照ください。
よくある質問
CNAME アクセス後に WAF コンソールに「DNS 解決不明、ドメイン名がプロキシを有効にしました」と表示された場合、どうすればよいですか?
CNAME アクセス方式を使用する場合、コンソールにこのプロンプトが表示されるのは正常です。これは、ドメイン名の DNS 解決が CDN を直接指しているため、WAF が解決ステータスを直接取得できないためです。このプロンプトは無視できます。
接続が成功したかどうかを確認するには、前述の検証テスト手順に従ってください。
WAF 接続後、CDN キャッシュを更新する必要がありますか?
ほとんどの場合、CDN キャッシュを更新する必要はありません。
ただし、特定の設定を変更した場合は、手動での更新操作が必要です。詳細は以下をご覧ください:
更新不要
WAF の接続設定が完了しただけで、オリジンサーバーのコンテンツに変更がない場合は、更新は不要です。オリジンサーバー上の静的リソースが変更されていないため、CDN ノード上の既存のキャッシュは引き続き有効です。
更新が必要な場合
以下のいずれかの条件を満たす場合は、設定が有効になるように CDN キャッシュを手動で更新してください:
オリジンサーバー上の静的リソースファイルが変更された。
キャッシュポリシーに関連する HTTP レスポンスヘッダーが調整された。
WAF の Bot 管理機能が有効になり、Web SDK の自動接続が設定された。
接続後、Web サイトに「リダイレクトが多すぎます」と表示される場合はどうすればよいですか?
これは通常、オリジンサーバーで HTTP から HTTPS への強制リダイレクトルールが設定されているため、WAF/CDN とオリジンサーバーの間でリダイレクトループが発生するためです。
オリジンサーバーの直前のデバイスでオリジンプロトコルを HTTPS として設定します。具体的な設定場所は、使用する接続方式によって異なります:
CNAME アクセス:前段のデバイスは WAF です。
クラウドネイティブアクセス:前段のデバイスは CDN です。
詳細については、「CDN アクセラレーション後のリダイレクトが多すぎる」をご参照ください。
ESA コンソールで提供される WAF 保護機能と本ドキュメントで説明されている WAF の違いは何ですか?
ESA は CDN の次世代アップグレードです。CDN のすべてのアクセラレーション機能を完全にカバーするだけでなく、より強力なセキュリティ保護機能とエッジコンピューティング機能も統合しています。
WAF の違いは以下の通りです。
CDN に WAF を統合した後、DNS レコードを変更する必要がありますか?
いいえ。DNS レコードを変更する必要はありません。クラウドネイティブアクセスと CNAME 接続タイプでは、クライアントリクエストは最初に CDN ポイントオブプレゼンスに到達するため、ドメインの DNS レコードを変更する必要はありません。ただし、以下の設定調整が必要です:
CNAME 接続タイプを使用する場合は、CDN オリジン URL を WAF が提供する CNAME アドレスに変更し、クライアントのリアル IP を取得するように WAF を設定します。詳細については、上記の手順をご参照ください。