Post

Cloudflare は信用できない

約 9 年ぶりに Cloudflare にログインしたのだが、あまりにも不親切でアカウントがロックアウトされそうな危険が多かったのでそのことについて不満も交えながらまとめる。

Cloudflare は信用できない

はじめに

先日、Cloudflare に久しぶりにログインした。目的は所有しているドメインを Cloudflare に移管するか、または Cloudflare 側で DNS の設定をしようと考えていたからだ。結果的にそこまでする必要はないなと思ったので実際には実施しなかったのだが、その過程で Cloudflare を使用するのがかなり懐疑的になってしまったので、今回はそのことについてまとめようと思う。

目的

目的についてもう少し細かく説明する。

メインで利用しているドメインについて

noraworld.com というドメインを所有しており、このドメインは GoDaddy で管理されている。取得したのは 2018 年 7 月 1 日のことだった。これについての詳細は当時ブログに書いた。

30 万円のプレミアムドメインだった noraworld.com を取得しました - Noraworld Blog

それからずっとこのドメインをメインで使っているのだが、ブログを Ghost から Jekyll に移行した - Noraworld Blog に記載したとおり、独自ドメインの使用はなるべく控えていくという方針を取ってからは、ウェブサイトではあまり使わなくなっていった。

ただし、このドメインを取得してからすぐに、当時の G Suite、現在は Google Workspace に改名されているが、いわゆるエンタープライズ版 Google アカウントを作成し、ドメインをこのアカウントに割り当てた。以降、Google アカウントはこれをメインで使用している。つまり、Gmail がこのドメインのメールアドレスになっているので、ウェブサイトで使われなくてもずっとこのドメインは使い続けている。

リダイレクト処理をしたかった

しかし、ウェブサイトのほうはもう使っていないから、レコードをそのまま残しておく必要もないかなと思い、先日、掃除の一環として削除することを決めた。ただ、そのまま消すくらいなら今現在使われているほうのウェブサイトにリダイレクトする設定を入れておいたほうがいいかなと思った。それができるのかどうか ChatGPT に聞いたところ、どうやらレジストラ側で転送機能というものが用意されていることがあるということを知った。そして自分が使っている GoDaddy にもその機能があることがわかったのでそれを使ってみた。

しかし少し想定と違うものがあった。任意のパスに対してリダイレクト処理を行ってくれる(いわゆるワイルドカード指定ができる)ものかと思っていたが、実際にはルートしかリダイレクトしてくれなかった。たとえば、ユーザが blog.noraworld.com にアクセスしたときに noraworld.github.io/blog/ にリダイレクトする、ということはできる。しかし、blog.noraworld.com/slug にアクセスしたときに noraworld.github.io/blog/slug にリダイレクトしてくれるわけではない。あくまでルート(今回の例だと blog.noraworld.com)のみが対象とのことだった。blog.noraworld.com/slug にアクセスすると 404 Not Found になってしまう。

なるほど、では GoDaddy 以外のレジストラはどうだろうかということで、調べてみた。一時期は 15 〜 20 個近くのドメインを保有していたことがあり(これに関してもいずれブログに書きたい)管理されているレジストラもバラバラだった。その中に、Google Domains(今は Squarespace に移行されている)があった。移管するならなるべく信頼できるレジストラがいいということで、もし Squarespace に転送機能がありワイルドカードに対応しているならここに移管したいなと思った。

しかし残念ながら Squarespace もワイルドカードによる転送機能には対応していなかった。直接 Squarespace のサポートに問い合わせてできないと言われたので確実だ。ちなみに Squarespace のサポートの問い合わせは尋常じゃないくらいレスポンスが高速だった。いわゆるチャット形式(リアルタイム)ではなく、後にメールで回答が返ってくるって感じだったのだが、1 時間も経たないレベルで返信が返ってくるのでびっくりした。めちゃくちゃ助かった 🙏

Squarespace の場合も転送機能は用意されていて、さらにパスの指定もできる。だから、先ほどの例で言う blog.noraworld.com/slugnoraworld.github.io/blog/slug にリダイレクトするということは、できるにはできるのだが、あくまで単体で指定しないといけないらしい。つまり、blog.noraworld.com/$1noraworld.github.io/blog/$1 にリダイレクトと言ったように、ワイルドカード指定で任意のパスに対してリダイレクトを行う、という設定はできないという回答だった。

