Cloudflare WAF の Security Firewall rules を使って特定パスのアクセスのみ許可する設定を実施してみた
こんにちは、yagiです。
Cloudflare WAFのSecurity Firewall rules を使って、WebサイトでのWAFをオンにした場合に、特定パスへのアクセスのみを許可するような設定を実施しましたので紹介します。
Cloudflare WAF Firewall rules とは
About Cloudflare Firewall Rules
Cloudflare Firewall Rules is a flexible and intuitive framework for filtering HTTP requests. It gives you fine-grained control over which requests reach your applications, proactively inspecting incoming site traffic and automatically responding to threats.
Cloudflare Firewall Rules は HTTPリクエストをフィルタリングするためのフレキシブルで直感的なフレームワークであり、アプリケーションに到達するリクエストについて、きめ細かなコントロールを提供し、サイトへのトラフィックをプロアクティブに検査、自動的に脅威に対応してくれます。
サポートされているルールのアクション
現在Cloudflareにてサポートされているルールのアクションは以下の通りとなります。なおルールは上からの記載順の通りの優先順位で適用されます。
・ log : 一致するリクエストを Cloudflare ログに記録します。
・ bypass : リクエストに対してCloudflareのセキュリティ機能を動的に無効にすることをユーザーに許可します。
・ allow : 一致するリクエストは、他のファイアウォール ルール コンテンツによってトリガーされるチャレンジおよびブロック アクションから除外されます。
・ challenge : 現在は非推奨。代わりに以下のmanaged_challengeが推奨されます。
・ managed_challenge : リクエストの特性に応じて、Cloudflareの特定の基準に基づいて、適切なタイプのチャレンジを動的に選択します。
・ js_challenge : ボットやスパムが要求リソースにアクセスできないようにします。リクエストを行ったクライアントは、続行する前に Cloudflare JavaScript チャレンジに合格する必要があります。
・ block : 一致するリクエストはアクセスを拒否されます。
詳細は以下を参照ください。 Firewall rules actions
設定してみた
Security > WAF > Firewall rules から Create Firewall Rule を押下して作成していきます。
対象のホストネームを指定し、その配下の /test 以下へのアクセスのみを許可するように設定します。画面右下のSaveを押下して保存します。
なおここで設定しているBot Scoreは、Cloudflareが対象のリクエストを人間によるリクエストだとどれくらい確信しているかのスコアとなります。
詳細は以下をご参照ください。 Bot scores
設定内容をテストしてみます。
まずは、ブラウザへURLを入力して通常の人によるリクエストを実施します。
次に、Amazon API Gateway を使って、APIからアクセスするテストをします。
ここでは詳細は割愛しますが、Amazon API Gateway のREST APIを使って、以下の通り設定します。
DEVステージを作成してデプロイします。
赤枠で囲ったURLの呼び出しをブラウザのアドレスバーにコピー&ペーストします。
すると今度は人間のアクセスではないとして、アクセスがチェック対象となります。
許可した特定パスへのアクセスについてテストします。
特定パスへのアクセスについては許可されていることが確認できました。
感想
Cloudflare WAF のSecurity Firewall rules を使って、特定パスへのアクセスのみを許可するように設定を実施しましたので紹介しました。
Cloudflare WAF はWaiting RoomやCDN機能等、Cloudflareをご利用の場合に有効化すれば併せてお使いいただくことができるので非常に便利で強力な機能です。
WAFを導入する場合の理想的なスケジュールについては、サイトを本格オープンする前に一定期間Logで記録を残しておき、アクセスが必要なリクエストについては、本格オープン前にこのようにパスを指定してAllowに設定しておくようにすると、スムーズに開始できるかと思います。