Global Accelerator の背後で Application Load Balancer を使用するとともに、AWS WAF レート制限ルールを使用して、アプリケーションをレイヤー 7 DDoS 攻撃から保護したいと考えています。
簡単な説明
AWS Global Accelerator、Application Load Balancer、AWS WAF を利用することで、分散型サービス拒否 (DDoS) 攻撃からアプリケーションレイヤーを防御できます。
注: Application Load Balancer と WAF を使用したクライアントレート制限に基づいて、アクセラレーター内で送信元 IP の保持を TRUE に設定する必要があります。詳細については、「](https://docs.aws.amazon.com/global-accelerator/latest/dg/preserve-client-ip-address.html)Preserve client IP addresses in AWS Global Accelerator[」を参照してください。
解決方法
AWS WAF レート制限ルールを適用すると、アプリケーションに大量のフラッド攻撃を送信する特定の IP アドレスから、クライアントを自動的に遮断することができます。レートベースのルールでは、スライディング時間枠別に、各 IP アドレスによって送信されたリクエストの数を追跡します。リクエストがレート制限を超えたとき、即時にルールはそのアドレスからのリクエストをブロックし、このブロック状態は送信元 IPアドレスがリクエスト数を減らすまで続きます。
**注:**また、リクエストの送信国などリクエストのコンポーネントの多くを検査してブロックするように、ルールを構成することもできます。
前提条件
ルールベースのウェブ ACL を作成する
ウェブ ACL で、レート制限を積極的な 100 という値にしたレートベースのルールを作成します。次に、テストケースを使用し、ルールが機能しているかどうかを確認します。
- AWS WAF コンソールに移動して、ウェブ ACL ルールを作成します。
- カスタム ACL にカスタムルールを追加します。
- カスタムルールに名前を付けて、[種類] として [rate-based rule] を設定します。
- **[レート制限]**として [100] を設定します。
- その他の設定は、すべてそのままにしておきます。次に、[ルールを追加] をクリックします。
- ウェブ ACL を保存します。
結果をテストする
このテストでは、HTTP フラッド攻撃のシミュレーションを行います。ロードテストツール上では、受信したリクエストの進行状況がわかります。ある段階から、リクエストは設定したレート制限ルールによってブロックされるため、失敗し始めます。
-
コンピューターでロードテストツールを実行します。
注: または、コンソールで AWS CloudShell を開きます (CloudShell がサポートされているリージョンに切り替えるように促すプロンプトが表示される場合があります)。
# Install globally as root:
npm install -g loadtest
# On AWS CloudShell, Ubuntu or Mac OS X systems install using sudo:
sudo npm install -g loadtest
-
次に示すように、Global Accelerator のURLを入力します。
# Global Accelerator url
GA_URL=http://your_Global_Acclerator_URL
注: your_Global_Accelerator_URL を Global Accelerator の URL に置き換えます。
-
ターミナル内で以下のコマンドを実行して、大量のリクエストが殺到するフラッド攻撃をロードテストシミュレーションとして開始します。
注: これは実行に 45 秒かかるはずなので、フローに注意してください。
loadtest -n 1000 -c 1 --rps 25 $GA_URL
このコマンドは、1 秒あたり 1 リクエストと 25 リクエストの同時実行数で、合計 1000 リクエストを送信します。1 秒あたりのリクエスト数がこのレートだと、設定した制限には 4 秒目までに達します。
-
出力フローを分析します。ある段階でリクエストが失敗し始めていることに注目してください。このエラーは、WAF ルールが送信元 IP アドレスからのすべてのリクエストをブロックしたことを意味します。
[Fri Apr 21 2023 20:26:45 GMT+0000 ] INFO Requests: 0 (0%), requests per second: 0, mean latency: 0 ms
[Fri Apr 21 2023 20:26:50 GMT+0000 ] INFO Requests: 106 (11%), requests per second: 21, mean latency: 22.9 ms
[Fri Apr 21 2023 20:26:50 GMT+0000 ] INFO Errors: 106, accumulated errors: 106, 100% of total requests