はじめに
今回の記事は、OCIのWAFのレート制限の設定を試してみた結果をご紹介したいと思います。
そもそもWeb Application Firewall (WAF) は、Webアプリケーションへの攻撃や不正アクセスからサービスを保護するための機能を提供します。この中でも「レート制限」は、特定のアクセスに対して制限を設定し、DDoS攻撃などを防ぐのに有用です。
OCI WAFの詳細については、Oracle Cloud Infrastructure Web Application Firewall (WAF)の公式ドキュメントをご参考ください。
本記事の前提条件
OCIのWAFのレート制限設定を試すために、事前に以下の構成を準備しました。
- Webサーバーの構築
Oracle Linux 8をベースに、Apache HTTP Serverをインストール。
Web_Server_1とWeb_Server_2の2台を構築し、パブリックサブネットに置く。 - Load Balancerの構築
OCIのLoad Balancerを構築し、Web_Server_1とWeb_Server_2をバックエンドに設定。
ゴールの構成図
前提条件としていたWebサーバー(Web_Server_1/Web_Server_2)とLoad Balancerを構築したOCI上に、本記事のゴールでもあるWAFをLoadBlancerにアタッチして、セキュリティを強化したいと思います。
構成図の補足説明
以下の構成要素を用いて、簡易的な検証環境を構築し、運用を想定した確認を行っています。
-
Compartment
クラウドリソースを論理的にグループ化するための単位です。 -
VCN
クラウド上で定義されたネットワーク環境であり、この構成全体の基盤となるネットワークです。 -
PublicSubnet
インターネットからアクセス可能なリソースを配置するためのネットワークセグメント。
この中にロードバランサーを配置し、外部からのHTTP/HTTPSリクエストを受け付けます。 -
InternetGW
VCNと外部インターネットを接続するコンポーネント。 -
Load Balancer
外部からのリクエストを受け取り、Webサーバーに転送します。 -
Web_Server_1/Web_Server_2
ロードバランサーからのリクエストを処理します。
レート制限ポリシーの作成手順
OCI WAFのレート制限を設定する際に実施した手順を紹介します。以下のステップに渡って、レート制限ポリシーを作成しました。
-
WAFポリシーの作成
初めに、コンソールのメニューから「アイデンティティとセキュリティ」 > 「webアプリケーション・ファイル」をクリックし、「WAFポリシーの作成」を開きます。
-
基本情報
"基本情報"画面では、以下の画像の通りに設定をします。
ここでは、WAFポリシーの名前は、【WAFpolicy】とします。
尚、アクションについては後に、"レート制限"画面で設定をしますので、ここではひとまず割愛を致します。
-
レート制限の設定
"レート制限"画面で、【レート制限ルールの構成の有効化】にチェックを付けて、【レート制限ルールの追加】をクリックします。
【レート制限の構成】では、以下の画像の通り、5秒間に3回以上のリクエストを制限するように設定をしました。
【アクションの追加】では、以下の画像の通り、名前は【RATE_LIMIT】、タイプは【返却HTTPレスポンス】、レスポンス・コードは【429 Too many requests】を選択しています。
最後に、【レスポンス・ページ本文】には任意で以下の通り、
"Too many requests are being sent to Web Server"と入力しています。
WAFの設定したセキュリティポリシーに適用した場合、上記の設定したメッセージがブラウザ上に表示される仕組みです。
ブラウザでの確認
設定が完了した後、ブラウザを使用して、WAFのレート制限が正しく機能しているかを確認しました。以下のように、短時間に大量のリクエストを送信すると、WAFが【429 Too many requests】を返し、設定した"Too many requests are being sent to Web Server"メッセージが表示されることを確認しました。
まとめ
実際にレート制限を設定することで、簡易的なDDoS攻撃を防げることが分かりました。ただし、大規模な攻撃については、別の防御機構も必要です。OCI WAFのレート制限はサポートの一つとして有効です。OCI WAFのレート制限は、簡単に実装できる便利な機能です。この設定を使うことで、サーバーを危険から保護できるため、OCIを利用する方はぜひ試してみてください。