こんにちは、mickです。
WordPressは誰もが安全に使いたいもの。
WordPressのセキュリティ対策を考えるとき、「XML-RPC」関連の機能「xmlrpc.php」を無効化する話があります。
今回の記事では、WordPressのxmlrpc.phpとセキュリティ対策について紹介しいま紹介しています。
実際、具体的にはどうすればいいかも書きました。
xmlrpc.php がよくわからない=無効化する
WordPressのxmlrpc.phpがよくわからない
そういう場合は、 無効化一択 です。
ここからxmlrpc.phpやセキュリティ対策について書いていきます。
XML-RPCとxmlrpc.phpってなに?
XML-RPCは遠隔操作(いわゆるリモコン)をする仕組みのこと。
- 遠隔操作をする仕様がRPC(リモートプロシージャコール)
- XMLという書式を使う
合わせて「XML-RPC」と呼ぶわけ。
外からは、この「XML-RPC」を使ってWordPressを操作していきます。
⇒ e-Words「RPC 【Remote Procedure Call】 リモートプロシージャコール / 遠隔手続き呼び出し」
その外からWordPressを操作するときの窓口が「xmlrpc.php」です。
xmlrpc.phpを使うケース
WordPressの利用者がxmlrpc.phpを使うケースは大体3つ。
- スマホアプリ経由などリモート投稿する
- Microsoft Wordから直接投稿する
- ピンバックとトラックバックを使う
もしこれらのどれかを使っているとxmlrpc.phpを無効にするか検討が必要。
ただ、これらを使えなくしてもxmlrpc.phpは無効にするのをオススメしてます。
実際、私はどれも使ってないし、セキュリティ重視でxmlrpc.phpを無効化しています。
それぞれ説明していきます。
スマホアプリ経由などリモート投稿する
JetPackとWordPressのアプリを使ってWordPressのリモート投稿をするときには、xmlrpc.phpを使っています。
WordPress
Automattic無料posted withアプリーチ
Microsoft Wordから直接投稿する
実はMicrosoftの文書編集アプリ Word からWordPressに直接投稿することができます。
次のWebサイトに詳しく設定方法が載っています。
その設定の過程で「xmlrpc.php」を使っているのがわかります。
⇒ 【これは便利】ワードプレスにWordからコピペせずに直接投稿する方法!
ピンバックとトラックバックを使う
WordPressの機能にあるピンバックやトラックバックは、xmlrpc.phpを使ってます。
xmlrpc.phpを無効化したいワケ=攻撃の窓口になる
xmlrpc.phpは、外からWordPressを操作するための窓口。
そのため、外からWordPressを攻撃する窓口にもなってしまいます。
実際にxmlrpc.phpは、次の2つの攻撃に利用されています。
- xmlrpc.phpに大量アクセスをしてサーバーをダウンさせる
- xmlrpc.phpにブルートフォースアタックをかけて乗っ取る
xmlrpc.phpに大量アクセスをしてサーバーをダウンさせる
xmlrpc.phpは、xmlrpc.phpに大量アクセスをしてサーバーをダウンさせるのに使われます。
もし、自分のWebサイトが急に遅くなった、経験があるならこれを疑っていいです。
専門的には、Dos攻撃(Denial of Service attack)といいます。
xmlrpc.phpにブルートフォースアタックをかけて乗っ取る
xmlrpc.phpは、WordPressを乗っ取る攻撃に使われます。
xmlrpc.phpを使うとWordPressのログイン認証(ユーザーIDとパスワードを使って)が行われます。
これをWordPressの乗っ取りができるまで繰り返す。
これが総当たり攻撃(ブルートフォースアタック)です。
削除できないxmlrpc.php
xmlrpc.phpは、削除してもあまり意味がありません。
理由は、WordPressを更新するとxmlrpc.phpも元に戻るからなんです。
WordPressの更新するごとに、xmlrpc.phpを削除するのは大変。
基本、人間は忘れる生き物
削除し忘れるというミスは、避けたいです。
具体的な対策:.htaccess ファイルを編集する
一番シンプルで確実な方法は、.htaccessファイルを編集する方法です。
次のコードを.htaccessファイルに追加します。コピペOKです。
# xmlrpc.phpへのアクセスを無効化する
<Files xmlrpc.php>
Order Allow,Deny
Deny from all
</Files>
もし、自分がWordPressにアクセスするIPアドレスがわかるなら、自分だけxmlrpc.phpにアクセスすることができるようにもできます。
# xmlrpc.phpへのアクセスを無効化する
<Files xmlrpc.php>
Order Deny,Allow
Deny from all
# xmlrpc.phpにアクセス許可できるIPアドレスがある
Allow from XXX.XXX.XXX.XXX
</Files>
自分だけがxmlrpc.phpにアクセスできるIPアドレスを用意できる場合は、xmlrpc.phpを無効化しつつ、WordPress.comのアプリなどでリモート投稿が使えるわけです。
無効化の確認
xmlrpc.phpにアクセスしたとき、次のようにxmlrpc.phpにアクセスができなければ無効化できています。
もし次の画像のままなら、まだ無効化できいません。
“BEGIN WordPress” から “END WordPress”の外に追加する
WordPressの.htaccessの編集をするときの注意点です。
“BEGIN WordPress” から “END WordPress”で囲まれた間には追記しないようにします。
理由は、WordPressが書き換える可能性があるから。
# “BEGIN WordPress” から “END WordPress” までのディレクティブ (行) は
WordPressの.htaccessコメント
# 動的に生成され、WordPress フィルターによってのみ修正が可能です。
# これらのマーカー間にあるディレクティブへのいかなる変更も上書きされてしまいます。
All in One SEOプラグインを使っていれば.htaccessエディターが使える
SEO対策の鉄板プラグインのひとつ All in One SEO。
これを導入していれば、FTPなんて使わずにWordPressの管理画面で.htaccessの編集が可能です。
「All in One SEO」>「ツール」>「.htaccessエディター」
ただ、環境によっては使えないことがあることを確認してます。
例えば、このWebサイト one euro ではこのエディターが使えませんでした。
でも自分の持っているWordPressのテストサーバーでは使えました。
nginx系のサーバーのとき
自分が使っているサーバー(レンタルサーバー)が、nginx系なら、.htaccessファイルはありません。
代わりに、サーバー側での設定が必要です。
nginx.configに次を追加します。もちろんコピペOK。
# xmlrpc.php を無効化して攻撃を避ける
location ~ xmlrpc.php {
deny all;
access_log off;
log_not_found off;
return 444;
}
リターンコード444は、nginx系サーバー専用で応答なしのリターンコード
上のコードのリターンが「444」と見慣れないので調べてみました。
通常は「403」や「404」を返したりするからです。
nginx系サーバーのリターンコードで応答なし
つまり、xmlrpc.phpにアクセスした方は何も返ってこないのでそれ以上の処理のしようがなくなります。
nginx系のサーバーを使っている場合で、不要な応答をしたくない場合は「444」を使います。
⇒ 参考「nginxでIPフィルタを設定した上で無許可IPにはステータスコードを返さない」
まとめ。
WordPressセキュリティ対策としてxmlrpc.phpを無効化する方法を紹介しました。
ひと手間だけれど、.htaccessに数行追加するだけでセキュリティ対策になるのでやる価値アリです。
ただ、そのとき自分のサーバー(レンタルサーバー)がApach系なのかnginx系なのかだけ確認してから手を入れてください。
どうしてもわからないときは、プラグインを使えば大丈夫です。
セキュリティ対策の鉄板プラグインの SiteGuard WP Plugin にも無効化する機能があります。
記事を読んでくれて嬉しいです。
今日もありがとうございました。
初稿 2021/01/18