Alibaba Cloud CDN と Web Application Firewall (WAF) は、クラウドコンピューティングのシナリオで広く使用されています。 Alibaba Cloud CDN は、HTML、CSS、JavaScript ファイルなどの静的コンテンツの配信を高速化します。 WAF はサーバーを保護し、Web アプリケーションへのセキュリティ脅威を軽減します。 WAF は、Alibaba Cloud CDN と、Wangsu、Qiniu、Upyun など、他のベンダーが提供するコンテンツ配信ネットワーク (CDN) サービスと共にデプロイできます。 このトピックでは、Alibaba Cloud CDN に追加された高速化ドメイン名に対して WAF 保護を有効にする方法について説明します。
背景情報
URI は通常、ドメイン名の静的トラフィックと動的トラフィックを分離するために使用されます。特にトラフィックの多い Web サイトや複雑な Web アプリケーションのシナリオでは重要です。 このネットワークアーキテクチャは、Web サイトのパフォーマンスを大幅に向上させ、リソース使用量を最適化し、ユーザーエクスペリエンスを向上させます。 ほとんどの場合、画像、CSS ファイル、JavaScript ファイルなどの静的リソースは Alibaba Cloud CDN によってキャッシュされ、グローバル CDN ノードに配信されます。 ユーザーは、最寄りの CDN ノードからこれらのリソースをリクエストできます。これにより、読み込み時間が大幅に短縮されます。 動的リソースのリクエストは、リバースプロキシまたは NGINX、HAProxy、AWS Elastic Load Balancing (ELB)、Alibaba Cloud Server Load Balancer (SLB) などのロードバランサにルーティングされます。 その後、ロードバランサは、ラウンドロビン、最小接続、IP アドレスハッシュなどの事前定義されたポリシーに基づいて、バックエンドの Web アプリケーションサーバーのグループにリクエストを配信します。 次の図は、静的・動的分離を実装する Web サイトのネットワークアーキテクチャを示しています。
静的リソースのリクエスト:
ユーザーデバイスは、xxx.xxx.xxx/static/logo.png のリクエストを送信します。
リクエストは最寄りの CDN ノードにルーティングされます。 ノードにリソースがキャッシュされていない場合、リクエストはオリジンサーバーに転送されます。
オリジンサーバーはリクエストに応答し、データを返します。
Alibaba Cloud CDN は、オリジンサーバーから返されたデータをキャッシュし、クライアントにデータを返します。
ユーザーデバイスは、xxx.xxx.xxx/static/logo.png のリクエストを再度送信します。
CDN ノードは、リソースがキャッシュされているかどうかを確認します。 キャッシュされている場合、CDN ノードはデータを返します。
動的リソースのリクエスト:
ユーザーデバイスは、xxx.xxx.xxx/getInfo のリクエストを送信します。 リクエストは最寄りの CDN ノードにルーティングされます。
CDN ノードは、指定された条件に基づいてリクエストをオリジンサーバーに転送します。
オリジンサーバーは動的トラフィックを処理し、クライアントにデータを返します。
前提条件
Web サイトが構築され、Web サイトのドメイン名で静的・動的分離が実装されている。
Alibaba Cloud CDN がアクティブ化され、ドメイン名が Alibaba Cloud CDN に追加されている。 詳細については、「初心者向け」をご参照ください。
WAF インスタンスが購入されている。
ソリューションの概要
次のネットワークアーキテクチャを使用して、Web サイト用に Alibaba Cloud CDN と共に WAF をデプロイできます。 イングレスレイヤーに Alibaba Cloud CDN をデプロイして、コンテンツ配信を高速化します。 中間レイヤーに WAF をデプロイして、アプリケーションを保護します。 Elastic Compute Service (ECS) インスタンス、SLB インスタンス、VPC (Virtual Private Cloud)、またはデータセンターにオリジンサーバーをデプロイします。 Web サイトのトラフィックは最初に Alibaba Cloud CDN に到達し、フィルタリングのために WAF に転送されます。 通常のトラフィックのみがオリジンサーバーに転送されます。 これにより、Web サイトのサービスとデータのセキュリティが確保されます。
次の図は、WAF が Alibaba Cloud CDN と連携して Web サービスを保護し、データアクセスを高速化するネットワークアーキテクチャを示しています。
ステップ 1: WAF にドメイン名を追加する
保護する Web サイトのドメイン名を、CNAME レコードまたはクラウドネイティブモードで WAF に追加します。
WAF コンソール にログインします。 上部のナビゲーションバーで、WAF インスタンスがデプロイされているリソースグループとリージョンを選択します。 リージョンは、[中国本土] または [中国本土以外] にすることができます。
左側のナビゲーションウィンドウで、アクセス管理 をクリックします。
WAF にドメイン名を追加します。
CNAME レコードモード
CNAME レコードモードで WAF にドメイン名を追加すると、WAF はドメイン名の CNAME を自動的に生成します。
[CNAME レコード] タブで、[追加] をクリックします。
[リスナーの設定] ステップで、パラメーターを設定し、[次へ] をクリックします。
パラメーター
説明
[ドメイン名]
保護する Web サイトのドメイン名を入力します。
[プロトコルタイプ]
Web サイトでサポートされているプロトコルを選択します。 次に、オリジンサーバーのポートを入力します。 この例では、8080 と入力します。
[WAF の前に Anti-DDoS Pro、Anti-DDoS Premium、または Alibaba Cloud CDN などのレイヤー 7 プロキシがデプロイされているかどうか]
[はい] を選択します。 次に、[クライアントの実際の IP アドレスを取得する] パラメーターを [推奨] 指定されたヘッダーフィールドの最初の IP アドレスをクライアントの実際の IP アドレスとして使用して、X-Forwarded-For 偽造を防ぐ に設定します。

