【目次】
1.はじめに
2.レートベースルールとは
3.ルールの内容
4.ルールの設定
5.WafCharmでの制限事項
6.おわりに

1. はじめに
今回はレートベースルールについて解説します。
レートベースルールを使用すると、同一IPアドレスからの大量リクエストを
ブロック可能となります。
AWS WAF上での設定方法を解説いたします。ご活用いただければ幸いです。

2.レートベースルールとは
レートベースルールとは以下のように公式情報での説明があります。

レートベースのルールは、送信元の各 IP アドレスのリクエストのレートを追跡し、
指定された 5 分間のリクエスト数の上限をレートが超えるとルールアクションを
トリガーします。これを使用すると、過剰なリクエストを送信している
IP アドレスからのリクエストを一時的にブロックできます。

つまり、大量のリクエストを送ってくる送信元を閾値を利用した判定により
ブロックするためのルールとなります。

単一の送信元にしか機能しませんので、明確な DDoS 対策にはなりませんが、
緩和という意味では機能すると考えてもいいでしょう。
その他にもログインページで何度もパスワードの入力を試されること(辞書攻撃等)を
防止したり、サイトに負荷をかける目的で何度もアクセスされること
(ブルートフォースアタック)を捉えられることが期待できます。

3.ルールの内容
では実際に設定可能なルール内容を確認していきます。

レートベースルール単体でも作成可能ですが、条件を追加することが可能です。
例えば、特定のパスへの継続的なアクセスを捉えたい場合、URI が 「/login」への
アクセスに対してレートベースルールを適用することが可能です。

特定のパスだけでなく、特定の国、特定のIPといったことも可能です。組み合わせることもできますので、日本以外の国からの「/login」に対するアクセスのみにレートベース
ルールを適用するといったこともできます。
閾値の最小値は 100 件 / 5 分のリクエストとなります。
挙動は閾値を超えるとアクセス元のIPアドレスが遮断されます。閾値を下回ると自動的に
解除されます。

4.ルールの設定
今回は日本以外の国から特定のパスに対して 100 件 / 5 分のリクエストがきた際に
遮断するルールを設定します。

ルール作成が初めての方は以下のブログも合わせてご確認ください。


第1回 : 【new AWS WAF】変更点まとめ
第2回 : 【new AWS WAF】AWS マネジメントコンソール操作(マネージドルール編)
第3回 : 【new AWS WAF】AWS マネジメントコンソール操作(オリジナルルール編)
第4回 : 【new AWS WAF】AWS マネジメントコンソール操作(パターンセット・ルールグループ編)
第5回 : 【new AWS WAF】JSON 解説


作業の流れは以下の通りです。

  1. ルールの作成
  2. JSON editor で編集

・ルールの作成
Typeで「Rate-based rule」を選択します

「Rate limit」は100を選択して、以下の画面の通り選択して条件を追加できるように変更します。

AND条件を追加して国別の制限を追加します。ここでは日本からのアクセスのみを認めるように入力しますが、後ほどJSON editorで否定条件を追加します。

AND条件をプラスしてURI条件を「指定文字列で始まる」で設定します。

visual editor で入力できる項目はここまでで、日本以外にするためにJSON editorに切り替えます。

・JSON editor で編集
JSON editor で表示すると以下のようになります。色付けした箇所を否定条件に変えていきます。

変更したものが以下となります。NotStatement を使用しますと宣言して、 statement とともに GeoMatchStatement を囲めば完成です。

内容を理解している方は最初からJSON editorでも対応可能ですが、書ける部分はvisual editor で書いてしまった方が楽です。

5.WafCharmでの制限事項

WafCharmではレートベースルールのカスタマイズ対応を承っております。条件はご相談の上で対応しますのでご連絡ください。

お客様自身でレートベースルールを作成される場合には、「WafCharm」から始まる名前は使用しないでください。

6.おわりに
使いどころが難しいルールだと思いますが、COUNT での情報取得を目的にして、検知したIPアドレスをブラックリストに入れる運用でもいいと思います。サイトによってはあまりにも多いアクセスは異常と判断できるかもしれませんので、状況に応じて設定してみてください。