そんな中、自分が調べた中で、実際に自分がサービスを利用したことがあって有名なレジストラの中で、唯一これに対応していたのが Cloudflare だった。だから Cloudflare を使ってみようかなという気持ちになっていた。

以前に利用していた

実は Cloudflare を使ったのはこれが初めてではない。今から約 9 年ほど前、当時大学生だったころは、まだ GitHub Pages が HTTPS に対応していなかった。そして当時の自分は今とは違って技術に関してかなりギークだったので、なんとかして自分の GitHub Pages を HTTPS 化したいと考えていた。その手段として、Cloudflare を噛ませて間接的な HTTPS 化を実現していた。やり方に関しては当時技術記事を書いた。この記事を書いたのは 2016 年 10 月 26 日だったらしい。時代だな。

GitHub Pages + CloudFlare で独自ドメインをSSL化する - Noraworld Developers Blog

ところがそれから GitHub Pages が公式で HTTPS に対応したのでもうこのやり方は必要なくなった。それに伴い Cloudflare も使わなくなった。2016 年の 10 月からアカウントを作っていたということだから、約 9 年間、ずっと放置し続けていたということになる。

久しぶりのログイン

そして今回、また改めて使おうと思い、ログインしてみた。ログイン情報はちゃんと保管してあったので問題なくログインすることはできたのだが、使い始める前にまずは古くなっている情報を更新しようと思った。メールアドレスが古いものだったのでそれを新しくするところから始めることにした。

メールアドレスの変更で悪戦苦闘

しかし、最初はメールアドレスを変更することができなかった。どうやらメールアドレスを変更するためには、古いメールアドレスで認証を行わないといけないらしい。認証と言っても送られてくるメール内のリンク(ボタン)をクリックするという、よくあるあれのことだ。

古いメールアドレスは Yahoo.com (Yahoo! JAPAN ではない) だった。なので Yahoo.com にログインした。これもめちゃくちゃ久しぶりのログインだった。

Yahoo.com では、しばらくログインしていないとメールがすべて消えるらしい。加えて、メールも届かないようになる(凍結される)らしい。ログインしてしばらくしてから凍結を解除したよ、という連絡が来たので、これまでの間ずっとメールが届いていなかったということになる。まあそこまでメインで使っていたものではないからそんなに重要なメールは来ていなかったと思うが。

Cloudflare 側で古いメールアドレス(Yahoo.com)に対して認証メールを送ってから Yahoo.com にログインした。先述したとおり、ログインしてから少し経つまでの間はメール受信機能が凍結していたから、認証メールも届かなかった、とはじめは思っていた。しかし、凍結が解除されたと連絡があったあとも、いくら認証メールを送信しても届かなかった。

おかしい、と思い、Cloudflare に問い合わせた。こちらは Squarespace と違って少し回答が返ってくるまでに時間がかかった。

そしてちょうど 3 日前くらいに連絡が返ってきた。内容は「問題は解決した」の一言だけだった。そしてそのあと Cloudflare で再度認証メールを送ったところ、受信することができた。認証メールのボタンをクリックして認証したあとは、メールアドレスを変更することができた。もちろん新しいメールアドレスでも認証メールを送って認証した。詳細な回答は一切なかったのだが、どうやらしばらくアカウントを使っていなかったので認証メールの送信にロックがかかっていたようだ。

セキュリティの強化やバックアップや設定の確認など

その後は 2 要素認証を設定したり何に使うのかよくわからない API キーを安全な場所に保管したりするなどしてアカウントの強化を一通り行った。また、ドメインの新規取得や現在 Cloudflare で管理されているドメインの確認などは、メールアドレスの認証を行わないと確認することができなかったのだが、それも確認したところ、なにも登録されていなかった。

もう 9 年も前のことなので覚えていないのだが、当時使っていたドメインは、メインの noraworld.com を除きほとんど手放した。そしてメインのドメインは取得時期からしても Cloudflare では使っていないことは明白だ。ということは、すでに手放したドメインを使っていたということになる。なのでおそらくドメインが手元から離れたことにより DNS の管理ができなくなったから Cloudflare 側で自動的にそのドメインの設定がフラッシュしたか、あるいは単にしばらくアカウントを使っていなかったので消されたかのどちらかだろう。

