· HARUBOUYA · design · 21 min read
Cloudflare Pagesで行うべきセキュリティ設定
無料の範囲でできることを、優先度の高い順に並べます。常時HTTPS、HSTS、ボット対策、メールのなりすまし防止、セキュリティヘッダーまでまとめます。画面の場所と押すボタンを具体的に書きます。

静的サイトを Cloudflare Pages で公開すると、それだけである程度は守られます。ただし既定のままでは穴が残ります。
公開したその日から、自動化されたアクセスが来ます。管理画面を探す巡回、古い脆弱性を試す通信、ドメインを騙ったメールの送信などです。どれも狙い撃ちではなく、機械的に全世界のドメインへ向けられているものです。
ここでは無料の範囲でできる設定を、効果の大きい順に並べます。
前提:設定する場所が2つに分かれている
最初に混乱する点です。同じ Cloudflare の管理画面でも、設定の置き場所が2か所あります。
| 場所 | 何を設定するか | 行き方 |
|---|---|---|
| Pagesプロジェクト | 公開の設定、独自ドメインの接続、レスポンスヘッダー | 左メニュー「Workers & Pages」→ プロジェクト名 |
| ドメイン(ゾーン) | HTTPS、HSTS、DNS、ボット対策、ファイアウォール | 「アカウント ホーム」→ ドメイン名 |
セキュリティ設定のほとんどはドメイン側です。Pagesプロジェクトの画面をいくら探しても見つかりません。
優先度の一覧
| 順位 | 設定 | 費用 | 手間 | 失敗したときの影響 |
|---|---|---|---|---|
| 1 | 常時HTTPS | 無料 | 1分 | なし |
| 2 | メールのなりすまし防止 | 無料 | 10分 | 設定次第でメールが届かなくなります |
| 3 | www の名前解決 | 無料 | 5分 | なし |
| 4 | ボット対策 | 無料 | 1分 | 一部の自動アクセスが止まります |
| 5 | セキュリティヘッダー | 無料 | 15分 | 設定次第で表示が壊れます |
| 6 | HSTS | 無料 | 3分 | 元に戻すのが難しいです |
| 7 | プレビューURLの検索除外 | 無料 | 3分 | なし |
| 8 | ファイアウォールの個別ルール | 無料 | 30分 | 設定次第で検索エンジンを締め出します |
上から順に片付ければよいです。6番のHSTSだけは、理解してから触ってください。
1. 常時HTTPS
最優先です。http:// で来た通信を、自動的に https:// へ転送する設定です。
通信が暗号化されていないと、公衆無線LANなどの経路上で内容を読まれたり、書き換えられたりする可能性があります。読むだけのサイトでも、書き換えられて別の内容を表示されるのが問題です。
手順
- 「アカウント ホーム」→ ドメイン名をクリック
- 左メニュー「SSL/TLS」→「概要」をクリック
- 暗号化モードが「オフ」になっていないことを確認
- 左メニュー「SSL/TLS」→「エッジ証明書」をクリック
- 「Always Use HTTPS」をオンに切り替え
暗号化モードが「オフ」のままだと、4番の項目自体が画面に出てきません。見つからない場合は3番を先に確認してください。
注意
サイト内の画像やスクリプトを http:// で読み込んでいる場合、この設定だけでは解決しません。ブラウザは読み込む前に判定するためです。該当する場合は、記述側を https:// か相対パスに直します。
2. メールのなりすまし防止
見落とされやすいですが、優先度は高いです。
何が起きるか
ドメインを取得すると、そのドメインを差出人に偽装したメールを、誰でも送れる状態になります。「@自分のドメイン」から送られた請求書や依頼のメールが、取引先に届く可能性があります。
防ぐ仕組みは3つです。
| 仕組み | 役割 |
|---|---|
| SPF | どのサーバーからの送信を認めるかを宣言 |
| DKIM | 送信時に電子署名を付け、改ざんを検知 |
| DMARC | 上記2つに合格しなかったメールの扱いを指示 |
分岐:メールを受け取るか
ここで対応が2つに分かれます。先に決めます。
| 状況 | やること |
|---|---|
| そのドメインでメールを受け取りません | 送信を全面的に禁止する設定 |
| 問い合わせ用のアドレスを使いたいです | 転送の仕組みを設定したうえで、送信元を宣言 |
受け取らない場合
- ドメインの画面で、左メニュー「DNS」→「設定」をクリック
- 「メールのなりすまし防止」の項目からウィザードを開始
- 「このドメインからメールを送信しない」に相当する選択肢を選びます
- 提案されたレコードを確認して適用
追加されるのは次の内容です。手で入れる場合の値は次のとおりです。
| 種類 | 名前 | 内容 | 意味 |
|---|---|---|---|
| TXT | @ | v=spf1 -all | どのサーバーからの送信も認めません |
| TXT | _dmarc | v=DMARC1; p=reject; | 合格しないメールは受信側で拒否 |
p=none で止めません。参考記事でよく見かける値ですが、これは「様子を見るだけで何もしない」という意味です。なりすましは防げません。送らないドメインであれば、最初から p=reject でよいです。
受け取りたい場合
Cloudflare には無料の転送機能があります。独自ドメイン宛のメールを、普段使っているアドレスへ転送する仕組みです。
- ドメインの画面で、左メニュー「メール」→「メールルーティング」をクリック
- 画面の指示に従い、転送先のアドレスを登録
- 転送先アドレス側に届く確認メールのリンクを開きます
- 必要なDNSレコードの追加を承認
MXレコードは自動で追加されます。手で書く必要はありません。
この場合、DMARCは段階的に上げます。
| 段階 | 値 | 期間の目安 |
|---|---|---|
| 1 | v=DMARC1; p=none; | 2週間 |
| 2 | v=DMARC1; p=quarantine; | 2週間 |
| 3 | v=DMARC1; p=reject; | 以降 |
いきなり3段階目にすると、正規のメールまで拒否される場合があります。送信に使っているサービスをすべて把握してから上げます。
3. www の名前解決
example.com は開けるが www.example.com は開けない、という状態になりやすいです。Cloudflare の管理画面に警告として表示されます。
放置してよいものではありません。名刺やメールに www 付きで書かれた場合、到達しません。
対応は2択
| 方法 | 挙動 | 向いている場合 |
|---|---|---|
| A. wwwもPagesに接続 | どちらのURLでも同じ内容を表示 | 手間をかけたくありません |
| B. wwwをルートへ転送 | www は自動的に www なしへ移動 | 推奨 |
Bを推す理由です。同じ内容が2つのURLで見られる状態は、検索エンジンから見て重複にあたります。どちらを正としてよいか判断させる手間が増えます。
Bの手順
- Pagesプロジェクトの画面で「Custom domains」タブをクリック
- 「Set up a custom domain」から
www.(自分のドメイン)を追加 - DNSレコードが自動生成されることを確認
- ドメインの画面へ戻り、左メニュー「ルール」→「リダイレクト ルール」をクリック
- テンプレートから「www をルートへリダイレクト」に相当するものを選択
- 内容を確認して保存
転送の種類は 301(恒久的) を選びます。302(一時的)だと、検索エンジンが正規のURLを切り替えてくれません。
4. ボット対策
自動化されたアクセスに、計算負荷の高い処理を課す機能です。攻撃側の採算を悪化させます。
手順
- ドメインの画面で、左メニュー「セキュリティ」→「設定」をクリック
- 絞り込みで「ボットトラフィック」を選択
- 「ボット ファイト モード」をオンに切り替え
検索エンジンなど、Cloudflare が正規と認めているクローラは通過します。有効化してもSEOへの影響はありません。
注意点
| 内容 | 影響 |
|---|---|
| 個別ルールで除外できません | 自分の監視ツールやAPIも止まる可能性あり |
| JavaScript検出が自動で有効化 | 通常のサイトでは影響なし |
自作のスクリプトから定期的にサイトを叩いている場合は、先に確認してください。
5. セキュリティヘッダー
ブラウザに対して「この範囲を超えた動作はさせない」と指示する仕組みです。Pages では _headers という名前のファイルを置くだけで設定できます。
置く場所
拡張子なしのテキストファイルです。public フォルダの直下に置きます。
public/_headers書き方
1行目に対象のURLパターン、2行目以降に字下げしてヘッダー名と値を書きます。
/*
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Referrer-Policy: strict-origin-when-cross-origin
Permissions-Policy: camera=(), microphone=(), geolocation=()各行の意味は次のとおりです。
| ヘッダー | 何を防ぐか |
|---|---|
| X-Frame-Options: DENY | 他サイトの枠内に自分のサイトを埋め込ませません。偽サイトへの悪用を防ぎます |
| X-Content-Type-Options: nosniff | ファイルの種類をブラウザに推測させません |
| Referrer-Policy | 他サイトへ移動する際、どのページから来たかを渡す範囲を制限 |
| Permissions-Policy | カメラ、マイク、位置情報の使用を一律で禁止 |
4行とも、静的サイトであれば副作用なく入れられます。
上級者向け:CSP
Content-Security-Policy は最も強力ですが、最も壊れやすいです。読み込むスクリプトの許可先を1つずつ列挙する形になるため、タグマネージャーや外部の計測ツールを使っている場合、設定を誤ると計測が止まります。
入れる場合は、まず監視だけを行う Content-Security-Policy-Report-Only から始めます。いきなり本番へ適用しません。
制限事項
| 内容 | 上限 |
|---|---|
| ルール数 | 100件まで |
| 1行の文字数 | 2,000文字まで |
もう1点あります。サーバー側で処理を行う機能(Pages Functions)の応答には、このファイルの指定が適用されません。静的なファイルのみが対象です。
6. HSTS
ここから注意が必要です。
「このサイトには今後必ずHTTPSで接続すること」をブラウザに記憶させる仕組みです。一度記憶させると、指定した期間が過ぎるまで取り消せません。
何が危険か
HTTPSをやめた場合、または証明書に問題が起きた場合、記憶している期間中は訪問者がサイトに一切アクセスできなくなります。「あとで戻す」ができない設定です。
手順
- 左メニュー「SSL/TLS」→「エッジ証明書」をクリック
- 「HSTSを有効にする」をクリック
- 警告文を読み、「理解しました」を選択
- 「次へ」をクリック
- 設定項目を入力
| 項目 | 推奨 | 理由 |
|---|---|---|
| Enable HSTS | オン | |
| Max Age Header | まず1か月 | 問題があっても1か月で解除されます |
| Apply HSTS policy to subdomains | オフ | サブドメインがHTTPS未対応だと到達不能になります |
| Preload | オフ | 後述 |
| No-Sniff Header | オン | 害がありません |
- 「保存」をクリック
Preload を有効にしない理由
ブラウザに最初から組み込まれるリストへ登録する機能です。一度載ると、解除の申請から実際に反映されるまで数か月かかります。個人サイトで得られる効果に対して、取り返しのつかなさが釣り合いません。
進め方
1か月で設定 → 1か月運用して問題なし → 6か月へ延長 → 問題なし → 12か月急いで長くしません。
補足:最小TLSバージョン
同じ画面に「最小TLSバージョン」という項目があります。ただし Pages のホスト名に対しては設定できない仕様です。ここは触らなくてよいです。
7. プレビューURLを検索結果に出さない
Pages は、本番用ブランチ以外への反映時にプレビュー用のURLを自動生成します。既定では誰でも閲覧可能で、検索結果にも出る可能性があります。
公開前の内容が検索に載ると面倒です。_headers に1行加えて防ぎます。
https://:project.pages.dev/*
X-Robots-Tag: noindex:project の部分はそのまま書いてよいです。Cloudflare 側で置き換えられます。
閲覧そのものを制限したい場合は、Pagesプロジェクトの「設定」→「プレビュー アクセス」から制限をかけられます。ただしアクセス管理の初期設定が必要になるため、個人サイトでは検索除外までで十分です。
8. ファイアウォールの個別ルール
ここまでで大半は足ります。特定の攻撃が継続している場合のみ追加します。
先に現状を見る
- 左メニュー「セキュリティ」→「分析」をクリック
- 期間を「過去24時間」に設定
- アクセスされているパス、国、User Agent を確認
| 見えたもの | 対応 |
|---|---|
/wp-login.php /.env などへのアクセス | 該当パスを遮断 |
| 同一IPから短時間に大量 | レート制限 |
| 通常の閲覧のみ | 何もしません |
攻撃が来ていないのにルールを足さないでください。誤って正規の訪問者を締め出すほうが損失は大きいです。
遮断ルールの例
- 「セキュリティ」→「セキュリティ ルール」→「ルールを作成」→「カスタム ルール」
- 条件を設定
| 項目 | 値 |
|---|---|
| フィールド | URI パス |
| 演算子 | 次を含みます |
| 値 | /wp- |
| アクション | ブロック |
存在しないパスのため、遮断しても正規の訪問者に影響はありません。
やってはいけない設定
| 設定 | 何が起きるか |
|---|---|
| 日本以外を一律ブロック | 検索エンジンの巡回サーバーは国外。検索結果から消えます |
| セキュリティレベルを最高に固定 | 一般の訪問者にも確認画面が頻発 |
国で絞る場合は、必ず「検証済みボットを除外する」条件を併せて設定します。
設定後の確認
| 確認するもの | 方法 |
|---|---|
| HTTPSへの転送 | ブラウザで http:// から始まるURLを入力し、https:// に変わることを確認 |
| www | www. 付きで開き、www. なしへ移動することを確認 |
| セキュリティヘッダー | 外部のヘッダー診断サービスにURLを入力 |
| メール設定 | 外部のDMARC診断サービスにドメインを入力 |
| 誤遮断の有無 | 「セキュリティ」→「イベント」で直近の遮断内容を確認 |
| 検索への影響 | Search Console の「クロールの統計情報」を1週間後に確認 |
最後の2つが重要です。設定した直後ではなく、1週間後に見てください。影響は遅れて出ます。
失敗例
| 失敗 | 何が起きるか | 代わりにやること |
|---|---|---|
| HSTSを12か月で設定 | 問題が起きても1年間戻せません | 1か月から始めます |
| HSTSのPreloadを有効化 | 解除に数か月かかります | 個人サイトでは使いません |
DMARCを p=none のまま放置 | なりすましを検知するだけで防げません | 送らないドメインは p=reject |
| メールを使う予定なのに送信を全面禁止 | 自分が出したメールが届きません | 先に受け取るかどうかを決めます |
| CSPをいきなり本番へ適用 | 計測タグやスクリプトが止まります | 監視専用の設定から始めます |
| 国で一律ブロック | 検索エンジンを遮断し、検索結果から消えます | 検証済みボットを除外条件に入れます |
| 攻撃がないのにルールを量産 | 誤遮断だけが増えます | まず分析画面で現状を見ます |
_headers を字下げせずに書きます | 設定が読み込まれません | 2行目以降は必ず字下げ |
まとめ
- セキュリティ設定の大半は Pages ではなくドメイン側の画面にあります
- 最優先は常時HTTPSです。1クリックで終わり、副作用もありません
- メールのなりすまし防止は見落としやすいです。送らないドメインでも設定が要ります
- DMARCは
p=noneで止めません。送らないならp=rejectまで進めます - www は転送で統一します。転送は301を選びます
- ボット対策は無料で効果が大きいです。検索エンジンへの影響なし
- セキュリティヘッダーは
public/_headersに4行書くだけです。CSPだけは慎重に - HSTSは取り消せない設定です。1か月から始め、段階的に延ばします
- ファイアウォールの個別ルールは、実際に攻撃が来てから追加します
最初にやることは、常時HTTPSをオンにすることです。1分で終わり、他のどの設定よりも効果が大きいです。
参考になったら、いいねを押してください。