[転送ルールの設定] ステップで、[オリジンサーバーのアドレス] パラメーターを設定し、[送信] をクリックします。
[プロビジョニング] ページで、追加されたドメイン名を見つけ、ドメイン名の CNAME の横にあるコピーアイコンをクリックします。
説明HTTPS 証明書やロードバランシングアルゴリズムなどの他のパラメーターの設定方法の詳細については、「WAF にドメイン名を追加する」をご参照ください。
ドメイン名が追加された後、WAF の back-to-origin CIDR ブロックからのインバウンドトラフィックを許可するように、オリジンサーバーのセキュリティソフトウェアまたはアクセス制御ポリシーを設定します。 詳細については、「WAF の back-to-origin CIDR ブロックからのアクセスを許可する」をご参照ください。
クラウドネイティブモード
[クラウドネイティブ] タブで、左側のクラウドサービスリストで必要なタイプをクリックします。 この例では、CLB(HTTP/HTTPS) をクリックします。 動的トラフィックがレイヤー 7 Classic Load Balancer (CLB) インスタンス宛てである場合は、CLB(HTTP/HTTPS) をクリックできます。
[追加] をクリックします。[インスタンスの設定 - レイヤー 7 CLB] パネルで、既存の CLB インスタンスを表示し、CLB インスタンスを選択して [トラフィックリダイレクトポート] を追加します。「WAF の前段に Anti-DDoS Pro、Anti-DDoS Premium、または Alibaba Cloud CDN などのレイヤー 7 プロキシがデプロイされているか」パラメーターを「はい」に設定し、「クライアントの実際の IP アドレスの取得」パラメーターを [ [推奨] X-Forwarded-For の偽装を防ぐため、指定したヘッダーフィールドの最初の IP アドレスをクライアントの実際の IP アドレスとして使用する] に設定します。次に、カスタムヘッダーフィールドを入力します。
説明このトピックでは、[CLB (HTTP/HTTPS)] への接続を例として使用しています。 他のクラウドプロダクトへの接続の詳細については、「クラウドプロダクトに接続する」をご参照ください。
パラメーター
操作
[追加するインスタンスとポートを選択する。]
WAF に追加するインスタンスを見つけ、ポートの追加 を 操作 列でクリックします。
WAF に追加する HTTP または HTTPS [ポート] を選択し、[OK] をクリックします。
説明WAF に追加するインスタンスがインスタンスリストにない場合は、[インスタンスの同期] をクリックしてインスタンスリストを更新します。
[WAF の前に Anti-DDoS Pro、Anti-DDoS Premium、または Alibaba Cloud CDN などのレイヤー 7 プロキシがデプロイされているかどうか]
[はい] を選択します。 次に、[クライアントの実際の IP アドレスを取得する] パラメーターを [推奨] 指定されたヘッダーフィールドの最初の IP アドレスをクライアントの実際の IP アドレスとして使用して、X-Forwarded-For 偽造を防ぐ に設定します。
この例では、CLB インスタンスのリスナーポート 8080 を追加し、[ヘッダーフィールド] フィールドにヘッダーを指定します。

