Spectrum でレイヤー 4 トラフィック(TCP/UDP 接続など)を処理していても、レイヤー 7(L7)の分析ダッシュボードにトラフィックが表示されることがあります。これは、Cloudflare のレイヤー 7 CDN と Spectrum が、顧客の識別を別の方法で行うためです。
Spectrum では、顧客ホスト名の識別は、クライアントがエッジへの接続に使う Cloudflare IP アドレスに基づきます。一般的な流れは次のとおりです。
- Spectrum は、顧客ゾーンに Spectrum エッジ IP を指す DNS ホスト名を設定し、このエッジ IP とポートを顧客の設定に紐づけます。
- クライアントは Spectrum ホスト名を DNS ルックアップし、Spectrum エッジ IP を取得して、その IP とポートに接続します。
- Spectrum はこのエッジ IP とポートを使って接続を顧客の設定に照合し、顧客を識別します。
このプロセスはレイヤー 4 に焦点を当て、ホスト名と顧客設定を IP アドレスとポートで関連づけます。
- 顧客は、トラフィックをオリジンサーバーへ向ける DNS ホスト名をゾーンに設定します。
- クライアントは CDN ホスト名を DNS ルックアップし、DNS サーバーは CDN エッジ IP を返します。Spectrum と違い、CDN エッジ IP は主にトラフィック管理に使われ、顧客の識別には使いません。複数の顧客が同じ CDN エッジ IP を共有できるためです。
CDN では、顧客の識別は TLS ハンドシェイク中のホスト名解決(SNI)と HTTP リクエスト(Host ヘッダー)に大きく依存します。注目すべき点として、CDN は顧客ゾーンに一致する任意のホスト名(例: *.example.com)を受け付けます。レイヤー 7 の DNS に個別の一致がなくても受け付けます。そのため、Spectrum や Load Balancer のホスト名も *.example.com の下では有効として扱われます。
CDN はゾーン配下の任意のホスト名(例: spectrum.example.com)を受け付けるため、本来は Spectrum が先にプロキシすべき HTTP トラフィックや、レイヤー 4 専用の Spectrum アプリ向け HTTP トラフィックが、レイヤー 7 の CDN システムで直接処理されることがあります。流れは次のとおりです。
- クライアントはレイヤー 7 の CDN エッジ IP に接続しつつ、TLS ハンドシェイクと HTTP リクエストの両方で Spectrum アプリケーションのホスト名(例:
spectrum.example.com)を使います。つまり、クライアントは誤った IP 上でspectrum.example.comにアクセスしようとしています。 - CDN は、
*.example.com配下の任意のホスト名を認識する設計のため、TLS と HTTP の両フェーズでこのホスト名を顧客ゾーンの一部として受け付けます。その結果、リクエストはゾーンの識別情報の下で CDN を通ります。 - ただし、CDN がオリジンサーバーへ接続するときは、HTTP ホスト名の内部 DNS ルックアップを行います。これが Spectrum IP に解決されます(
spectrum.example.comから Spectrum エッジ IP)。そのため CDN は Spectrum へのオリジン接続を確立し、Spectrum の設定を読み込み、リクエストを Spectrum オリジンへ転送します。
このホスト名のトラフィックは、Analytics やログを含む通常のレイヤー 7 CDN 製品を通ります。
レイヤー 4 専用の Spectrum ホスト名向けトラフィックが、レイヤー 7 経由でオリジンにプロキシされないようにしたい場合(不要なスキャンやリクエストを含む)は、レイヤー 7 の WAF(Web Application Firewall)ルールの導入を推奨します。このルールで特定のホスト名またはポート向けトラフィックをブロックし、正当なトラフィックだけが Spectrum サービスに届くようにできます。
たとえば、spectrum.example.com へのリクエストを、Spectrum IP または顧客の Spectrum BYOIP からのもの以外はブロックする WAF ルールを作成できます。トラフィックはレイヤー 7 Analytics(WAF Security Events を含む)に記録されますが、誤ったアドレスに到達して CDN を再度ループすることは防げます。