※本資料は研修・説明用の架空サンプルです。社名・ドメイン・IPアドレス・ID等はすべて架空(IPはドキュメント用予約範囲)です。
1. 目的と範囲
コーポレートサイトおよび採用サイトの表示速度の改善、DDoS・不正アクセス対策、SSL証明書運用の簡素化を目的として、DNSおよびリバースプロキシをCloudflareへ移行する。
| 区分 | 対象 | 備考 |
| 対象 | www / recruit / 本体ドメイン(apex)/ CMS管理画面 | Webサーバ1台(さくら系VPS想定・架空) |
| 対象外 | メール配信(Google Workspace) | MX・SPF等のDNSレコードのみ移管、プロキシはしない |
| 対象外 | 社内基幹システム | 別ドメイン管理のため本設計の範囲外 |
2. 構成概要
閲覧者
(PC・スマホ)
→
Cloudflare
DNS/CDN/WAF
→ HTTPS(Full strict)→
オリジンWebサーバ
203.0.113.10
オリジンサーバはCloudflareのIPレンジからの通信のみ許可し、直接アクセスを遮断する。オリジン証明書にはCloudflare Origin CA(有効期限15年)を使用する。
3. DNSレコード設計
| タイプ | 名前 | 値 | プロキシ | TTL | 用途 |
| A | sample-shoji.example | 203.0.113.10 | Proxied | Auto | 本体ドメイン |
| CNAME | www | sample-shoji.example | Proxied | Auto | コーポレートサイト |
| CNAME | recruit | sample-shoji.example | Proxied | Auto | 採用サイト |
| A | cms | 203.0.113.10 | Proxied | Auto | CMS管理画面(Access保護) |
| A | ftp | 203.0.113.11 | DNS only | 3600 | 保守用(社内IPのみ許可) |
| MX | sample-shoji.example | smtp.google.com(優先度1) | DNS only | 3600 | メール受信 |
| TXT | sample-shoji.example | v=spf1 include:_spf.google.com ~all | — | 3600 | SPF |
| TXT | google._domainkey | v=DKIM1; k=rsa; p=MIIB…(省略) | — | 3600 | DKIM |
| TXT | _dmarc | v=DMARC1; p=quarantine; rua=mailto:dmarc@sample-shoji.example | — | 3600 | DMARC |
⚠ MX・メール関連レコードはプロキシ不可(DNS only)。移管前に現行DNSの全レコードをエクスポートし、漏れがないか突き合わせること。
4. SSL/TLS設定
| 項目 | 設定値 | 理由 |
| 暗号化モード | Full (strict) | オリジンまで証明書検証付きで暗号化。「Flexible」は使用禁止 |
| Always Use HTTPS | ON | http→https を一律リダイレクト |
| 最小TLSバージョン | TLS 1.2 | 古い端末の互換性と安全性のバランス |
| TLS 1.3 | ON | 高速化 |
| HSTS | ON max-age=6ヶ月/サブドメイン含む/preloadなし | 安定稼働1ヶ月後に有効化(段階導入) |
| Automatic HTTPS Rewrites | ON | 混在コンテンツ対策 |
| エッジ証明書 | Universal SSL(自動発行) | 更新作業不要 |
| オリジン証明書 | Origin CA(RSA 2048/15年) | オリジンサーバへインストール |
5. セキュリティ設定(WAF・Bot・レート制限)
5-1. 基本設定
| 項目 | 設定値 |
| Security Level | Medium |
| Browser Integrity Check | ON |
| Cloudflare Managed Ruleset | ON(アクション:既定) |
| OWASP Core Ruleset | ON(Paranoia Level 1/しきい値 Medium) |
| Bot Fight Mode | ON |
| DDoS防御(L3/4/7) | 既定(自動) |
5-2. カスタムルール(WAF)
| # | ルール名 | 条件(式) | アクション |
| 1 | 海外からの管理画面アクセス遮断 | (http.host eq "cms.sample-shoji.example" and ip.src.country ne "JP") | Block |
| 2 | WordPressログイン保護 | (http.request.uri.path contains "/wp-login.php") | Managed Challenge |
| 3 | xmlrpc無効化 | (http.request.uri.path eq "/xmlrpc.php") | Block |
| 4 | 不審なUA遮断 | (http.user_agent eq "") or (http.user_agent contains "sqlmap") | Block |
5-3. レート制限
| 対象 | しきい値 | アクション | 期間 |
| 問い合わせフォーム送信(POST /contact/) | 同一IPから 5回/1分 | Block | 10分 |
| 採用エントリー送信(POST /recruit/entry/) | 同一IPから 3回/1分 | Managed Challenge | 10分 |
6. キャッシュ・パフォーマンス設定
| 項目 | 設定値 |
| Caching Level | Standard |
| Browser Cache TTL | 4時間 |
| Brotli圧縮 | ON |
| Early Hints | ON |
| HTTP/3(QUIC) | ON |
| Rocket Loader | OFF(計測タグ・フォームの動作不良を避けるため) |
| Polish(画像最適化) | Lossless + WebP |
Cache Rules
| # | 対象 | 設定 |
| 1 | /wp-admin/*、/wp-login.php、cms.ホスト | キャッシュ対象外(Bypass) |
| 2 | 問い合わせ・エントリーフォーム | キャッシュ対象外(Bypass) |
| 3 | /wp-content/uploads/*(画像・PDF) | Edge TTL 30日/Browser TTL 7日 |
| 4 | ニュース一覧・トップページ | Edge TTL 1時間(更新時はパージ) |
⚠ ログイン状態のページをキャッシュすると他人に管理画面情報が表示される事故につながる。ルール1・2は必ず最上位に置くこと。
7. 管理画面のアクセス制御(Zero Trust)
CMS管理画面(cms.sample-shoji.example)は Cloudflare Access で保護し、許可されたユーザーのみ到達可能とする。
| 項目 | 設定値 |
| アプリケーション種別 | Self-hosted |
| 認証方式 | Google Workspace(SSO)+ ワンタイムPIN(予備) |
| 許可ポリシー | メールドメインが @sample-shoji.example かつ グループ「web-editors」所属 |
| セッション有効期間 | 8時間 |
| 外部制作会社 | 個別メールアドレスを期限付き(案件終了日まで)で許可 |
8. アカウント・権限管理
| 役割 | 人数 | Cloudflareロール | 主な権限 |
| 管理者(情報システム部) | 2名 | Super Administrator | 全設定・請求・メンバー管理 |
| Web担当(広報部) | 2名 | Cache Purge + Analytics | キャッシュ削除・アクセス解析閲覧 |
| 制作会社 | 1名 | DNS(閲覧のみ) | レコード確認のみ |
- 全メンバーに2段階認証(2FA)を必須とする
- APIトークンは用途別に最小権限で発行し、Global API Keyは使用しない
- 四半期ごとにメンバー・トークンの棚卸しを行う
9. 切替手順とチェックリスト
| 日程 | 作業 | 担当 | 優先 |
| D-7 | 現行DNSのTTLを300秒に短縮 | 情シス | 必須 |
| D-5 | Cloudflareにゾーン追加、DNSレコード取り込み・突合 | 情シス | 必須 |
| D-5 | オリジン証明書の発行・インストール | 情シス/制作会社 | 必須 |
| D-3 | WAF・キャッシュ設定を投入(WAFは「Log」モードで開始) | 情シス | 必須 |
| D-1 | hostsファイルでの事前表示確認(全ページ・フォーム送信) | 広報/制作会社 | 推奨 |
| D日 10:00 | レジストラでネームサーバをCloudflareへ変更 | 情シス | 必須 |
| D日〜D+1 | ゾーンが「Active」になったことを確認、表示・メール送受信を確認 | 全員 | 必須 |
| D+7 | WAFを「Log」→本番アクションへ切替、誤検知を確認 | 情シス | 必須 |
| D+30 | オリジンをCloudflare IPのみ許可に絞る/HSTS有効化 | 情シス | 推奨 |
切替当日の確認チェックリスト
- https://www / recruit / apex がすべて表示される(証明書エラーなし)
- http でアクセスすると https にリダイレクトされる
- 問い合わせフォーム・採用エントリーが送信でき、通知メールが届く
- 社外アドレスとのメール送受信ができる(MX・SPF・DKIM確認)
- CMS管理画面でAccessの認証画面が表示され、ログインできる
- レスポンスヘッダに
cf-cache-status が付与されている
- アクセス解析(GA4)の計測が継続している
10. ロールバック手順
重大な障害(サイト表示不可・メール不達が30分以上継続)時は以下の順で戻す。
1. 該当レコードのプロキシを「DNS only(グレー雲)」に変更 … 即時反映・まず試す
2. 改善しない場合、SSL/TLSモードを確認(Full strict ⇔ 証明書の不整合を疑う)
3. それでも改善しない場合、レジストラでネームサーバを旧DNSへ戻す
(TTL短縮済みのため概ね1時間以内に切り戻り。最大48時間)
4. 障害報告書を作成し、原因特定後に再切替日を設定
11. 運用・監視
| 項目 | 頻度 | 内容 |
| セキュリティイベント確認 | 週1回 | WAFでのブロック件数・誤検知の有無 |
| 通知設定 | 常時 | DDoS攻撃検知/オリジン到達エラー(5xx急増)/証明書期限 を情シスMLへ通知 |
| キャッシュパージ | 随時 | ニュース更新時はURL単位でパージ(全パージは原則禁止) |
| 設定バックアップ | 月1回 | DNSレコードのエクスポート、ルール設定のスクリーンショット保存 |
| 権限棚卸し | 四半期 | メンバー・APIトークン・Access許可ユーザーの見直し |
12. 変更履歴
| 版数 | 日付 | 変更内容 | 作成者 |
| 1.0 | 2026-10-16 | 初版作成 | インフラ担当 |
| 1.1 | 2026-10-23 | レート制限・Zero Trust設定を追記 | インフラ担当 |
| 1.2 | 2026-10-30 | ロールバック手順・切替チェックリストを追加 | インフラ担当 |