AWS WAFで特定のURI以外をブロックしてボット対策をする

2023.10.10

はじめに

私が担当しているWebサイトは海外のボットと思われる多くのリクエストが来ます。 IPアドレスが毎回違うのでIPアドレスでフィルタリングはできず、海外にもユーザーがいるので国ごとリクエストを除外することもできません。

そこで有効なURI以外をWAFでブロックする設定をしました。AWS WAFにはBot Controlという機能もありそちらも検討はしたのですが、URIがさほど多くないこともあり今回の方法に決定しました。

AWS WAFは既に導入済みの前提でWeb ACLにルールを追加する部分の説明にさせていただきます。

Regex pattern sets の作成

許可するURIを正規表現で指定します。今回は全てのURIを登録せず、一番上位のパスのみ登録します。例えば ^/uri01.* で以下すべてのURIを許可します。

/uri01
/uri01/uri01-01
/uri01/uri01-02

1つの Regex pattern sets に10までURIを指定できます。Regex pattern setsは最大で10まで作れるので最大100のURIを設定できますが、パフォーマンスに影響がないことを確認した方がよさそうです。1行目の ^/$ はスラッシュのみ(/)の場合です。

^/$
^/uri01.*
^/uri02.*
^/uri03.*
・・・
^/uri08.*
^/uri09.*

以下のように設定してください。

10以上ある場合はRegex pattern setsを複数作成します。

Web ACLへのルールの追加

作成した Regex pattern sets を使ってWeb ACLへルールを追加します。Web ACLの画面で以下の画像の様にAdd my own rules and rule groupsを選択してください。

続いてRule Builderを選択します。ルール名を入力してください。Typeは Regular rule を選択します。

続いてルールの条件とアクションを設定します。

Regex pattern setsが1つの場合

If a request に続くコンボボックスは、doesn't matched the statements(NOT) を選択してください。

Statementには以下の様に

  • Inspect: URI
  • Match Type: Matches pattern fron regex pattern set
  • Regex pattern set: 作成したRegex pattern setの名前

を設定してください。

Regex pattern setsが2つ以上の場合

If a request に続くコンボボックスは、matched all the statements (AND) を選択してください。

次にすべての正規表現に一致しない場合は条件を満たすようにしたいので、Negate statement resultsにチェックを入れてください。 NOT Statement 1には以下の様に

  • Inspect: URI
  • Match Type: Matches pattern fron regex pattern set
  • Regex pattern set: 作成したRegex pattern setの1つ目の名前

を設定してください。

同様に NOT Statement 2にも

  • Negate statement results: チェックあり
  • Inspect: URI
  • Match Type: Matches pattern fron regex pattern set
  • Regex pattern set: 作成したRegex pattern setの2つ目の名前

を設定します。Regex pattern set が3つ以上ある場合は。Add another statement というボタンを押して追加してください。

アクションの設定

最後に条件を満たした場合にどうするかを設定します。ActionでBlockを選択します。

以上で設定は完了です。オレンジのAdd rule ボタンを押してください。

最後に

今回調べたことは以上になります。以前はボットによりリソースが多くのリソースが使われ、レスポンスが遅延することがありました。この設定変更をした後は存在しないURIはWAFでブロックしてくれるようになり、不安が解消されました。ぜひお試し下さい。