Ghostのログイン画面にCloudflare Zero Trustを導入した話

※本記事は広告を含みます

はじめに

ブログを運営していると、避けて通れないのが「ログイン画面のセキュリティ」問題。例えばWordPressであれば、「/wp-login.php」または「/wp-admin」を末尾につけるとログイン画面に入れます。そしてこれは、なにも設定しなければ、誰でもログイン画面にアクセスできる状態になるということです。

筆者ももともとWordPressを使っていたので、ログインURLを変更したり二段階認証を入れたり、ファイアウォールを設定したりという策を講じてきました。

そして最近、筆者はWordPressからGhostというブログCMSに乗り換えました。

GhostはWordPressよりだいぶブログ執筆に特化しており、触ってて楽しいCMSではあるんですが、実はGhostもWordPressと同じように、ログインURLが指定のルール(/ghost)と決まっています。URLさえ知っていれば誰でもログインの試行ができてしまうんですよね。

そこで今回導入したのが「Cloudflare Zero Trust」です。これを置くと指定のURLにアクセスした際に、通常ログインとは別に認証が割り込み、二段階認証を実施することができます。

今回は、Ghostのセキュリティを一段階上のステージへ引き上げる「Cloudflare Zero Trust」の導入手順やそのメリットをシェアしようと思います。

Ghostのログイン画面は誰でもアクセスできる!

ブルートフォース攻撃の標的になる

WordPressに比べれば標的にされることは少ないとはいえ、Ghostであっても油断は禁物。https://ドメイン/ghost にアクセスすれば、誰でもログイン画面に到達できてしまいます。
ボットによる総当たり攻撃(ブルートフォース攻撃)を受け続けると、サーバーに無駄な負荷がかかるだけでなく、万が一パスワードが突破された時は改ざん等のリスクがあります。

基本的にCMSを利用する際は、なにかしらの対策を実施しなければ、普通に攻撃対象になると思ってよいでしょう。もっとも、どんなに対策したところで攻撃はされるんですけどねw

ID/パスワードだけの認証は非推奨な時代

もちろん、Ghostのパスワードを複雑で長いものにしておけば簡単には突破されません。しかし、自分自身の利便性を考えると、毎回複雑なパスワードを手入力するのは現実的ではありません。パスワードマネージャーを使っても、総当たり攻撃そのものを防げるわけではないため、根本的な解決には至っていないですし。ID、パスワードは漏洩するものです。しゃあない。

とにかく、IDとパスワードだけの認証では突破されるリスクが高くなりますよ、というお話です。

Cloudflare Zero Trustを召喚

最強なのはIP制限

特定の場所(管理画面など)を守るなら「IPアドレス制限」が一番早い方法です。これであれば、自分のPCからしかログインURLへのアクセスを許可しない、ということができますからね。
でも、PCで作業したり、移動中にスマホで下書きを直したりする場合、IP制限はかなり面倒くさくなります。しかも最近はVPN使うことが多いので、IPころころ変わるし、自分以外の人が同一IPになることもありますしね。IP制限をするのはなかなかハードルが高い時代になってきてる気がします。

その点、Cloudflare Zero Trust(Access)がスマートなのは、「どこからアクセスするか」ではなく「誰がアクセスしているか」で判断してくれるところ。端末より広い範囲をカバーでき、IP制限より設定に融通もききます。

いろんな方法で「自分だけ」が通れる道を作る

Cloudflare Zero Trustを使うと、指定したURL(今回は /ghost 以下のパス)にアクセスした瞬間に、Cloudflare側の認証画面が差し込まれます。
認証方法は、あらかじめ許可しておいたメールアドレスへのPINコード送信や、Googleアカウント、GitHubアカウントでのシングルサインオン(SSO)経由などど自分で選択でき、その認証を通過すると、そいつものGhostのログイン画面が現れるイメージになります。

【実践】Ghost × Cloudflare Zero Trust 導入のステップ

ここからは、実際にCloudflare Zero Trustを使ってGhostの管理画面を保護する手順を解説します。(※前提として、ドメインのネームサーバーがCloudflareに向いている必要があります)

