WordPressブログで403エラーが出たときの対処法と予防法(ロリポップサーバ)
先日、友人のWordPressサイトが「403 ERROR FORBIDDEN
※指定されたページ(URL)へのアクセスは禁止されています。」
というエラーで、突然見られなくなりました。
友人が使っているのは、ロリポップ!レンタルサーバ。
エラーが出て閲覧できなくなったのは、一般のブログ閲覧ページ、
WordPressのログインページ、管理画面(ダッシュボード)の
ワードプレスに関するすべてのページ。
原因を特定して復帰するまでに、しばらく時間がかかりましたので、
備忘録もかねて、再発防止策を含め、記事にしておこうと思います。
◆発生状況
WordPressの管理画面、テーマの編集からCSSを編集し、更新ボタンを
押すと更新エラーが起きて、403エラーの画面に跳ばされたということです。
◆原因の推定・・・WAFの誤検知?
ロリポップレンタルサーバにでは、現在、WAFという不正なアクセスに
よるサイトの改ざんなどをブロックする機能を標準装備しています。
■WAF(ウェブアプリケーションファイアウォール)〜ロリポップ
不正なアクセスをブロックし、正当なユーザーのアクセスのみ
通過させるはずの機能なのですが、これが時々、誤検知を起こして
管理ユーザーがアクセス出来なくなるという報告が見られます。
どうしてこんなことが起こってしまうのでしょうか?
WordPressを簡単インストールで設置した方の中には、ワードプレスの
フォルダの中を見たことが無い、という方もいらっしゃるのではないかと
思いますが、一度FTPで、中身を見てみてください。
たくさんのフォルダのなかに、たくさんのPHPファイルがあります。
普段、管理画面から操作している時は意識していませんが、これらの
多数のファイル(とデータベース)が組み合わせられ、呼び出され、
WordPressサイトができあがり、表示されています。
WordPressの管理画面から、設定の変更などの操作をすると、
サーバにあるPHPファイルの書き換えが自動的に起こります。
これが、WAFで、外部からPHPファイルに不正な書き換えがあったと
見なされ、アクセス制限をかけてしまうことがあるようです。
■PHPやCGIでプログラムの編集をすると403エラーが表示されます。
〜よくある質問〜ロリポップ
◆解決方法・・・パーミッションの変更
WAFが不正アクセスを検知するとロリポップサーバでは、.htaccess
ファイルが自動生成されて、ログインページ(wp-login.php)への
アクセス制限がかかり、WordPressのログイン画面に403エラーが
表示されるようになっています。
■WordPressにログインしようとすると403エラーが表示されます。
〜よくある質問〜ロリポップ
そこで、この自動生成された.htaccessのwp-login.phpのアクセス
制限の記述の中に、自分のIPアドレスでのアクセスを許可するように
書き加えてやれば、めでたしめでたし、となるはずでした。
が、今回は、ログイン画面だけではなく、なぜかブログ部分もすべて
見られなくなっている、と、いうことで、この.htaccessファイルだけ
ではなく他の部分も修正してあげなくてはいけません。
403エラーはファイルは存在しているけれど、外部からアクセスを
禁じている状態。パーミッションがおかしいんじゃない?
と、考えたタイミングで判明したのが、ワードプレスのフォルダの
パーミッション(属性)が、驚くことに「770」になっている、
ということでした(友人は属性変更した覚えが無い)。
最初の7は、自分が「読み書き実行」可能、次の7は、
同じ共用サーバを使っているグループの人が「読み書き実行」可能、
最後の0は、一般閲覧者が「読み書き実行」が何もできない、という
状態です。これではサイトが見えないわけです。
ディレクトリ(フォルダ)のパーミッションの推奨設定は「705」。
FTPでパーミッションを変更して、無事にログイン可能になり、
ブログの閲覧もできるようになりました。
■パーミッションの設定を正しく行ってください〜ロリポップ
◆対処法(結論)と再発防止策
そもそも、サイトに403エラーが出た時には、まずファイルとフォルダの
パーミッションを確認することをまず最初にやらなくてはいけなかった
のだ、と振り返って気づきました。
自分がパーミッションを変更していなくても、ファイルやフォルダの
属性が変わってしまうことなんてあるの?と思いますよね。
あるある、大アリなんです。サーバに大規模アタックを受けたときや
サーバのセキュリティを見直そうとして、サービス(サーバ)管理側で
ファイルやディレクトリのパーミッションを書き換えてしまうことが
少なからずあったりします。
短時間に大量アクセスが発生し、サーバに著しく負荷がかかった時に、
突然、インデックスページ(index.php)のパーミッションを「000」に
書き換えられて、アクセス不能になった方の例も見つけました。
事後にロリポップからご了承くださいとのメールが来たとのことですが、
仕方ないにせよ、ちょっとひどい話ですよね。(リンクは貼りません)
ということで、ワードプレスで403エラーが起こったら、まず、
パーミッションが適切であるかどうか調べてみる。(自分に覚えが無くても)
次に、ロリポップサーバであれば、新しくできた.htaccessファイルが
ないか調べ、自分のIPアドレスでアクセス出来るように書き換える。
エラーを起こさないためには、PHPファイルの書き換えが起こるような
操作をダッシュボードでするときは、あらかじめWAFを切っておく、
ということが必要。
このあたりに気をつけていれば、今後は403エラーも起こしにくく、
起こっても解決までの時間を少なくできるかな、と思ったしだいです。
【関連記事】
◆WordPressの管理画面が403エラーになった時の対処・解決方法
〜 Area5.net
◆.htaccess の Allow と Deny 〜アクセスの許可と制限〜
〜 Big Bang
コメント
こんばんは✩
復帰するまでに結構時間がかかってしまいました。
かこさんの助力がなかったら、挫折していたかもしれません。
今回WAFの設定を無効にする所までは行きつけましたが、
無効にしてもエラーが回避されなかったので、
全く別の所に原因があるのかと思って、
WordPressをマルチサイト化を解除しようとしたり、
今思うと無駄な努力ばかりしていました。ほぼ徹夜までして頑張っちゃって…
wp-config.phpを編集する時に、パーミッションの変更は何度かしていましたけれど、
まさかパーミッションが絡んでいるとは考えもしなかった、と言うか、
パーミッションの役割をちゃんと理解していなかったので、
考えが及びませんでした。
かこさんのパーミッションの属性の説明、とても分かり易いです。
私にも理解出来ました。ありがとうございます。
自分で変更していないのに設定が勝手に変わってしまったり、サーバー側が変更
したりする事を、私は『ナウでヤングなオヤジの仕業』と呼んでいます。
私は変えてないですもん。オヤジの仕業っぽい気がしてなりません。
でもロリポおじさんは好きですよ~[Em140]
最終的にはサポートに連絡ついたら速攻解決でしたもんね。
下手にあれこれするより、サポートに相談するのが
一番かもしれないと思ったりしました。
お疲れさまでした〜。
こんばんは[Em98]
サポートからの回答をただ待っているのも辛いと思います。
色々調べて勉強にもなりました。
テーマを削除して、思わぬ発見もありました。
私のブログはマルチサイト化で変な構造になっているみたいで
幾つか作ったブログの中で、blog1だけが仲間外れなんです。
他はブログはテーマをインストールし直したらすぐ反映されたのに、
blog1だけは違いました。
一緒にエラーになったのに、やぱり仲間外れです。
構造を見直してみようと思っています。
私もきっちり把握しているわけでは全然ないのですが、
一度、じっくりディレクトリの中身を眺めてみると
いいと思いますよ。いろいろ気づくことがあるかもです。
はじめて中をのぞいた頃は、うげげ、わけ分からん、と思った
ものですが、今は私もそんなに恐れずに見られるようになりました。
分からないまま適当にいじっちゃったら、それこそ大変なことに
なりますけどねw
マルチサイトは、単独サイトより、やっぱり難しいと思いますよ。
ダッシュボードも何かと違うので、Google先生に聞いても
同じように対処出来なかったりしますしね。
.htaccessの設置場所にもちゃんと意味があるんですよ。
ファイルのあるディレクトリ内のファイル、その下層の
ディレクトリとその中のファイルのアクセス権などに関わって
きますけれど、上のディレクトリには影響しません。
ファイル一つ一つのパーミッションにも意味があって、
変えないと動かないプラグインもあったりしますしね。
プラグイン同士も相性の悪いものもあるから、闇雲に
追加していくと動かなくなったりしますし。
なーんて、偉そうに言っていますけれど、私も絶賛勉強中。
分からないコトだらけです。
トラブルに対応する時は、何のために、どこに対して何を
やっているのか、それは意図した効果が出ているのか、一つ一つ
確かめながら落ち着いてやっていかないと、それこそ
わけ分かんないことになっちゃいますよね。自戒をこめて。
ありがとうございました
どういたしまして♪