AWS WAFで悪質なスクレイピングを防ごう

この記事を書いたチーム:chocochip
AWS WAFで悪質なスクレイピングを防ごう

 「なんかサイトが重くて見れない…ログを調べてみたら、短時間に大量なアクセスが来て、サーバーが一時的にダウンしてた…」

サイトを運営している方ならば、こういう事象に何度も遭っているのではないでしょうか。そのほとんどが攻撃や負荷を考慮しない悪質なスクレイピングによるものです。 

 今回はAWS WAFを使って、こういった攻撃やスクレイピングからサイトを守る方法について紹介します。なお、AWS WAFを使うためにはCloudFrontかALBでサイトを公開する必要があります。 

 

Web ACLの作成 

【エンジニア募集中】フルリモート可◎、売上/従業員数9年連続UP、平均残業8時間、有給取得率90%、年休124日以上 etc.  詳細はこちらから>

 まずはWeb ACLを作成しましょう。今回はALBでサイトを公開しましたので、リージョンはALBと同じ東京に設定しています。もしCloudFrontでサイトを公開しているのであれば、リージョンを一番上の「Global(CloudFront)」に設定してください。

作成ページの「Add AWS resources」でサイトを公開しているALBを選択します。 

ルールの追加 

 上記の設定が終わったら、独自のルールを追加します。今回は攻撃やスクレイピングを防ぐためだけなので、「短時間に特定のパスに100回以上アクセスしたら、該当IPアドレスを一時的にブロック」というルールを追加します。特定のパスは「/blog」とします。 

もしサイト全体に掛けたいのであれば、「Scope of inspection and rate limiting」の項目を「Consider all requests」に設定してください。 

 ルールを追加し終えたら、「Default web ACL action for requests that don’t match any rules」の項目が「Allow」になっているのを確認し、他の項目は全部デフォルトのままでWAFを作成します。 

動作確認 

 WAFを作成し終えたら、ちゃんと動作しているかどうかを確認しましょう。WAFに感知されるように、短時間に100回アクセスするにはスクリプトで「curl ドメイン」コマンドを繰り返し実行すればいけます。今回はWindowsのPowerShellから下記のコマンドでサイトに繰り返しアクセスしてみました。スクショのように、実行している途中から「403エラー」を返り始めましたら、WAFがちゃんと動作しているのが分かります。 

注意事項:下記のコマンドを実行しっぱなしにすると、サーバーがダウンしたり、DBが破損したりする可能性があります。動作確認が終わったら、ちゃんとコマンドを停止してください。また、外部サイトに大量アクセスし、相手に損害を与えたら、当然罪に問われる可能性もあるため、こちらのコマンドはあくまで自分が所有しているサイトだけに使ってください。上記を踏まえて、自己責任でコマンドを実行してください。 

 ブロックされていないときのアクセス 

 ブロックされているときのアクセス 

ブロックしたIPの確認 

 動作確認が終わったら、WAFでブロックしたIPアドレスを確認しましょう。スクショのように、「Action」が「BLOCK」になっているのはブロックされたIPアドレスです。IPアドレスの後ろについてある2文字のアルファベットは国を表示しています。 

また、こちらのブロックは一時的なもので、一定時間が過ぎたら自動的に解除されます。もしブロックされたIPアドレスがGoogleやBingなどの検索エンジンのものだったら、ホワイトリストに入れれば、ブロックされることはありません。もし攻撃だと判断したら、ブラックリストに入れれば、そのIPアドレスでアクセスするとは二度とできません。 

WAFのホワイトリストとブラックリストの作成方法は以下の記事を参照してください。 

「AWS WAFで特定のIPアドレスからのアクセスだけを許可orブロックしたい」 

 

 このように、AWS WAFを利用すれば、悪質なスクレイピングを防ぐことができます。もし攻撃や悪質なスクレイピングに悩まされているのであれば、ぜひ試してみてください。 

 

関連記事 

「AWS WAFで特定のIPアドレスからのアクセスだけを許可orブロックしたい」 

 

【エンジニア募集中】フルリモートも◎(リモート率85.7%)、平均残業8時間、年休124日以上、有給取得率90% etc. 詳細はこちらから>

Smallitのサービス