カテゴリー
技術メモ

サイトへの攻撃を検知してCloudflareのUnder Attackモードを自動的に有効化する

ここ数週間の間、国内のいくつかのウェブサイトがDDoS攻撃(サイトに多大な負荷をかけることでサービスを停止させる行為)の被害を受けています。私のDomainWatchも攻撃を受け、短い時間のダウンタイムが発生し対策を余儀なくされました。他にもニコニコ生放送などのサイトが攻撃を受けていることを公表しています。

これらの攻撃が同一犯によるものを示す証拠は現在のところありませんが、攻撃時期などから私は同一犯と考えています。

今回は、私がこれらの攻撃の対策をCloudflareの機能を用いて自動化したことについて書いていきます。同様の被害を受けて困っているウェブマスターの方の参考になれば幸いです。

前提として、Cloudflareあるいは同様のWAF(Web Application Firewall)サービス(DDoS GUARD、Sucuri、Incapsula、StackPath)を利用していることが必要です。これらのサービスを利用する理由は

  • オリジンサーバー(WAFで保護するサーバー)のIPアドレスを秘匿してレイヤー4の攻撃を防ぐ
  • サイトの状況に応じてAPI経由でUnder Attackモードを切り替える

これが主な理由です。WAF側で疑わしいトラフィックを全て排除してくれればこの記事は必要ないのですが、実際のところ、Cloudflareでは保護レベルを最高にしても攻撃を防いでくれません。結局、「Under Attack」モードを有効にしてこの攻撃を防ぐことができました。Under Attackモードとは、サイトの初回アクセス時に閲覧者が人間による操作(JavaScriptを有効にしている)であることを確認できた場合にアクセスを許可する機能です。こういう画面ですね。

CloudflareのUnder Attackモード
CloudflareのUnder Attackモード

この画面を一生出し続けていれば攻撃やボットによるアクセスはかなり防げますが、これがかなり一般ユーザーの反応が悪く、あまり長期に渡って使用しているとユーザー離れを招く原因になると思っています(反応など)。

なので、通常時にはこれをオフにし、攻撃が発生した際にはオンにするといった切り替えができる必要があるわけです。今回はこれにCloudflareのAPIを用います。

Under Attackモードの切り替えを自動化する

まず、CloudflareのAPIトークンを取得します。管理画面にログインして、「API Tokens」からトークンを作成します。権限は Zone Settings の編集権限を与えてください(画像参照)。

CloudflareのAPIトークン
CloudflareのAPIトークン

今回のためにUnder Attackモードの切り替えを自動化する簡単なシェルスクリプトを作成しました。同種の試みを行っていた人はいましたが、まあ見なかったことにしておきます。

cheenanet/autoenable-cloudflare-uam: Auto-enable Cloudflare “Under Attack” mode when CPU load is high
https://github.com/cheenanet/autoenable-cloudflare-uam

スクリプトをクローンします。

$ git clone https://github.com/cheenanet/autoenable-cloudflare-uam.git

実行には bc と jq が必要なので別途インストールします。

$ sudo apt install bc jq curl

スクリプト内のAPIトークン (api_key)とゾーンID (zone_id)をそれぞれ書き換えます。

api_key=""
zone_id=""

通常時の保護レベルと高負荷時のロードアベレージを設定します。この数値を超えるとUnder Attackモードを有効化し、それ以下になると保護レベルを戻すといった感じになっています。

default_security_level="high"
max_loadavg=2

Crontabに追加して実行できるようにします(この例では20分ごとに確認)。

*/20 * * * * /var/www/cloudflare-uam.sh

終わりに

Under Attackモードで全ての攻撃を防ぐことができるわけではなく、バイパスして攻撃するパターンもあります。しかしその場合は発信元を偽装できないのでWAFの管理画面から個別にIPをブロックして対処しましょう。

広告

投稿をシェア

記事の内容が面白いと思ったら、SNSでシェアしていただけると記事を投稿するモチベーションにつながります。

「サイトへの攻撃を検知してCloudflareのUnder Attackモードを自動的に有効化する」への1件の返信

コメントを残す

メールアドレスが公開されることはありません。