AWS-WAF

AWS WAF レートベースルールでアクセスを遮断してみた

皆さんこんにちは。構築担当の川合です。

AWS WAF を利用している中でDos攻撃に対する方法として、レートベースルールと呼ばれるもので一部対応出来るような事が分かったので実際に試してみた内容になります。

以前までは閾値が2000だったのようなのですが、100まで制限が緩和されたようで攻撃に対する検知がより早く出来るようになっています。

レートベースルール を追加してみる

では、早速ルールを追加していきたいと思います。
レートベースルールを追加するには、ルールグループからルールを追加するのではなく
Web ACL に対して直接ルールを追加する事で設定する事が可能になります。
※ルールグループからだと、そもそもレートベースを選択する事が出来ません

対象のWeb ACL から Add my own rules and rule groups を選択して、新規ルールを作成します。
Rule type で Rule builder になっている箇所を、Rate-based rule に変更します。

判定条件を設定する

場合によっては全てのリクエストに対して制限を実施してもよいですが、まずは小さい範囲から適用する事をおススメします。他のシステムからの連携であったり、サービスを監視している通信だったりを誤って遮断してしまう可能性があります。

今回は、サンプルとして問い合わせフォームへのアクセスを制限すると仮定して
URI で /contact/ という文字列を含む事を条件としてみました。

この条件に合致した場合に実施する動作として、今回はBlock(遮断)を選択しました。
※注意※
今回は、検証ため初めからBlockを選択していますが既に稼働しているサイトに対してルールを追加する場合などは、まずCountにて様子見をおススメします。
Countでは、遮断はせずに条件に合致したリクエストを記録する事が出来ます。

AWS WAF をALBに適用する

これでルールの準備は整いましたので、実際にALBにWAFを適用してみます。
対象のWebACLにて、【Associated AWS resources】のタブに移動して【Add AWS resources】を選択します。
リージョン単位でWebACLを作成すると、ALB 及び API Gateway を選択する事が可能です。
※Cloudfront は、Global(CloudFront)でWebACLを作成する必要があります

アクセスが遮断されるか確認する

では、実際にアクセスが遮断されるか確認してみます。
5分以内に100アクセス以上 同じIPアドレスからアクセスがあると、設定したルール条件に合致してアクセスがALBの時点で遮断されます。
※ALBでアクセスが遮断されるため、配下のEC2にはログが記録されません

対象のIPアドレスなどは、3時間以内であればWebACL の overviewにて簡単に確認することが出来ます。

まとめ

AWS WAF のレートベースルール を用いてDos攻撃に見立てたアクセスを遮断してみました。
同一のIPアドレスからのアクセスであったり、同じURIへのアクセスであったりを遮断する事が出来ることを確認出来ましたが、IPアドレスを都度変更したりアクセスがバラバラだったり高度なDDos攻撃への対策としては少し不十分になるかなとは思います。
その場合は、WAFだけでなくAWS Shield を組み合わせて対策していくしかないかと思います。

ただ、AWS Shield Advanced は費用が高額になったり契約の縛りがあったりするので
AWS WAF で出来ること、配下のサーバーで対処出来るところなどを詰めていけば色々対策出来るかとは思います。

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA