背景
先日、個人開発のサービスに外国から大量の会員登録を行う攻撃を受けました。
会員登録時にメールを送信していますので、連続で大量の会員登録が行われると大量にメールが送信されてしまいます。
メール送信にはAWS SES(メール送信サービス)を使っていますので、出来るだけ早く止めないと私のお財布にダメージが蓄積されていってしまいます...
ClodflareのWAFで一網打尽にした
WAFでは以下の条件でルールを設定しました。
- 今回のような悪質なBotアクセスは拒否
- 監視エージェントなどの有用なBotや検索エンジンのBotは許可
- 人間のアクセスも許可
Cloudflareでは無料で上記のルールを簡単に設定可能です。
Cloudflare WAFの仕組み
Cloudflareに限らずだとは思いますが、WAFのルールは上から評価されていきます。
ルールの設定によっては後続のルールはスキップされます。
例えば、↓のようなルールの順番に設定してしまうと、1ですべてのBotが拒否されてしまうため、有用なBotだったとしても拒否されてしまいます。
良くない設定例
1. Botアクセスをすべて拒否
2. 有用なBotアクセスは許可
良い設定例
1. 有用なBotアクセスは許可
2. Botアクセスをすべて拒否
ルールの設定方法
Cloudflareのサイドバーからセキュリティ>セキュリティルールを選択します。
その後は、右上のルールを作成ボタンからカスタムルールを作成します。

ルールはお好みですが、Googleなどの検索エンジンBotはSEO的な観点でも重要なBotですので上位で許可します。
今回はAllowVerifyBotというルール名にして、既知のBotは許可するルールを設定しました。

今回設定したルール
↓の順番でルールを設定しました。
- 検索エンジンなどの有用なBotは許可
- 特定のIPは許可(監視エージェント)
- 日本国内のアクセスであれば許可。国外であればチャレンジを実行する。
チャレンジはCloudflareで↓のようにBotによるアクセスではないかを自動的にチェックしてくれるものです。
CAPTCHAと比べてユーザーの負担にならないのが大きなメリットです。
結果
Cloudflareのトラフィック(帯域幅)を見ても攻撃が行われた9/23~24から減少していることが確認できます。



