【目次】
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 分のリクエストがきた際に
遮断するルールを設定します。
AWS WAF Classic と new AWS WAF それぞれで説明します。

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


AWS WAF Classic
AWS WAF 解説 【第1回 基本構造編】
AWS WAF 解説 【第2回 Condition と Filter の関係性】
AWS WAF 解説 【第3回 String and regex matching の仕組みと活用例】


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


■ AWS WAF Classic の場合

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

  1. 国別制限 condition の作成
  2. パス指定 condition の作成
  3. ルールの作成

・国別制限 condition の作成
国別制限 condition は日本にマッチするように作成して「does not」を利用して日本以外とします。「Geo match」を選択して以下のように設定します。

・パス指定 condition の作成
今回は「/login で始まる」とします。「String and regex matching」を選択して以下のように設定します。

・ルールの作成
「Rules」を選択してレートベースルールを作成します。

conditionを追加して条件を絞ります。「does not」を使う時は以下のように選択します。

最終的に以下のような形となりました。

検知した場合はどのIPアドレスかを確認することも可能です。

■ new AWS WAF の場合

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

  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をご利用のお客様でレートベースルールを利用する際は以下の制限事項がございます。

AWS WAF Classic をご利用の場合
・レートベースのカスタマイズルールは承っておりません。カスタマイズ可能なプランでも同様です。お客様側でご対応ください。
・本ブログを参考にお客様側で設定する際、ルール名に「wafcharm-」、「wc-」で始まる名前は使用しないでください。WafCharm のルールと誤認して誤作動する可能性があります。

new AWS WAF をご利用の場合
・カスタマイズ対応を承っております。条件はご相談の上で対応しますのでご連絡ください。※カスタマイズ可能プランでの対応となります。

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