前書き
WordPressは人気のある強力なCMS(コンテンツ管理システム)プラットフォームです。 その人気は、WordPressサイトを特別に標的とする悪意のあるトラフィックの形で望ましくない注意を喚起する可能性があります。
保護または最適化されていないサーバーが、少量の悪意のあるトラフィックを受信した後に問題またはエラーを経験する可能性がある多くの例があります。 これらの攻撃により、システムリソースが枯渇し、MySQLなどのサービスが応答しなくなります。 これの最も一般的な視覚的合図は、「データベースへの接続エラー」メッセージです。 Webコンソールには、「 Out of Memory」エラーも表示される場合があります。
このガイドでは、Ubuntu 14.04システムでのXML-RPC攻撃からWordPressを保護する方法を説明します。
前提条件
このガイドには、次のものが必要です。
-
Ubuntu 14.04ドロップレット
-
sudo特権を持つ非ルートユーザー(https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-14-04[Ubuntu 14.04での初期サーバーセットアップ]は、このセットアップ方法を説明しています。 )
Ubuntu 14.04ドロップレットにWordPressが既にインストールされていると仮定します。 WordPressをインストールする方法はたくさんありますが、一般的な方法は2つあります。
このチュートリアルのすべてのコマンドは、非rootユーザーとして実行する必要があります。 コマンドにルートアクセスが必要な場合は、先頭に「+ sudo +」が付きます。 Ubuntu 14.04での初期サーバー設定では、ユーザーを追加してsudoアクセスを許可する方法について説明しています。
XML-RPCとは何ですか?
WordPressはhttps://en.wikipedia.org/wiki/XML-RPC[XML-RPC]を利用して、https://codex.wordpress.org/XML-RPC_WordPress_API [functions]をリモートで実行します。 人気のあるプラグインJetPackとWordPressモバイルアプリケーションは、WordPressがXML-RPCを使用する方法の2つの優れた例です。 この同じ機能を利用して、短時間で数千のリクエストをWordPressに送信することもできます。 このシナリオは、事実上、ブルートフォース攻撃です。
XML-RPC攻撃を認識する
XML-RPC攻撃を認識する主な2つの方法は次のとおりです。
}
Webサーバーのログファイルの場所は、実行しているLinuxディストリビューションと実行しているWebサーバーによって異なります。
Ubuntu 14.04上のApacheの場合、次のコマンドを使用してXML-RPC攻撃を検索します。
grep xmlrpc /var/log/apache2/access.log
Ubuntu 14.04のNginxの場合、次のコマンドを使用してXML-RPC攻撃を検索します。
grep xmlrpc /var/log/nginx/access.log
上記のコマンドの結果、次の例のように多くの行が出力される場合、WordPressサイトはXML-RPC攻撃を受けています。
access.log
111.222.333.444:80 555.666.777.888 - - [01/Jan/2016:16:33:50 -0500] "POST /xmlrpc.php HTTP/1.0" 200 674 "-" "Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)"
この記事の残りの部分では、さらにXML-RPC攻撃を防ぐための3つの異なる方法に焦点を当てます。
方法1:Jetpackプラグインをインストールする
理想的には、XML-RPC攻撃が発生する前に防止する必要があります。 WordPressのhttps://wordpress.org/plugins/jetpack/[Jetpack]プラグインは、_Protect_関数を使用してXML-RPCマルチコールメソッドリクエストをブロックできます。 Jetpackを有効にすると、WebサーバーログにXML-RPCエントリが引き続き表示されます。 ただし、Jetpackはこれらの悪意のあるログからのデータベースの負荷をほぼ90%削減します。
Jetpackは、WordPressバックエンドから簡単にインストールできます。 まず、WordPressコントロールパネルにログインし、左側のメニューで[プラグイン]→ [新規追加]を選択します。
image:https://assets.digitalocean.com/articles/wordpress_xmlrpc/plugins_menu.png [WordPressプラグインメニュー]
Jetpackは、* Add ページの注目のプラグインセクションに自動的にリストされます。 表示されない場合は、検索ボックスを使用して Jetpack *を検索できます。
image:https://assets.digitalocean.com/articles/wordpress_xmlrpc/jetpack_install.png [Jetpackインストールページ]
[今すぐインストール]ボタンをクリックして、Jetpackをダウンロード、展開、およびインストールします。 正常にインストールされると、ページに*プラグインの有効化*リンクが表示されます。 その* Activate Plugin リンクをクリックします。 * Plugins *ページに戻り、上部に Jetpackの準備がほぼ完了したことを示す緑色のヘッダーが表示されます*。 * Wordpress.comに接続*ボタンをクリックして、Jetpackのアクティベーションを完了します。
image:https://assets.digitalocean.com/articles/wordpress_xmlrpc/connect.png [Wordpress.comに接続ボタン]
次に、WordPress.comアカウントでログインします。 必要に応じてアカウントを作成することもできます。
image:https://assets.digitalocean.com/articles/wordpress_xmlrpc/log_in.png [Wordpress.comフォームにログイン]
WordPress.comアカウントにログインすると、Jetpackが有効になります。 Jetpackの一般的な機能を自動的に有効にする* Jump Start *を実行するオプションが表示されます。 この手順で[*スキップ]リンクをクリックします。
画像:https://assets.digitalocean.com/articles/wordpress_xmlrpc/jump_start.png [ジャンプ開始画面]。
ジャンプスタートプロセスをスキップしても、保護機能は自動的に有効になります。 これで、保護機能がアクティブとして表示されるJetpackダッシュボードを見ることができます。 * Protect *名の横にある歯車をクリックして、_Protect_によってブロックされる可能性のあるIPアドレスをホワイトリストします。
image:https://assets.digitalocean.com/articles/wordpress_xmlrpc/jetpack_dashboard.png [Jetpack Dashboard]
ホワイトリストにするIPv4またはIPv6アドレスを入力し、[保存]ボタンをクリックして_Protect_ホワイトリストを更新します。
image:https://assets.digitalocean.com/articles/wordpress_xmlrpc/protect.png [保護設定]
方法2:a2enconfでblock-xmlrpcを有効にする
`+ a2enconf block-xmlrpc +`機能は、2015年12月にDigitalOcean WordPressワンクリック画像に追加されました。 これにより、WebサーバーレベルですべてのXML-RPC要求をブロックできます。
XML-RPCブロックスクリプトを有効にするには、DO WordPressワンクリックイメージがインストールされた状態で、ドロップレットで次のコマンドを実行します。
sudo a2enconf block-xmlrpc
Apacheを再起動して、変更を有効にします。
sudo service apache2 restart
方法3:すべてのXML-RPCトラフィックを手動でブロックする
または、XML-RPCブロックをApacheまたはNginx構成に手動で適用できます。
Ubuntu 14.04上のApacheの場合、次のコマンドを使用して構成ファイルを編集します。
sudo nano /etc/apache2/sites-available/000-default.conf
`+ <VirtualHost> +`タグの間に強調表示された行を追加します。
Apache VirtualHost Config
<VirtualHost>
…
</VirtualHost>
終了したら、このファイルを保存して閉じます。
Webサーバーを再起動して、変更を有効にします。
sudo service apache2 restart
Ubuntu 14.04のNginxの場合、次のコマンドを使用して構成ファイルを編集します(構成ファイルを反映するようにパスを変更します):
sudo nano /etc/nginx/sites-available/
サーバーブロック内に強調表示された行を追加します。
Nginxサーバーブロックファイル
server {
…
}
終了したら、このファイルを保存して閉じます。
Webサーバーを再起動して、変更を有効にします。
sudo service nginx restart
攻撃軽減手順の検証
攻撃を防ぐために選択した方法が何であれ、それが機能していることを確認する必要があります。
Jetpack Protect機能を有効にすると、WebサーバーのログにXML-RPCリクエストが継続して表示されます。 頻度は低くする必要があり、Jetpackは攻撃がデータベースサーバープロセスに与える負荷を軽減します。 Jetpackは攻撃しているIPアドレスも徐々にブロックします。
すべてのXML-RPCトラフィックを手動でブロックすると、ログには試行が表示されますが、結果のエラーコードは200以外のものになります。 たとえば、Apacheの `+ access.log +`ファイルのエントリは次のようになります。
access.log
111.222.333.444:80 555.666.777.888 - - [01/Jan/2016:16:33:50 -0500] "POST /xmlrpc.php HTTP/1.0" 674 "-" "Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)"
結論
悪意のあるXML-RPCトラフィックを軽減するための措置を講じることにより、WordPressサイトの消費するシステムリソースが少なくなります。 WordPressサイトがVPSでオフラインになる最も一般的な理由は、システムリソースを使い果たすことです。 この記事で言及したXML-RPC攻撃を防ぐ方法は、WordPressサイトがオンラインのままであることを保証します。
WordPress XML-RPCに対するブルートフォース攻撃の詳細については、https://blog.sucuri.net/2015/10/brute-force-amplification-attacks-against-wordpress-xmlrpc.html [Sucuri.net-Brute Force WordPress XMLRPCに対する増幅攻撃]。