1つの段階では決して足りない理由
DDoS対策のどの段階にも、見えないものがあります。7 Tbps の攻撃を飲み込めるほど大きなネットワークが測っているのはビット毎秒であり、Minecraft のハンドシェイクが何かは知りません。Minecraft プロトコルを完璧に読むフィルタも、それが動く前に攻撃が回線を埋めてしまえば無意味です。この2つの失敗の仕方は正反対であり、だからこそ本物の対策は製品ではなく連なりなのです。各層は次の層に見えないものを取り除き、残りを下流に渡します。
下の図がその連なりであり、1つの攻撃を端から端まで通したものです。規模は、このネットワークが実際に緩和した最大のボリューム型攻撃に合わせています。
1つの攻撃、6つの段階
7 Tbps の攻撃をインターネットから Minecraft バックエンドまで追跡したもの。各段階は、その次の段階には見えないものを取り除きます。
エニーキャスト吸収
Cloudflare Spectrum
7Tbps受信−6.6 Tbps · 94%生の攻撃トラフィックが Cloudflare のエニーキャスト網に着弾し、330以上の都市に分散されます。リフレクション、アンプリフィケーション、偽装 UDP といった L3/L4 のボリューム型ゴミは、公表容量 500 Tbps 超のネットワーク上でここで消滅します。
L4 緩和
Papyrus · AS216013
≤ 600 Gbps
400Gbps受信−202 Gbps · 51%生き残るのは、少なくとも接続したそうに見える TCP です。カーネルレベルの SYN フィルタリングと送信元ごとのレート制限が、ユーザー空間に届く前に接続フラッドを破棄します。
L7 緩和
Papyrus · AS216013
198Gbps受信−170 Gbps · 86%ハンドシェイクは完了するのに正しい Minecraft を話さない接続 — スキャナー、汎用 L7 フラッド、不正な形式のプロトコル — は、ペイロードのパースに失敗した時点で破棄されます。
プロトコル対応アンチボット
Cryo
28Gbps受信−27 Gbps · 96%ここまで残ったものはすべて流暢に Minecraft を話します。Cryo はハンドシェイク自体を解析し、ホスト名、プロトコルバージョン、参加レート、送信元 ASN、履歴のすべてを判定に反映します。攻撃が拡大すると auto-UAM が制限を引き締めます。
検証ガントレット
CryoLimbo
1Gbps受信−646 Mbps · 62%残りはバイパスボット、つまりアンチボットに対して人間らしく見えるよう専用に書かれたクライアントです。これらは limbo に迂回され、物理演算と挙動のチェックでそれを証明させられます。ここで捕まった本物のプレイヤーは通過して先に進みます。
クリーンなトラフィック
あなたのサーバー
400Mbps到達到達するのはプレイヤーです。実際のクライアント IP は PROXY プロトコルで届くため、BAN や IP 単位のプラグインは直接接続の場合とまったく同じように動作します。オリジンは残りの 6.99 Tbps を一度も見ていません。
段階1 — 吸収、量が問題でなくなる場所
どんな攻撃でも最初の問いはセキュリティではなく算数です。パイプは攻撃より太いか? 7 Tbps が 10 Gbps の回線に届けば回線は埋まり、その背後のすべてがオフラインになります。サーバーも、そのファイアウォールも、動作中のどんなプラグインも、すでに封鎖された道路の反対側にいます。マシン上で何を設定してもこれは変わりません。
吸収を、攻撃者が生成できる以上の容量を持つネットワークで行わなければならない理由はここにあります。トラフィックは Cloudflare Spectrum のエニーキャスト網から入り、1つの攻撃が330以上の都市に分割され、公表容量 500 Tbps 超のネットワークに吸収されます。量の面ではこの層がほぼすべての仕事をこなしますが(例では攻撃の94%)、有用性の面では最も面白くない部分を担っています。何かのふりをしていなかったトラフィックを取り除いているだけだからです。
段階2 — L4 緩和、中身のない接続
吸収を生き延びるのは、少なくとも接続を開こうとするトラフィックです。これが SYN フラッドの段階で、帯域ではなく接続追跡の状態を枯渇させるよう設計された、しばしば偽装された膨大な数の接続試行です。フィルタリングは当社自身のネットワーク(AS216013)のカーネル内で、何一つユーザー空間に届く前に、送信元ごとのレート制限と接続バジェットによって行われます。
レイヤー4は接続が届いたことを知っています。しかしその接続が何を言ったかは知りません。この層ではまだどちらも何も言っていないため、プレイヤーとボットを区別できないのです。ここを通過するのは正当に見える TCP 接続であり、ここから先、問いは量の話ではなくなります。
段階3 — L7 緩和、そもそもこれはゲームなのか
ここでトラフィックが読まれます。ハンドシェイクを完了するもののうち相当な割合は、そもそも Minecraft を話しません。インターネット全体を走査するスキャナー、応答するもの何にでも向けられた汎用 HTTP フラッド、何かがクラッシュすることを期待した不正な形式のゴミです。Minecraft プロトコルを期待するパーサーが別のものを受け取れば、そのいずれも生き残りません。
これは汎用の「ゲーム保護」アプライアンスが苦戦する最初の層です。パケットの形を照合するのではなく、プロトコルを実際に実装することが求められるからです。またここは、残ったトラフィックが本当に危険なものになるまで量が落ちる地点でもあります。この先にあるものはすべて、あなたのゲームの言語を話しています。
段階4 — プロトコル対応アンチボット、本当に重要な段階
まだ動いているものはすべて、いまや流暢に Minecraft を話します。正しいハンドシェイク、それらしいユーザー名、正確なプロトコルバージョンが、数千の家庭用およびデータセンターのアドレスから届きます。これこそが実際に Minecraft サーバーを殺す攻撃であり、上位のどの層からも見えません。接続を1つずつ見る限り、本物のプレイヤーの参加と区別がつかないからです。
- ホスト名の認識 — あなたが提供していないホスト名を要求する接続は、打ち間違えたプレイヤーではありません。他の何かが動く前に破棄されます。
- auto-UAM 付きの参加レート制限 — ping とログインを合わせたレートが上昇すると自動的に引き締まる、IP 単位およびグローバルのバジェット。事前に設定しておくのではなく、対応が攻撃に合わせてスケールします。
- リスクスコアリング — 送信元の国、ASN、データセンターのレンジ、プロトコルの挙動、過去の履歴が組み合わさって判定となり、その後に初めて参加の続行が許されます。
- ping と MOTD の処理 — ステータスのフラッドはエッジのキャッシュから応答されます。あなたのサーバーに転送して毎秒数千回応答させることはありません。
例では、この層は到達したものの96%を取り除きます。26 Gbps のトラフィックであり、これがなければ一見本物の参加試行としてバックエンドに届いていたはずのものです。これは Cryo が攻撃を緩和する仕組み で詳述しているのと同じエンジンです。
段階5 — 段階4を通過するために作られたボットへの検証
よくできたボットはアンチボットを研究します。参加の間隔を調整し、それらしい名前を使い、家庭用プロキシから接続し、異常としてスコアリングされることを何もしません。まさにそうしないように作られているからです。スコアリングだけでは捕らえられず、この残りこそ人々がバイパスボットと呼ぶものです。
そこで最後の層はスコアリングをやめ、問いかけを始めます。疑わしい参加は軽量な limbo ワールドである CryoLimbo に迂回され、本物のクライアントであることを示すよう求められます。ゲームの物理法則に従う動き、サーバー状態への正しい応答、ヘッドレスのボットが単に模倣するのではなく本当に実装しなければならない挙動です。通過はプレイヤーにとっては安く、攻撃者にとっては高くつきます。それが設計のすべてです。ここで捕まった本物のプレイヤーは通過してあなたのサーバーへ進み、たいていは気づきもしません。
実際に到達するもの
400 Mbps のプレイヤーです。あなたのサーバーは、平穏な日に見ていたはずの接続を見ます。実際のクライアント IP が PROXY プロトコルで届くため、BAN、サブアカウント検出、IP 単位のプラグインは直接接続の場合とまったく同じように動作します。サーバーの内側から見れば、攻撃は小さな問題になったのではなく、まったく見えません。運営者が最初に気づくきっかけが、ラグのスパイクではなく Discord の通知であることが多いのはそのためです。
この比率はじっくり考える価値があります。ボリューム型の層が攻撃の94%を取り除き、最後の2つの層が取り除いたのは合わせて0.4%未満です。それでもサーバーが持ちこたえるかを決めるのはその2つです。ボットとプレイヤーを区別できたのはその2つだけだからです。容量は、面白い問題に取り組む権利を買ってくれます。それを解決してはくれません。
段階がどこにあるかは、何をするかと同じくらい重要
上記のすべての層はあなたのハードウェアの手前で動きます。これは実装の詳細ではなく構造上の要点です。プラグインでも層5の仕事の一種は可能で、上手くやるものもあります。しかしそれは、接続がすでにあなたのマシンに受理され、割り当てられ、パースされた後に動くため、回線の間違った側で戦っていることになります。このトレードオフは エッジのアンチボット vs プラグインのアンチボット で掘り下げています。だからこそ、どちらか一方ではなく、前段にエッジ、後段に第2の層としてプラグインという構成が理にかなっているのです。
よくある質問
DDoS対策は実際にどう機能するのですか?+
攻撃よりも大きな容量を持つ場所で、標的に届く前にトラフィックをフィルタすることによってです。対策は段階の連なりであり、各層は前の層が構造上見られないものを捕らえます。巨大なネットワークが生のボリューム型攻撃を吸収し、パケットフィルタリングが接続フラッドを破棄し、プロトコルフィルタリングが実際にはゲームではないトラフィックを破棄し、挙動検証がプレイヤーを巧妙に模倣するボットを捕らえます。単独ですべてをこなせる層はありません。
ファイアウォールやプラグインではDDoS攻撃を止められないのはなぜですか?+
位置の問題です。7 Tbps が 10 Gbps の回線に向けられれば回線は埋まり、その向こう側で動くものには発言権がありません。ファイアウォールのルールがどれほど完璧でも、サーバーはオフラインです。プラグインはさらに後、接続がすでにスロットとスレッドとログインを消費した後で動きます。どちらも最後の層としては有用ですが、最初の層にはなり得ません。
レイヤー4とレイヤー7のDDoS対策の違いは何ですか?+
レイヤー4は接続を扱います。SYN フラッド、偽装パケット、生の接続レートです。100万件の TCP 接続が届いたことは分かっても、そのどれが何を言ったかは分かりません。レイヤー7はトラフィックが実際に何であるかを扱います。Minecraft であれば、プロトコルを話しているか、どのホスト名を要求したか、その参加がプレイヤーらしく振る舞っているかです。ボット攻撃はレイヤー7の問題であり、だからこそ L4 のみのフィルタリングはそれをそのまま通してしまいます。
攻撃中、実際にどれだけのトラフィックが自分のサーバーに届きますか?+
このページの計算例では、7 Tbps のうち 400 Mbps です。17,500分の1への削減であり、オリジンは残りの 6.99 Tbps を一度も見ません。正確な比率は攻撃によって変わりますが、形は一貫しています。ボリューム型の層が量の面で圧倒的大部分を取り除き、最後の層が実際にサーバーを落としていたはずのトラフィックを取り除きます。
これだけ多くの層でフィルタすると、プレイヤーの遅延は増えますか?+
ほとんど計測できない程度です。各層は検査のためにトラフィックをキューに入れるのではなく、ワイヤスピードでインラインに動作するからです。プレイヤーは最寄りのエニーキャスト入口に接続し(多くの場合、サーバーへ直接向かうより短い経路です)、疑わしく見える接続だけが検証のために保留されます。クリーンな参加は、ここで説明したすべての層をどこにも止まらずに通り抜けます。
このページのすべての層は、無料プランを含むすべてのプランで動作します。有料プランが増やすのは容量と制御であって、保護ではありません。無料でネットワークを作成すれば、約5分で6つすべての背後に入れます。