ドメインを CDN に接続してコンテンツを高速化すると、オリジンサーバーは SQL インジェクションや XSS などの Web 攻撃に晒されます。このベストプラクティスでは、CDN のアクセラレーションを維持しつつ、CDN からオリジンへのパスに Web Application Firewall (WAF) をデプロイして不正なトラフィックをフィルタリングする方法について説明します。
適用範囲
適用可能なアーキテクチャ:このドキュメントは、CDN および Elastic Compute Service (ECS) を使用した動的・静的混合アーキテクチャに適用されます。この構成では、静的コンテンツは引き続き CDN によって高速化され、WAF は動的リソースの保護に集中できます。CDN + 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 Application Firewall コンソールにログインします。上部メニューで、WAF インスタンスのリソースグループとリージョン (中国本土 または 中国本土以外) を選択します。左側メニューで、アクセス管理 をクリックします。
アセットの接続:次のいずれかの方法を 1 つ選択して、保護対象のアセットを接続します: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の前にAnti-DDoS ProxyやCDNなどのレイヤー7プロキシがデプロイされていますか」セクションで 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)はテスト用のクロスサイトスクリプティング攻撃コードです)。403 ブロックページが返された場合、攻撃はインターセプトされ、WAF による保護は成功です。F12 キーを押してブラウザの開発者ツールを開きます。ページを更新した後、[ネットワーク] タブに切り替えます。対象の静的リソースをクリックします。[ヘッダー] タブで、[X-Cache] フィールドを見つけます。値が [miss] ではなく [hit] であれば、キャッシュヒットしており、CDN によるアクセラレーションが有効です。具体的には、[X-Cache] の値が
HIT TCP_IMS_HITを示すことがあり、[Via] フィールドには複数のキャッシュノードレイヤーを経由したパスが表示され、[Server] の値はTengineになります。
カスタム WAF 保護ルールの設定:WAF は、接続されたオブジェクトに対してデフォルトの保護ルールセットを有効にします。これは日常的な保護シナリオに適しています。これらは ページで確認できます。デフォルトのルールが要件を満たさない場合 (例:特定の特性を持つリクエストをホワイトリストに登録する)、保護ルールを作成または変更してください。詳細については、「概要」をご参照ください。
よくある質問
CNAME アクセス後、WAF コンソールに「[DNS 解決不明、][ドメイン名がプロキシを有効にしました]」と表示される場合の対処方法
CNAME アクセス方式を使用している場合、コンソールにこのメッセージが表示されるのは正常な動作です。これは、ドメイン名の DNS 名前解決が直接 CDN を指しているため、WAF が解決ステータスを直接取得できないことが原因です。このメッセージは無視してかまいません。
接続が成功したかどうかを確認するには、前述の検証テストの手順に従ってください。
WAF を接続した後、CDN キャッシュを更新する必要がありますか?
ほとんどの場合、CDN キャッシュを更新する必要はありません。
ただし、特定の設定変更を行った場合は、手動での更新操作が必要です。詳細は以下をご参照ください:
更新不要
オリジンサーバーのコンテンツに変更がなく、WAF の接続設定のみを完了した場合は、更新は不要です。オリジンサーバー上の静的リソースは変更されていないため、CDN ノード上の既存のキャッシュは引き続き有効です。
更新が必要
以下のいずれかの条件を満たす場合は、設定を有効にするために CDN キャッシュを手動で更新してください:
オリジンサーバー上の静的リソースファイルが変更された。
キャッシュポリシーに関連する HTTP レスポンスヘッダーが調整された。
WAF のボット管理機能が有効化され、Web SDK の自動接続が設定された。
接続後にウェブサイトで「リダイレクトが多すぎます」と表示される場合の対処方法
これは通常、オリジンサーバーに HTTP から HTTPS への強制リダイレクトルールが設定されており、WAF/CDN とオリジンサーバーの間でリダイレクトループが発生していることが原因です。
オリジンサーバーの直前のデバイスで、オリジンプロトコルを HTTPS に設定します。具体的な設定場所は、使用している接続方法によって異なります:
CNAME アクセス:WAF コンソールで、オリジンサーバーへの接続プロトコルとして HTTPS を設定します。
クラウドネイティブアクセス:CDN コンソールで、オリジンサーバーへの接続プロトコルとして HTTPS を設定します。
詳細については、「CDN アクセラレーション後のリダイレクトが多すぎる問題」をご参照ください。
ESA コンソールで提供される WAF 保護機能と、このドキュメントで説明されている WAF との違いは何ですか?
ESA は CDN の次世代アップグレードです。CDN のすべてのアクセラレーション機能を完全にカバーするだけでなく、より強力なセキュリティ保護とエッジコンピューティング機能を深く統合しています。
WAF の違いについては以下の通りです:
CDN と WAF を連携させた後、DNS レコードを変更する必要がありますか?
いいえ。DNS レコードを変更する必要はありません。クラウドネイティブ接続と CNAME 接続の両方のタイプで、クライアントリクエストは最初に CDN のエッジノードに到達するため、ドメインの DNS レコードを変更する必要はありません。ただし、以下の設定調整が必要です:
CNAME 接続タイプを使用する場合は、CDN のオリジン URL を WAF から提供される CNAME アドレスに変更し、WAF がクライアントの送信元 IP アドレスを取得するように設定します。詳細については、上記の手順をご参照ください。