運営サイト全てに導入している「Wordfence Security(以下、「Wordfence」と表記)」で、昨年末にトラブルが発生しました。海外製品だからなのか、Wordfenceのトラブル事例とその対処法の情報は少なく、対応に苦労しました。そこで、今回発生したトラブルと復旧までに行った対策についてシェアします。
トラブル内容(問題点)
◎一部ドメイン/サブドメインで、常にWAF(Web Application Firewall)の警告が出ている状況。
対象のドメインは、親ドメイン(以下、「サイトA」と表記)とサブドメイン2つ(以下、「サイトB」「サイトC」と表記)の計3サイトを運営しています。Wordfenceは全てのサイトに導入済みです。ちなみに、マルチサイトにはしていません。
Wordfenceは、WAF設定の異常を検知すると管理画面に下図のようなエラーメッセージを表示して、WAFを最適化するように要求します。
エラーメッセージの「CLICK HERE TO CONFIGURE」ボタンをクリックすると、このようなポップアップが表示されます。
ここで「DOWNLOAD .HTACCESS」や「 DOWNLOAD USER.INI」ボタンをクリックしてバックアップを取得し、「CONTINUE」ボタンをクリックすれば、普通は最適化が完了します。
ところが、今回の事象では常に 「サイトA」「サイトB」「サイトC」のうち2サイトからエラーが出ている状態でした。何度対処しても、エラーは解消しませんでした。
トラブル詳細
Wordfenceを導入すると、導入したサイトごとに「wordfence-waf.php」というファイルが生成されます。Wordfenceは、「.htaccess」、「.user.ini」、または「php.ini」ファイルに生成した「wordfence-waf.php」を参照するよう設定します(サーバーにより異なる。エックスサーバーの場合は「user.ini」)。
今回の例で言えば、正しい挙動は下記の通りです。
- サイトAの「user.ini」はサイトAの「wordfence-waf.php」を参照する。
- サイトBの「user.ini」はサイトBの「wordfence-waf.php」を参照する。
- サイトCの「user.ini」はサイトCの「wordfence-waf.php」を参照する。
ところが、警告が出続けているサイトを調べてみたら、3サイトとも「user.ini」の内容は全く同じでした。こんな感じです。
- サイトAの「user.ini」はサイトCの「wordfence-waf.php」を参照する。
- サイトBの「user.ini」はサイトCの「wordfence-waf.php」を参照する。
- サイトCの「user.ini」はサイトCの「wordfence-waf.php」を参照する。
試しにサイトAのWAFを最適化し、その後サイトA/B/C全ての「user.ini」を確認してみました。するとサイトB/サイトCの「user.ini」もサイトAの「wordfence-waf.php」を参照するように書き換えられて(上書きされて)しまうことが分かりました。
- サイトAの「user.ini」はサイトAの「wordfence-waf.php」を参照する。
- サイトBの「user.ini」はサイトAの「wordfence-waf.php」を参照する。
- サイトCの「user.ini」はサイトAの「wordfence-waf.php」を参照する。
この状況下では、正しい挙動を示すのはサイトAだけです。その結果、今度はサイトBとサイトCがエラーを出す。サイトBを修正すれば、今度はサイトAとサイトCがエラーを出す…この状況が延々と続いていました。
ちなみに、Wordfenceが「user.ini」に書き込む内容は、下記の通りです。
; Wordfence WAF
auto_prepend_file = '/home/(サーバーの第1階層)/********.com(親ドメイン)/public_html/********.com(サブドメイン)/wordfence-waf.php'
; END Wordfence WAF
対策
何度書き換えてもダメなので、正常動作している他のドメインの「user.ini」をダウンロードし、比較してみました。その結果、記載内容が異なる箇所が数か所あることを発見。
そこで正常動作しているドメインの「user.ini」をサイトA用に記述を修正、アップロードしました。この時点ではサイトB/サイトCもサイトAの「wordfence-waf.php」を参照するよう上書きされます。
次に、WordfenceでサイトBのWAFを最適化し、各サイトの「user.ini」を確認しました。すると、サイトAは上書きされず、元の情報を保ったままになりました。しかし、サイトCはサイトBの 「wordfence-waf.php」を参照するよう上書きされました。 これで、各サイトの「user.ini」に問題があることが特定出来ました。
そこで、サイトAにアップした「user.ini」をサイトB/C用に一部修正してアップロード。これでエラー表示が無くなりました。1週間ほど経過を見ましたが、エラー表示は出ておらず、WAFのステータスも正常です。よって問題解決と判断しました。
ちなみに差し替え方法は一般的な「元のファイルの名前を変更」→「新しいファイルをアップロード」→動作確認→問題なければ旧ファイルを削除…の流れです。
トラブル発生の原因(推測)
何故こんなことが起きたのか?と記憶を辿ったのですが、確実な答えは分かりません。
記憶が定かではありませんが、何度もエラーが出ていたのでWAF最適化の画面で下図の「OVERRIDE(上書き)」ボタンをクリックしたような気がします(デフォルトは「INCLUDE」)。恐らく、これが原因だと思われます。
また、今回の事象がトラブルだとすぐに認識出来なかった理由は、下記2点にあります。
- 理由1:画面が真っ白になる、管理画面から締め出されるなどの致命的なエラーが発生しないこと。
- 理由2:不具合が発生していなくても、WordfenceからWAFの最適化要求というのはたまに出るものだから。
これらの理由により、明らかな異常だと悟るまでに時間を要してしまいました。
Wordfence WAFのトラブル発生時に有効な施策
操作ミスにより発生する不具合だとすれば、2度と発生しないような対策は出来ません。なので、再発したら即復旧させるために必要なポイントをまとめておきます。
①バックアップの取得と保存。
今回の不具合を解決できたのは、正常動作している「user.ini」が手元にあったからです。つまり、バックアップさえ取っていれば問題は解決します。
正常動作しているドメイン/サブドメインの「user.ini」をバックアップし、保存しておくようにして下さい。
都度手動でバックアップを取るのは面倒なので、バックアッププラグインを使った定期取得がお勧めです。
②「auto_prepend_file」の確認
何かおかしいと思ったら、まず最初にやることは「auto_prepend_file」がどこを参照しているかの確認です。確認するには、下記の順番で進めば(クリックすれば)OKです。
- Wordfence の「Tools」メニューをクリック
- 「Diagnostics」タブをクリック
- 「Other Tests System configuration, memory test, send test email from this server.」をクリック
- 「Click to view your system’s configuration in a new window(opens in new tab)」 をクリック
すると、新しいタブ(Wordfence System Info)が起動します。
起動したら「auto_prepend_file」を検索し、どのWordfence-waf.phpを参照しているかを確認します。
③不具合内容の確認と対処
参照している場所(パス)がおかしければ、ファイルマネージャー等で「user.ini」にアクセス。念の為、再度 「user.ini」に記載されている「Wordfence-waf.php」のパスを確認します。パスがおかしければ、user.iniを差し替えます。
Wordfenceダッシュボードに戻り、WAFメニューを確認しましょう。ファイルを差し替えていれば、最適化を要求されるので、最適化を行います。エラーが出なければOKです。
参考情報
Wordfence WAFの最適化に関する公式のドキュメンテーションは下記を参照下さい。
Firewall Optimization Troubleshooting:Wordfence.com
Wordfenceの概要やメリットについて知りたい場合は、下記コンテンツをご覧下さい。
Wordfence:無料で得られる4つのメリットを今すぐ活用しよう:DIY WordPress Site
集客やセールスのスピードを上げたい。精度を上げたい…とお考えなら、出来ることは自分でやるのが一番です。 全てが難しい訳ではありません。あなた自身でやれることは、想像以上に多いものです。
当サイトのコンテンツは、あなた自身が出来る内容にフォーカスしています。 これらを活用して、売れるウェブサイトを作り上げて下さい。
もし、「そう言われても、本当に自分でやれるの?」と感じているのなら…STRATEGY SUPPLIERが運営する「Output STUDIO」に参加して下さい。
「Output STUDIO」は売れるサイトを作り・育てていくための訓練場であり、コミュニティです。 興味をお持ちなら、下のボタンをクリックして詳細をご確認下さい。