© Jannis Andrija Schnitzer – “I had internet access anyway.” – Creative Commons: Attribution, Share Alike

先日このブログ(WordPress)にログインしようしたら、白い画面に403 – forbiddenと表示される状態になってしまった。管理画面が表示できないだけで、ログインページ、記事ページなどは普通に閲覧できるという摩訶不思議な状態。最初はサーバーが混雑状態なのかと疑ったが、よくよく考えて見れば403は「アクセス禁止」であって、ビジー状態は通常503 Service Unavailableを返すべきなので原因は他にありそうだ。

海外からのログインは禁止?

原因を探るためにブラウザのインスペクタを開き、ネットワークタブを閲覧してみると、面白いことに気がついた。このブログ、というかドメインはCloudFlare経由でホストされているんだけど、日本からアクセスしているにもかかわらず、海外のエッジサーバーにつながっていた。なお、エッジサーバーの情報はレスポンスヘッダのCF-RAYフィールドの値の末尾、3文字の空港コードで分かる。通常であれば、日本からの接続は東京サーバー(NRT = 成田空港)や大阪サーバー(KIX = 関西国際空港)なのだが、この時はLAXつまりロサンゼルスのサーバー経由でブログに接続されていた。

cloudflare_response_header
NRTは成田空港の空港コード。ところで成田は千葉では?

つまり、自分(日本) →CloudFlareのロサンゼルスサーバー→このブログ(のサーバー、日本)という経路。ここでピンと来た。恐らく、ウェブアプリケーションファイアウォール的な何かが作用して、海外ipからのログイン要求を許否しているからでは?つまり、自分は日本のIPから接続していても、CloudFlareのせいで海外IPから接続しているようにブログからは見えるため、WordPressログインに問題が起きている可能性があるのだ。これは、ブログのトップページなどが通常通り閲覧できる状況にも説明がつく。(公開しているページに世界中からアクセスできるのは当たり前だから)

しばらく放置で解決

原因の目処が付いたところで、解決策。日本からのアクセスが海外のCloudFlareのエッジサーバーに繋がるのは、日本のエッジサーバーの付加が高まっているなど、一時的なものが要因と思われる。つまり、ちょっと放置していればまた日本のエッジサーバーに繋がるようになるので具体的な対処法なんて無い。実際、私も10分ほど待ってから再度調べてみると東京のエッジサーバーに繋がるようになり、普通にWordPressにもログインできようになった。やはりIPに起因する問題だったみたいだ。ところで、ファイアウォールなんて設定した覚えもないし、レンタルサーバーが勝手に遮断したのだろうか?例えば、さくらインターネットではデフォルトでこの類のIPフィルタが設定されている。まあ、私が使っているのはさくらインターネットではないのだけど。