結局利用しないことにした

ということで、アカウント周りの再設定と見直しは一通り済んだのだが、冒頭で書いたとおり、そこまでする必要はないと判断したので結局 Cloudflare は使わないことになった。どうせ今はもう使われていないドメインばかりだし、個人的なウェブサイトをほそぼそと公開していただけに過ぎず大したアクセスもなかったから、SEO 的な観点でもそこまで気にする必要はないと思った。

それに、ブログを Ghost から Jekyll に移行した - Noraworld Blog に書いたとおり、今後はなるべく独自ドメインを使わない方針でいくなら、リダイレクトされることを前提に独自ドメインを使用した古い URL を放置したままにしておくこと自体が恒久的な解決ではないと思ったからだ。

Cloudflare に対する不信感

そして、タイトル回収となるが、今回の一連のアカウント対応において、Cloudflare を使うのがちょっと不安だということにもなってしまった。それについて最後にまとめることにする。

古いメールアドレスにアクセスできない場合どうするの?

まず、最も懸念しているのが、古いメールアカウントにアクセスできなかった場合どうなるの? ということだ。先述したとおり、メールアドレスの変更や登録しているドメインの確認には、古い(現在の)メールアドレスで認証を行う必要がある。

どちらにおいても困ることになりそうだ。メールアドレスを変更したいのに、古いメールアカウントにアクセスできなかったら、認証しようにもメールアドレスを変更できないから詰んでしまう。それにメールアドレスの認証が必要となると、たとえ Cloudflare にログインできたとしても、登録されているドメインにもアクセスできなくなってしまうことになる。

幸い自分は大学時代くらいまでは各種アカウントのログイン情報を保管しているので今回は問題にならなかったが、これがもっと前の、たとえば中学時代とか高校時代とかに使っていたメールアドレスだったらアウトだった。登録しているメールアドレスのアカウントにログインできないだけで、連鎖的に Cloudflare でもドメインにアクセスできなくなるのは、いくらセキュリティ上の仕様だとしてもかなりリスクだと思った。アカウントに不正アクセスされるリスクよりも、自分自身がロックアウトされるリスクのほうが大きそうだ。セキュリティにガチになりすぎるとこういう仕様にしがちだが、そういうところまで考えているのだろうか? 不正アクセスを恐れて自分自身も使えなくなったら本末転倒だと思うのだが。

エラー時の対応が不親切すぎる

次に、非常に不親切ということがあげられる。まずは認証メールが届かなくなっていた件に関してだ。これに関しては、Cloudflare が実は認証メールの送信を止めていました、ってことが、こちら側では一切知ることができなかった。おかしいなと思って問い合わせをして初めて、あ、やっぱり Cloudflare が止めていたんだろうなってことがわかった。もしかしたら Yahoo.com 側がなにかおかしかった可能性だってあり得る。でもそのことについては何も教えてくれなかった。問い合わせをした今でも、あくまで推測である。

Yahoo.com 側は凍結解除したよって連絡をしたこともあって、なんとなく Cloudflare 側がおかしいなと思っていたから Cloudflare に問い合わせをしたが、もしかしたらメールサービス側に問い合わせをしてしまう可能性だってある。もちろんメールサービス側は何の問題もないから、何も問題はないと返すしかないだろう。そうなるとそちらにも迷惑がかかることになる。そういうことまで考慮して考えてもらいたい。

それに、認証メールを再送信するボタンがあるのだが、短期間で数回再送信ボタンを押すと、ロックがかかる仕様になっているようだ。そしてこれもわかりづらい。送信されたときは、ボタンが非活性になった上で「送信しました」という文言が小さく表示される。しかしロックがかかっていると、ボタンを押しても非活性にならない。そしてエラーメッセージも出ない。

ブラウザの JavaScript コンソールを開くと、ロックがかかっているときは再送信ボタンを押したときに 429 Too many requests エラーが発生していることがわかる。これは自分がエンジニアだから試したことであって、ふつうのユーザはこんなことしないと思う。それにスマホだったらできない。ふつうこういうのは UI 上(画面上)にエラーメッセージを出すものである。それすらしないんだから不親切だよなと思う。

