管理しているサーバが数日頻繁に落ちることがあり、調べたところ、httpdへのアクセスが原因であることがわかりました。
以下のようなhttpdのログが多数あり、googlebotかと思っていたのですが、調べてみるとユーザエージェントを偽装していることに気が付きました。(調べ方)
159.253.151.109 - - [21/Oct/2015:01:13:00 +0900] "POST /xmlrpc.php HTTP/1.0" 200 380 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; http://www.google.com/bot.html)" ::1 - - [21/Oct/2015:01:13:14 +0900] "OPTIONS * HTTP/1.0" 200 - "-" "Apache (internal dummy connection)" 133.242.161.73 - - [21/Oct/2015:01:13:15 +0900] "POST /wp-cron.php?doing_wp_cron=1445357595.6190190315246582031250 HTTP/1.0" 200 10 "-" "WordPress/4.3.1; http://aaa.yyy.zzz" 159.253.151.110 - - [21/Oct/2015:05:12:24 +0900] "POST /xmlrpc.php HTTP/1.0" 500 263 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; http://www.google.com/bot.html)"
xmlrpc.phpの制限方法はいろいろあるのですが、xmlrpc.phpと同じディレクトリにある.htaccessに
RewriteRule ^xmlrpc\.php$ "http\:\/\/0\.0\.0\.0\/" [R=301,L]
を追記し、
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^xmlrpc\.php$ "http\:\/\/0\.0\.0\.0\/" [R=301,L] RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule>
としました。(xmlrpc.phpにアクセスがあればhttp://0.0.0.0/に転送される)
wp-cron.phpについては、ページにアクセスがある度にキックされる設定になっているので、5分おきにCRONでキックするように設定を変更しました。
具体的には、wp-config.phpに
define('DISABLE_WP_CRON', 'true');
を書き、
*/5 * * * * curl http://aaa.yyy.zzz/wp-cron.php > /dev/null 2>&1
といった感じでCRONを設定します。(aaa.yyy.zzzの部分はサンプルです)