📌

Cloudflare Spectrum (対DDoS用L4 Proxy) と Argo Smart Routing による通信最適化の両立

2025/01/07に公開

過去にCloudflareが提供する5つのボット対策サービスについて纏めました。
https://zenn.dev/kameoncloud/articles/f90f2970f2aae3
これらのソリューションはL7で稼働する対DDoS対策として機能します。
Bot対策≒DDoS対策です。

一方昨今のCloudflareの観測によるとDDoS攻撃はL7レイヤよりUDP/TCPを活用したL3/L4レイヤの攻撃の方が割合が増えています。

この対策を行うCloudflareのサービスは主に2つあります。MagicシリーズとSpectrumです。

Cloudflare Spectrum とは

SpectrumはCDNと同じようにセットアップを行います。全てのクライアントからの通信は一度CloudflareのEdgeにルーティングされそこから安全なクライアントからの通信のみがオリジンへルーティングされます。

Magic シリーズとは

一方Magicシリーズはより包括的なネットワークレイヤの保護を提供します。例えば特定のCIDRブロック単位でデータセンターへの通信全体をトンネリングにより保護します。Spectrumと異なり特定のCIDRブロックとCloudflare Globalネットワークのトンネリング経由のみで通信が許可される、という構成になります。

SpectrumはDNSやIPアドレスをCloudflareにゆだねる、というCDN/WAFと同じ形態ととりますがMagicシリーズはBGPのルーティングをCloudflareにゆだねる、という違いがあります。

この記事ではSpectrumの設定手順を纏めます。

さっそくやってみる

設定はとても簡単です。
まずはいつもとおりAmazon Linux 2023を起動し以下のコマンドでnginxを起動しておきます。

sudo dnf install nginx
sudo service nginx start

次にCloudflareのマネージメントコンソール左ペインからSpectrumをクリックし、Create an Applicationをクリックします。


Application Typeから保護すべきプロトコルを選択します。TCP,UDP,HTTP,HTTPS,SSH,RDP,Minecraftです。今回はnignxでHTTPが起動していますが、HTTPもTCP上で稼働することからTCPを選択します。

クライアントからアクセスを行うドメインを設定します。このドメインに紐付くIPアドレスはCloudflareのGlobalネットワークにより管理され動的に変更される可能性があります。このためIPアドレスの指定はデフォルトでは行えません。どうしてもクライアントからDNSを介さず固定IPアドレスで接続したい場合は、直接ご連絡ください。

CloudflareのエッジからOriginへ行う通信のIPアドレスバージョンとPORTを指定します。

OriginのIPアドレスないしはDNS名を設定します。Originの代わりにCloudflareのロードバランサを設定することも可能です。
https://zenn.dev/kameoncloud/articles/aaca06bb775144
それ以外のオプション設定はそのままにしてAddをクリックします。
以下のように設定が完了し、以下の図ですとspectrum.a.harunobukameda.com宛のTCP/80番の通信がCloudflare Spectrumによって保護されます。

Argo Smart Routing

何度かブラウザからアクセスを行いログを見てみます。

162.158.118.96 - - [07/Jan/2025:10:12:28 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" "-"
172.71.24.24 - - [07/Jan/2025:10:13:29 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" "-"
172.70.123.112 - - [07/Jan/2025:10:16:00 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" "-"

このように短時間でアクセス元のIPアドレスが変わっていることがわかります。まずこのIPアドレスはクライアントブラウザではなくCloudflareのEdgeIPアドレスです。クライアントのIPアドレスを直接オリジンに引き渡したい場合別のオプションが用意されています。これについては別の記事で触れたいと思います。
https://developers.cloudflare.com/spectrum/how-to/enable-proxy-protocol/

オリジンにアクセスを行うCloudflareのEdgeが動的に変更しているのはArgo Smart Routingという機能により実現されています。

過去別の記事でまとめたように、IP Anycastによってクライアントは一番近いCloudflareEdgeにリクエストがルーティングされるようになっています。
https://zenn.dev/kameoncloud/articles/330891fa5b043a
そこからOriginへの経路は複数存在しています。

  1. クライアントがアクセスしたEdge→オリジン
  2. クライアントがアクセスしたEdge→オリジンに一番近いEdge→オリジン
    ここでインターネットの特性を考えてみます。今のインターネットのルーティングは動的に構成されその経路は常に変更する可能性があります。また輻輳遅延や単純な混雑などにより一番早いルートは変動します。つまりオリジンに一番近いEdge→オリジンは時間と共に変わっていきます。(クライアントがアクセスしたEdge→オリジンはそこまでリアルタイムに変動しないです。なぜならクライアント側のルーターが経路情報をキャッシュし、一定期間は同じ経路を用いるためです)
    このため常に最速のルートを推察しリクエストをルーティングする技術がArgo Smart Routingです。現在この技術はTCPにのみ対応しており、UDPには対応しておりません。

まとめ

Cloudflare SpectrumはL3/4レイヤのDDoS対策と同時に通信の最適化による高速化を両立するサービスです。従来のDDoS対策は、スクラビングセンターと呼ばれる専用の拠点に通信を集めることでそこで防御を施します。この場合安全性は維持できても、余計な経路を通信が通ることになるためパフォーマンスが犠牲となってしまいます。

この点においてCloudflare Spectrumは従来のDDoS対策とは異なる次元のサービス、と言えます。

Discussion