それに、短期間に何度も再送信するって言ったって、数秒のうちに数十回とかそんな迷惑なレベルでボタンを押していたわけではない。1 分に数回とかその程度だった。それでも数回押しただけでロックがかかってしまう。挙句の果てには、それは送られていなかったわけだ。そもそも認証メール送信がロックされていた上に、その認証メールを送るリクエストを数回送ると、送ってもいないメールを送る処理そのものもロックされるという鬼◯仕様だ。

ちなみに解除されるにはそれぞれ 1 時間待つ必要があった。それが実際には Cloudflare 側で送らないようにされていましたってことも通知しないもんだから、何度もそのロック解除を待つ羽目になった。いい迷惑だ。

使い勝手が悪い上に危ない

細かいことを言えばもっとある。メールアドレスを変更するフィールドに、最初はなぜか文字が一切入力できなかった。コピペもできなかった。調べたら、自分が作った拡張機能 Video Commander が問題であることが判明した。これをオフにしたら入力できるようになった。

まあこれは自分の実装にも問題があるかもしれないが、Cloudflare 以外のほとんどのサービスでは問題ない。文字が入力できる要素にフォーカスが当たっているときはキーボードイベントの取得を無効にする、という処理になっているはずだから、Cloudflare のメールアドレスを変更するフィールドは、いわゆる HTML の <input>textarea でもなければ isContentEditabletrue でもない、自前で作った要素にしている、と推測される。もし推測があっていれば、なぜわざわざこんな設計にしているのだろうか……。理解に苦しむ。

それから、パスワードを変更するときにも一悶着あった。古いパスワードと新しいパスワードを入力して、いざ変更のボタンを押した際のページ遷移のリロードで、セッションが切れたのかなんなのか知らないが、ログアウトされてしまった。パスワードの変更はされていなかった。1Password でパスワードを管理しているのだが、すでに新しいパスワードのほうで更新して保存してしまったので、再ログインする際にパスワードが違うと弾かれてしまった。

幸い 1Password は Git みたいに履歴をたどる機能があるので、それで一個前のパスワードにリバートして事なきを得たが、古いパスワードを保管してくれないパスワード管理サービスだったらこれでログインできなくなってしまうな。しかもさっきの、メールアドレスを変更するためには古いメールアカウントで認証する必要があるという仕様と、問い合わせないと認証メールが届かない場合がある、っていうのを考えると、パスワードリセットのためのメールが届かないっていう可能性も最悪あり得るなと思った。不正アクセスされるリスクよりもアカウントがロックされるリスクのほうが大きい。

まとめ

とまあ、言い出したらキリがないのだが、こんな不親切でアカウントロックのリスクが多分に含まれているサービスに、メインのドメインを移管するのはリスクでしかないから、仮にワイルドカード転送をどうしてもやりたいと思っていたとしても、Cloudflare を利用するのは二の足を踏むことになっていただろう。リダイレクトのためだけに自前でサーバ立てるなんてことはできないから、Cloudflare 以外のワイルドカード転送ができるレジストラ、あるいは DNS の設定ができるサービスを探すことになっていただろう。

GitHub Pages を HTTPS 化するために、当時使っていたときはそんなに困ることはなかった(まあそれが初回の利用だったからってのもあるだろうが)のだが、こんなに使いづらいサービスだったなんてちょっと驚きだった。これで人気のサービスなんだからまったく参っちゃうよな。ネットを使っているときにたまに Cloudflare の認証を使っているサイトを見かけたりすることがある(DDoS 対策)のである程度信頼が置けるサービスだと思っていたが、個人的には今回の件でちょっとないなと思ってしまった。

まあ結果的には無理してリダイレクトする必要もないって結論になったからいずれにしても使うことはなかったんだけど、今後も使うことはないだろうな。一時期、Cloudflare のパブリック DNS(いわゆる 1.1.1.1)を使っていたこともあったが、今はもう使っていないし、Cloudflare のサービスともこれでおさらばだな。さようなら、Cloudflare。

もしよければページ下からこの記事のリアクションをつけてもらえるとありがたいです。このブログは収益化をしていないため、みなさんのリアクションが更新継続の励みになります。

This post is licensed under CC BY 4.0 by the author.