リクエストをブロックするカスタム VCL
Magento 2 の Fastly CDN モジュールを使用して、ブロックする IP アドレスのリストを含むEdge ACL を作成できます。 次に、このリストを VCL スニペットと一緒に使用して、着信リクエストをブロックできます。 このコードは、受信リクエストの IP アドレスを確認します。 ACL リストに含まれる IP アドレスと一致する場合、Fastly は、リクエストがサイトにアクセスするのをブロックし、403 Forbidden error
を返します。 その他すべてのクライアント IP アドレスへのアクセスが許可されます。
前提条件:
-
Fastly CDN を使用するように環境を設定する必要があります。 詳しくは、Fastly サービスの設定を参照してください。
-
Magento 2 の Fastly CDN モジュールが最新バージョンであることを確認してください。 Fastly モジュールのアップグレードを参照してください。
-
Fastly サービスの環境設定を確認します。 Fastly キャッシュの確認を参照してください。
-
ステージング環境と実稼動環境にアクセスするには、管理者資格情報が必要です。
-
ブロックするクライアント IP アドレスのリスト
クライアント IP アドレスをブロックするためのEdge ACL を作成する
Edge ACL を作成して、ブロックする IP アドレスのリストを定義します。 ACL を作成したら、それをカスタム VCL スニペットで使用して、ステージングまたは実稼動サイトへのアクセスを管理できます。
両方の環境で同じ名前のEdge ACL を作成して、ステージングサイトと実稼動サイトの両方のアクセスを管理します。 VCL スニペットコードは、両方の環境に適用されます。
- 管理者にログインします。
- ストア/設定/設定/詳細/システム/フルページキャッシュ/Fastly 設定 に移動します。
- 「Edge ACL」セクションを展開します。
- ACL を追加 をクリックして、リストを作成します。 この例では、リストに「ブロックリスト」という名前を付けます。
- リストに IP アドレス値を入力します。 このリストに追加されたクライアントの IP アドレスはすべてブロックされ、サイトにアクセスできません。
- 必要に応じて、「否定」チェックボックスを選択します。
VCL スニペットコードでは、Edge ACL を名前で参照します。
ブロックリストのカスタム VCL の作成
Edge ACL を定義した後、それを使用して、ACL で指定された IP アドレスへのアクセスをブロックする VCL スニペットを作成できます。 ステージング環境と実稼動環境の両方で同じ VCL スニペットを使用できますが、スニペットは各環境に個別にアップロードする必要があります。
次のカスタム VCL スニペットコード(JSON 形式)は、ブロックリスト ACL 内のアドレスと一致するクライアント IP アドレスを持つ受信リクエストをブロックするロジックを示しています。
{
"name": "blocklist",
"dynamic": "0",
"type": "recv",
"priority": "5",
"content": "if ( client.ip ~ blocklist) { error 403 \"Forbidden\"; }"
}
この例に基づいてスニペットを作成する前に、値を確認して、変更が必要かどうかを判断してください。
-
name
: VCL スニペットの名前。 この例では、blocklist
という名前を使用しました。 -
priority
: VCL スニペットを実行するタイミングを指定します。 優先度は、直ちに実行し、許可された IP アドレスからの管理リクエストであるかどうかを確認するように5
定されています。 このスニペットは、デフォルトのMagento VCL スニペット(magentomodule_*
)に優先度 50 が割り当てられる前に実行されます。 各カスタムスニペットの優先度を、スニペットを実行するタイミングに応じて 50 より高くまたは低く設定します。 優先度の低いスニペットが最初に実行されます。 -
type
:生成された VCL コード内のスニペットの場所を決定する VCL スニペットのタイプを指定します。 この例では、recv
を使用して、VCL コードをvcl_recv
サブルーチン内のボイラープレート VCL の下、およびオブジェクトの上に挿入します。 スニペットタイプのリストについては、Fastly VCL スニペットリファレンスを参照してください。 -
content
:実行する VCL コードのスニペット。クライアントの IP アドレスを確認します。 IP がEdgeの ACL に含まれている場合は、web サイト全体に対して403 Forbidden
エラーが発生して IP のアクセスがブロックされます。 その他すべてのクライアント IP アドレスへのアクセスが許可されます。
環境のコードを確認して更新した後、次のいずれかの方法を使用して、カスタム VCL スニペットを Fastly サービス設定に追加します。
-
カスタム VCL スニペットを管理者から追加します。 管理者にアクセスできる場合は、この方法をお勧めします。 (Fastly バージョン 1.2.58 以降が必要です。)
-
JSON コードの例をファイル(例:
blocklist.json
)に保存して、Fastly API を使用してアップロードします。 管理者にアクセスできない場合は、この方法を使用します。
カスタム VCL スニペットの追加
-
管理者に ログインします。
-
ストア/設定/設定/詳細/システム をクリックします。
-
フルページキャッシュ/Fastly 設定/カスタム VCL スニペット の順に展開します。
-
カスタムスニペットを作成 をクリックします。
-
VCL スニペットの値を追加します。
-
名前 —
blocklist
-
種類 —
recv
-
優先度 —
5
-
VCL スニペットコンテンツを追加します。
code language-conf if ( client.ip ~ blocklist) { error 403 "Forbidden"; }
-
-
作成 をクリックして、名前パターン
type_priority_name.vcl
(たとえばrecv_5_blocklist.vcl
)で VCL スニペット ファイルを生成します -
ページのリロード後、「Fastly 設定」セクションの「Fastly に VCL をアップロード」をクリックして、ファイルを Fastly サービス設定に追加します。
-
アップロード後、ページ上部の通知に従ってキャッシュを更新します。
Fastly は、アップロードプロセス中に VCL コードの更新バージョンを検証します。 検証に失敗した場合は、カスタム VCL スニペットを編集して問題を修正します。 次に、VCL を再度アップロードします。
リクエストをブロックする VCL の追加例
次の例は、ACL リストの代わりにインライン条件ステートメントを使用してリクエストをブロックする方法を示しています。
- 名前:
<name of the VCL>
- 動的:
<0/1>
- 型:
<type>
- 優先度:
<priority>
- コンテンツ:
<content>
Fastly VCL ドキュメントの 動的 VCL スニペットの使用を参照してください。
VCL コード サンプル:国コードによるブロック
この例では、IP アドレスに関連付けられた国に、2 文字の ISO 3166-1 国コードを使用しています。
{
"name": "blockbycountrycode",
"dynamic": "0",
"type": "recv",
"priority": "5",
"content": "if ( client.geo.country_code == \"HK\" ) { error 405 \"Not allowed\";}"
}
VCL コード例:HTTP ユーザーエージェントリクエストヘッダーによるブロック
{
"name": "blockbyuseragent",
"dynamic": "0",
"type": "recv",
"priority": "5",
"content": "if ( req.http.User-Agent ~ \"(UCBrowser|MQQBrowser|LieBaoFast|Mb2345Browser)\" ) {error 405 \"Not allowed\";}"
}
$MAGENTO_CLOUD_APP_DIR/var/vcl_snippets_custom
ディレクトリにスニペットを追加できます。 Commerce Admin で VCL を Fastly にアップロード をクリックすると、このディレクトリ内のスニペットが自動的にアップロードされます。 Magento 2 ドキュメントの Fastly CDN モジュールの 自動カスタム VCL スニペットのデプロイメントを参照してください。カスタム VCL スニペットの変更
-
管理者に ログインします。
-
ストア/設定/設定/詳細/システム をクリックします。
-
フルページキャッシュ/Fastly 設定/カスタム VCL スニペット の順に展開します。
-
アクション 列で、編集するスニペットの横にある設定アイコンをクリックします。
-
ページのリロード後、「Fastly 設定 _セクションの Fastly に VCL をアップロード_ をクリックします。
-
アップロードが完了したら、ページ上部の通知に従ってキャッシュを更新します。
カスタム VCL スニペットの削除
-
管理者に ログインします。
-
ストア/設定/設定/詳細/システム をクリックします。
-
フルページキャッシュ/Fastly 設定/カスタム VCL スニペット の順に展開します。
-
アクション 列で、削除するスニペットの横にあるごみ箱アイコンをクリックします。
-
次のモーダルウィンドウで、「DELETE」をクリックし 新しいバージョンをアクティベートします。