[OK] をクリックします。 [クラウドネイティブ] タブで、追加された CLB インスタンスを表示できます。

ページで保護対象を表示し、保護対象の保護ルールを設定します。 ドメイン名またはインスタンスを WAF に追加すると、WAF は自動的に保護対象を生成します。 デフォルトでは、コア保護ルールモジュールの保護ルールは保護対象に対して有効になっています。
ページの [コア保護ルール] セクションにデフォルトの保護テンプレートが存在しない場合は、保護対象のコア保護ルールモジュールの保護ルールを手動で有効にする必要があります。
ステップ 2: 保護対象の WAF 保護を有効にする
保護対象の保護ルールを手動で有効にするには、保護ルールが属する保護テンプレートの [適用対象] セクションで保護対象を選択する必要があります。
WAF コンソール にログインします。 左側のナビゲーションウィンドウで、 を選択します。 [コア Web 保護] ページの [コア保護ルール] セクションで、管理する既存の保護テンプレートを見つけ、[アクション] 列の [編集] をクリックします。
説明新しい保護テンプレートを使用する場合は、保護テンプレートを作成できます。 詳細については、「カスタム保護テンプレートを作成する」をご参照ください。
[編集 - コア保護ルール] パネルで、[アクション] パラメーターを [ブロック] に設定し、ステップ 1 で生成された保護対象を [適用対象] セクションで選択します。
[OK] をクリックして設定を保存します。
ステップ 3: Alibaba Cloud CDN の back-to-origin アドレスを変更する
静的リソースは、オブジェクトストレージサービス (OSS) またはバックエンドサービスに保存される場合があります。 Alibaba Cloud CDN のオリジンサーバー情報は、静的リソースが保存されている場所によって異なります。 したがって、back-to-origin アドレスの変更に必要な操作は異なります。
OSS に保存されている静的リソース
静的リソースが OSS に保存され、Alibaba Cloud CDN が高速化に使用されている場合は、ドメイン名の [オリジン情報] セクションで [基本オリジンサーバー情報] と 条件付きオリジン セクションを表示できます。 [条件付きオリジン] セクションの設定のみを変更する必要があります。 
Alibaba Cloud CDN コンソール にログインします。 左側のナビゲーションウィンドウで、[ドメイン名] をクリックします。 ドメイン名リストで、WAF 保護を有効にするドメイン名を見つけ、[管理] を [アクション] 列でクリックします。
条件付きオリジンを設定します。 [基本] タブで、[条件付きオリジン] セクションで必要なルールを見つけ、[変更] を [アクション] 列でクリックします。 次に、[条件付きオリジン] ダイアログボックスのパラメーターを変更します。
パラメーター
説明
[ルールの条件]
ルールの条件は、リクエスト内のパラメーターを識別して、ルールがリクエストに影響するかどうかを判断できます。 この例では、URI に /static/* が含まれていないリクエストを指定したオリジンサーバーアドレスに転送するルールを設定します。

[オリジンアドレス]
ドメイン名が CNAME レコードモードで WAF に追加されている場合は、WAF の [オリジンサーバー] パラメーターで指定されたアドレスを入力します。

ドメイン名がクラウドネイティブモードで WAF に追加されている場合は、関連するクラウドサービスインスタンスのパブリック IP アドレスを入力します。

重要[条件付きオリジン] ダイアログボックスには、ポートオプションはありません。 デフォルトでは、HTTP リクエストはオリジンサーバーのポート 80 に転送され、HTTPS リクエストはオリジンサーバーのポート 443 に転送されます。 [オリジンアドレス] パラメーターを設定するときにポートを指定する場合は、IP アドレスとポートを一緒に指定できます。
[OK] をクリックします。 [条件付きオリジン] セクションで新しい back-to-origin アドレスを表示できます。

バックエンドサービスに保存されている静的リソース
静的リソースがバックエンドサービスに保存され、Alibaba Cloud CDN が高速化に使用されている場合は、[オリジン情報] セクションの [基本オリジンサーバー情報] セクションの設定のみを変更する必要があります。

Alibaba Cloud CDN コンソール にログインします。 左側のナビゲーションウィンドウで、[ドメイン名] をクリックします。 ドメイン名リストで、WAF 保護を有効にするドメイン名を見つけ、[管理] を [アクション] 列でクリックします。
[基本] タブで、[オリジンサーバーの追加] をクリックします。 [オリジンサーバーの追加] ダイアログボックスで、パラメーターを設定し、[OK] をクリックします。
パラメーター
説明
[オリジン情報]
ドメイン名が CNAME レコードモードで WAF に追加されている場合は、[サイトドメイン] を選択し、ドメイン名に生成された CNAME を入力します。

ドメイン名がクラウドネイティブモードで WAF に追加されている場合は、[IP] を選択し、関連するクラウドサービスインスタンスのパブリック IP アドレスを入力します。

[優先度]
オリジンサーバーの優先度を指定します。 プライマリオリジンサーバーは、セカンダリオリジンサーバーよりも優先度が高くなります。
[重み]
オリジンサーバーの重みを指定します。 複数のオリジンサーバーの優先度が同じ場合、Alibaba Cloud CDN は重みに基づいてリクエストをオリジンサーバーに転送します。
[ポート]
Alibaba Cloud CDN が back-to-origin リクエストを転送するポートの番号を入力します。 この例では、8080 と入力します。
ステップ 1 で CNAME レコードモードで WAF にドメイン名を追加した場合は、元のオリジンサーバーアドレスを削除する必要があります。
Alibaba Cloud CDN の構成はすぐに有効になりません。 構成が有効になるまでにかかる時間は、ドメインネームシステム (DNS) レコードの有効時間、Alibaba Cloud CDN 構成の同期、キャッシュの更新/プリフェッチなどの要因の影響を受けます。 構成をタイムリーに有効にするために、構成の完了後にキャッシュを更新/プリフェッチすることをお勧めします。 これにより、ユーザーはアクセス中に最新の構成を取得できます。
ステップ 4: SSL 証明書を設定する
Alibaba Cloud CDN に SSL 証明書をデプロイして、HTTPS セキュアアクセラレーションを有効にし、クライアントと CDN ノード間のデータ伝送を暗号化します。
左側のナビゲーションウィンドウで、[ドメイン名] をクリックします。 [ドメイン名] ページで、管理するドメイン名を見つけ、[管理] を [アクション] 列でクリックします。
表示される左側のナビゲーションツリーで、[HTTPS] をクリックします。 [HTTPS 証明書] セクションで、[変更] をクリックします。
[HTTPS 設定の変更] ダイアログボックスで、[HTTPS セキュアアクセラレーション] をオンにし、証明書関連のパラメーターを設定します。

Alibaba Cloud 証明書管理サービスから購入した証明書を使用する場合は、[証明書のソース] パラメーターを [SSL 証明書サービス] に設定し、購入した証明書を [証明書名] ドロップダウンリストから選択します。 既存の証明書は、SSL 証明書の管理 ページで表示できます。
説明購入した証明書にバインドされているドメイン名が Web サイトのドメイン名であるかどうかを確認します。
サードパーティの証明書サービスプロバイダーから発行された証明書を使用する場合は、[証明書のソース] パラメーターを [カスタム証明書 (証明書 + 秘密鍵)] に設定します。 [証明書名] パラメーターを設定した後、[証明書 (公開鍵)] と [秘密鍵] パラメーターを設定します。 その後、証明書は証明書管理サービスにアップロードされます。 証明書は、SSL 証明書の管理 ページで表示できます。
パラメーター
説明
[証明書名]
アップロードする証明書の名前を入力します。
名前に使用できるのは、文字、数字、ピリオド (.)、アンダースコア (_)、ハイフン (-) です。
説明証明書名は一意である必要があります。 既存の証明書は、SSL 証明書の管理 ページで表示できます。
証明書名がすでに存在するというメッセージが表示された場合は、証明書名を変更して証明書を再アップロードします。
[証明書 (公開鍵)]
PEM エンコードされた証明書ファイルの内容を入力します。
テキストエディターを使用して、PEM 形式の証明書ファイルを開くことができます。 次に、内容を [証明書 (公開鍵)] フィールドにコピーします。
フィールドの下にある [PEM エンコードリファレンス] をクリックすると、サンプルコードを取得できます。
[秘密鍵]
PEM エンコードされた秘密鍵ファイルの内容を入力します。
テキストエディターを使用して、KEY 形式の秘密鍵ファイルを開くことができます。 次に、内容を [秘密鍵] フィールドにコピーします。
フィールドの下にある [PEM エンコードリファレンス] をクリックすると、サンプルコードを取得できます。
説明秘密鍵が「-----BEGIN PRIVATE KEY-----」で始まり、「-----END PRIVATE KEY-----」で終わる場合は、OpenSSL ツールを使用して秘密鍵の形式を変換する必要があります。 次に、
new_server_key.pemファイルの内容を [秘密鍵] フィールドにコピーします。 OpenSSL コマンド:openssl rsa -in old_server_key.pem -out new_server_key.pem
[OK] をクリックします。
構成の確認
ブラウザに xxx.xxx.xxx/123.php の URI を入力してリクエストを開始します。 リクエストはブロックされます。これは、オリジンサーバー宛ての動的トラフィックが WAF によって保護されていることを示しています。

WAF コンソール にログインします。 左側のナビゲーションウィンドウで、 を選択します。 表示されるページで、[コア保護ルール] タブの攻撃レコードを表示します。 この例では、URI が xxx.xxx.xxx/123.php のリクエストは、Webshell ルールに基づいてブロックされています。

静的リソースパス xxx.xxx.xxxx/static/1.png にアクセスします。 表示されるページで、F12 キーを押すか、ページを右クリックして [検証] を選択し、開発者ツールを開きます。 表示されるパネルで、[ネットワーク] タブをクリックします。 コードで Alibaba Cloud CDN によって高速化が有効になっていることを確認できます。
説明[X-Cache] フィールドは、キャッシュがヒットしたかどうかを示します。 値 MISS はヒットしていないことを示し、値 HIT はヒットしていることを示します。
検証結果によると、静的トラフィックは Alibaba Cloud CDN によって高速化され、オリジンサーバー宛ての動的トラフィックは WAF によって保護されています。
関連操作
WAF にドメイン名を追加する: このトピックでは、WAF をアクティブ化した後、CNAME レコードモードで WAF にドメイン名を追加する方法について説明します。
ドメイン名を追加する: このトピックでは、Alibaba Cloud CDN をアクティブ化した後、Alibaba Cloud CDN にドメイン名を追加する方法について説明します。
Dynamic Content Delivery Network (DCDN) が必要な場合は、「DCDN とは」をご参照ください。
DCDN に追加されたドメイン名に対して WAF 保護を有効にする場合は、DCDN コンソール で [WAF] を有効にできます。 その後、WAF を使用して、DCDN ノード上の Web サービスを保護できます。 詳細については、「WAF (新規) を使い始める」をご参照ください。
説明Alibaba Cloud CDN と DCDN の違いの詳細については、「Alibaba Cloud CDN とは」をご参照ください。
クライアントの送信元 IP アドレスを取得する: このトピックでは、トラフィックが複数回転送された後にクライアントの送信元 IP アドレスを取得する方法について説明します。