1. Cloudflare Accessの設定(Applicationの追加)

  1. Cloudflareのダッシュボードから「Zero Trust」の画面を開きます。
  2. 左メニューの Accessコントロール > アプリケーション へ進み、「アプリケーションを追加する」をクリックします。

Pasted image 20260226201314.png

  1. アプリケーションのタイプは「Self-hosted」を選択。

Pasted image 20260226201521.png

  1. アプリケーション名(例:Ghost Admin)を入力し、保護したいサブドメインとパス(例:yourdomain.com/ghost)を指定します。

Pasted image 20260226201832.png

2. ポリシーの設定:メール認証 など

次に、このURLにアクセスできる「条件(ポリシー)」を設定します。

Pasted image 20260226202527.png

  1. ポリシー名(例:Allow Admin)を入力します。
  2. Actionを Allow に設定。
  3. Include(対象者)の条件で、Emails を選び、自分のメールアドレスを入力します。

Pasted image 20260226202113.png

(※事前に Settings > Authentication から、GoogleやGitHubの連携を設定しておくと、よりスムーズなログインが可能になります。今回はメールアドレスにしてます)

設定を保存すれば、準備は完了です。うん、そこそこ面倒かも。

3. 動作確認:/ghost にアクセス

ブラウザのシークレットウィンドウを開いて、自分のブログの /ghost にアクセスしてみてください。
いつものGhostのログイン画面の代わりに、Cloudflareの認証画面が表示されるはず!。ここで設定したメール認証やログインをパスしない限り、Ghostのログイン画面は表示されなくなります。

イメージはこんなん↓とてもシンプルですね。

Pasted image 20260226202347.png

導入してわかったメリットと、ちょっとした注意点

スマホからの更新も快適?

IPアドレスに縛られないため、外出先からでも、スマホの4G/5G回線からでも、一度Cloudflare認証を通せば普段通りにブログを更新できます。認証回数が増えるものの、慣れてくればそんなに違和感はないと思います。下書きはメモアプリでやって、更新だけGhostにログインして行う、という運用もありですね。なんなら筆者はそっちの方が多かったりしますし。

セッション持続時間のベストプラクティス

Cloudflare Accessのセッション期間(Session Duration)は目的に応じて調整しましょう。
デフォルトの24時間でも良いですが、個人ブログで自分しか使わないのであれば、1ヶ月(1 month)などに設定しておくと、毎回PINコードを入力する手間が省けてストレスフリーです。セキュリティと利便性のバランスを見て決めるのがおすすめです。

設定により、何かが動かなくなることもある

筆者もこれにより自作のブログ投稿ツールがエラーになったり、ブログのいたるところでエラーになったりました。この辺りも設定でどうにかなるんですが、慣れていないと時間がかかってしまうと思います。導入後は、普段行っている操作が変わらず実施できるかどうかを確認したほうがいいですね。

まとめ:セキュリティは「面倒」だけど、向き合うべき

セキュリティ対策と聞くと「設定が難しそう」「毎回のログインが面倒くさくなりそう」と思われがちです。まあ実際その通りだったりします。筆者も正直この辺りに関して精通している訳でもないですし。底が見えないのがセキュリティ周りの怖いところですね。

ただ、何もやらないよりは、なんかしらやったほうがいいのは間違いありません。今回はGhostでしたが、これはWordPressなどでも同じです。以前こんなのも書いてます↓

【プラグインのみ】Wordpress利用時にやっておくべきセキュリティ対策
https://www.iris-on-bookrest.info/880/

WordPressでCloudflareを使う時にやっておくべき設定まとめ
https://www.iris-on-bookrest.info/3161/

Ghostを愛用しているブロガーは日本ではあまり多くはないかも知れません。ただ、一定数は存在するはずですし、きっと誰かがこの記事にたどり着くこともあると思っています。そうでなくとも、せめていま一度ログイン認証を見直す機会になれば。
二段階認証はとりあえずやっとこう。慣れればそこまで面倒でもないですしね!