みなさんはDDoS攻撃をご存知でしょうか。
DDoS攻撃とは、大量のコンピュータからターゲットにアクセスし、ターゲットをダウンさせる攻撃です。
Mirai Botnetのソースコード公開以来、その規模は拡大し続けており、それはサービスとして提供されているため誰もが簡単に攻撃を行うことができます。
Cloudflareは標準でDDoS攻撃の対策をしてくれるのですが、実はただウィザードに従って設定するだけで防げる攻撃はごく一部です。
そこで、実際に使われている攻撃ツールを用いて検証しながら、実際の攻撃に耐えられるCloudflareの設定を導き出してみました。
設定方法
セキュリティ -> WAF からファイアウォール ルールを表示し、以下の設定を行います。

また、SSL/TLS -> オリジン証明書 から証明書を発行してサーバに登録し、SSL/TLS のモードをフル(厳密)にします。
最後に、セキュリティ -> WAF -> レート制限ルール で10秒間に64リクエストでBANするようにしましょう。

解説
何をしているか
Cloudflareには「I’m under attack!」というモードが存在し、DDoS攻撃を受けた際にはこれを有効化することで、ブラウザ判定が行われるようになります。
これで単純な攻撃は対策出来るのですが、攻撃ツールにはブラウザをエミュレーションする機能が搭載されており、攻撃モードを変更することで回避されてしまいます。
そこで、マネージドチャレンジを用います。
これは、ブラウザ判定に加えてCAPTCHAによる人間判定を行うモードです。
多くの攻撃ツールはブラウザ判定を回避することは出来ますが、CAPTCHAは回避出来ないことが多いです。
というのも、DDoS攻撃においてCAPTCHAを回避するためには実際の人間にCAPTCHAを解かせるサービスを用いる必要があり、それにはお金が必要になるからです。
また、それを用いたCAPTCHAの解決は人力であるため時間がかかり、非常に効率が悪いので多くの攻撃ツールでは採用されていません。
そのため、マネージドチャレンジを適用することでDDoS攻撃を防げます。
UX低下への対応
しかし、マネージドチャレンジが有効だとUXが非常に低下したり、クローラーが正常に動作しなくなることがあるため、2つの条件を満たした場合にのみ有効化するようにしています。
まず、Cloudflareによる認証を受けたボットでないかの確認をします。
続いて、接続元の国が日本でないかの確認をします。
DDoS攻撃は大半が海外からのアクセスであるため、海外に対してのみマネージドチャレンジを適用するだけで十分な効果が期待出来ます。
もちろん、日本のプロキシサーバを経由される可能性はあるのですが、それも対策できます。

国が限定されるということは使えるIPアドレスも減ることになりますね。
Cloudflareはリクエストに対して脅威スコアを付けてくれるので、それが0より大きい場合はブロックしてしまえば良いのです。
通常のユーザーであれば脅威スコアが0より大きくなることはまず無いので、このルールの優先度はマネージドチャレンジより高くしても良いと思います。
パフォーマンスの最大化
ただ、ここまでしてもキャプチャを突破してくる攻撃ツールがあります。
私が実験用に使っているものです。
1分半ほど攻撃し続けるとCAPTCHAを解かれてしまいます。
その対策が SSL/TLS の部分です。
これを有効化することで、サーバがnginxなどであれば HTTP/2 で通信を行えます。
これにより、サーバの負荷を抑えつつ全力を出し切らせることができます。
ただ、これでも落ちることがあったので、レートリミットを設けました。
実際に攻撃してみた
ということで、対策を施した自分のサイトに攻撃してみました。

たくさんのリクエストをマネージドチャレンジにかけられていますね。
この時、htopを表示しながら検証したのですが、リソースは全く消費していませんでした。
攻撃時間を120秒にしたところ攻撃が通ってしまったので、HTTP/2 の記述とレートリミットを追加しました。
この対応によってリソースをフルに使ってリクエストを捌くことが出来ました。
かなり強力と言われている攻撃ツールで検証して問題無かったので、余程の規模の攻撃でなければ問題ないといえるでしょう。
おまけ
Cloudflareとは関係ないですが、WordPressブログに対する対策の場合、PHP-FPMのプロセス数を150に設定してやると、マネージドチャレンジとレートリミットを外しても捌けるようになります。
まとめ
Cloudflareの無料機能だけで、様々なことができることを紹介しました。
これらの機能を活用することで、Webサイトへの攻撃被害を減らすことに繋がれば幸いです。
私のおすすめのレンタルサーバーはColorfulBoxです。
以下から公式サイトや紹介記事へジャンプできますので、是非ご覧ください。