妻は「サイトが止まっている」と言った。
僕は「またぁ?」と答えた。
ブラウザーで妻のサイトにアクセスしてみるが応答がない。ついでに、自分の(この)サイトにもアクセスしてみた。返事がない。サイトは死んでしまった……。
一体何が起こったのだろう?ぼくは、詳しく調べてみることにした。
サイトにアクセス出来ない以上、サーバーに何か起きたのは間違いない。
まずは、サイトをホストしてもらっている Amazon Web Services のコンソールから CloudWatch でリソース状況を確認してみることにした。
Oh…orz
CPU 使用率が80%を超えている。たいして人気がない、私ら夫婦のサイトが久々の Yahoo 砲をもらったのかな?
…などといい方向に考えるほど人間ができていない僕が最初に疑ったのは、ログが肥大化しているのかな、ということだった。すぐにnginx のログがあるディレクトリを確認してみると…
error.log が 68.6 MB !!!
うぉぉぃ、またなんかエラーはいてるのか? すぐに vi で表示する。
2015/08/03 21:50:42 [error] 2837#0: *1980514 connect() to unix:/var/run/php-fpm.sock failed (11: Resource temporarily unavailable) while connecting to upstream, client: unix:, server: eternal-tears.com, request: "POST /xmlrpc.php HTTP/1.0", upstream: "fastcgi://unix:/var/run/php-fpm.sock:", host: "eternal-tears.com"
2015/08/03 21:50:43 [error] 2837#0: *1980518 connect() to unix:/var/run/php-fpm.sock failed (11: Resource temporarily unavailable) while connecting to upstream, client: unix:, server: eternal-tears.com, request: "POST /xmlrpc.php HTTP/1.0", upstream: "fastcgi://unix:/var/run/php-fpm.sock:", host: "eternal-tears.com"
2015/08/03 21:50:43 [error] 2837#0: *1980522 connect() to unix:/var/run/php-fpm.sock failed (11: Resource temporarily unavailable) while connecting to upstream, client: unix:, server: eternal-tears.com, request: "POST /xmlrpc.php HTTP/1.0", upstream: "fastcgi://unix:/var/run/php-fpm.sock:", host: "eternal-tears.com"
というエラーが延々と続いている。本当に延々と続いている。変化するのは時刻とエラーの回数だけ。カーソルを動かすと、それはとてもとても綺麗なアニメーションである。いやいや、嬉しくない。
うぉぉぃ、妻よ、またおまえのところか。
戦犯が分かったところで、今度は eternal-tears.com のアクセスログを見てみる。
54.149.25.125 - - [03/Aug/2015:03:11:03 +0900] "POST /xmlrpc.php HTTP/1.0" 499 0 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; http://www.google.com/bot.html)" "-"
52.27.179.6 - - [03/Aug/2015:03:11:03 +0900] "POST /xmlrpc.php HTTP/1.0" 499 0 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; http://www.google.com/bot.html)" "-"
52.27.163.28 - - [03/Aug/2015:03:11:03 +0900] "POST /xmlrpc.php HTTP/1.0" 499 0 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; http://www.google.com/bot.html)" "-"
54.148.210.66 - - [03/Aug/2015:03:11:05 +0900] "POST /xmlrpc.php HTTP/1.0" 499 0 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; http://www.google.com/bot.html)" "-"
54.149.51.205 - - [03/Aug/2015:03:11:07 +0900] "POST /xmlrpc.php HTTP/1.0" 499 0 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; http://www.google.com/bot.html)" "-"
52.10.165.55 - - [03/Aug/2015:03:11:07 +0900] "POST /xmlrpc.php HTTP/1.0" 499 0 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; http://www.google.com/bot.html)" "-"
54.69.228.145 - - [03/Aug/2015:03:11:07 +0900] "POST /xmlrpc.php HTTP/1.0" 499 0 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; http://www.google.com/bot.html)" "-"
52.25.199.249 - - [03/Aug/2015:03:11:07 +0900] "POST /xmlrpc.php HTTP/1.0" 499 0 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; http://www.google.com/bot.html)" "-"
54.149.51.19 - - [03/Aug/2015:03:11:08 +0900] "POST /xmlrpc.php HTTP/1.0" 499 0 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; http://www.google.com/bot.html)" "-"
54.149.51.108 - - [03/Aug/2015:03:11:09 +0900] "POST /xmlrpc.php HTTP/1.0" 499 0 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; http://www.google.com/bot.html)" "-"
Googlebot が延々と xmlrpc.php にアクセスしていたようだ。しかも尋常な量じゃない。こちらも延々と続いている。こちらは時刻と IP アドレスが変化する。カーソルを動かすと、それはとてもとても綺麗なアニメーションである。全く嬉しくない。リソース不足の原因はこの一連の Googlebot のアクセスのせいのようだ。
xmlrpc.php というのは XML-RPC プロトコルを使うための WordPress のインターフェースである。リモート投稿する場合やトラックバックを投げる時に使うものなのだけど、果たして Googlebot が POST で投げてくるのだろうか?
おまえ、本当に Googlebot か!?
とりあえず、ログファイルをアニメーションさせていても始まらない。このログを集計してることにする。
Mac 用のログ解析ソフトは持っていないので、古典的に ピポットテーブルで集計する。
集計の仕方を以下にまとめたので、ぜひご覧頂きたい
IP アドレス
|
回数
|
52.10.165.55 |
2436
|
52.24.47.119 |
3559
|
52.25.199.249 |
3573
|
52.26.48.237 |
3548
|
52.26.7.151 |
3590
|
52.27.163.28 |
3496
|
52.27.179.6 |
3107
|
54.148.164.248 |
3238
|
54.148.210.66 |
1230
|
54.148.9.134 |
3286
|
54.149.25.125 |
1821
|
54.149.32.142 |
3503
|
54.149.51.108 |
3374
|
54.149.51.19 |
3463
|
54.149.51.205 |
1439
|
54.149.6.148 |
3415
|
54.149.8.94 |
3481
|
54.69.228.145 |
3678
|
54.69.229.22 |
3406
|
54.69.3.69 |
3516
|
ログの量が膨大で Google スプレッドシートが読み込めなかったので、1/4(約10MB 分)に限定してやってみたが、見事に20 IP に収斂した。
散々頑張った後に、以下のようにすればわざわざ Google スプレッドシートで集計しなくてもいいことに気づいた。箸とコマンドラインは使いようって死んだじっちゃんも言ってた。
$ grep xmlrpc /var/log/nginx/access.log | cut -d' ' -f1 | sort | uniq -c | sort -rn
19300 54.149.8.94
18884 52.26.48.237
16472 54.149.32.142
16415 52.26.7.151
15857 52.25.199.249
14259 52.24.47.119
14227 54.69.228.145
13615 54.149.51.108
13576 54.69.3.69
12925 52.27.163.28
12835 54.149.6.148
12617 54.69.229.22
12112 54.149.51.19
10854 54.148.164.248
10209 54.148.9.134
10208 52.27.179.6
6144 52.10.165.55
5714 54.149.25.125
4125 54.149.51.205
3616 54.148.210.66
次にこの IP の正体を暴いてやる。
ターミナルで host コマンドを実行($ dig -x IP アドレス でもいいのだけど、host コマンドのほうが結果がシンプルで見やすい)。それにしても host だの、dig だの、コマンドがいやらしい。
~ $ host 52.10.165.55
55.165.10.52.in-addr.arpa domain name pointer ec2-52-10-165-55.us-west-2.compute.amazonaws.com.
~ $ host ec2-52-10-165-55.us-west-2.compute.amazonaws.com
ec2-52-10-165-55.us-west-2.compute.amazonaws.com has address 52.10.165.55
52.10.165.55 の正体は AWS の EC2 らしい。リージョンは海を超えた us-west-2。遠くからわざわざご苦労なこった。
サイトにアクセスすれと ”please fok off. ok thanks.” と表示される。”fok” ってなんだよ。fuck off (失せろ)ってことかな。
本当に Googlebot の時は以下のようになる。
~ $ host 66.249.71.44
44.71.249.66.in-addr.arpa domain name pointer crawl-66-249-71-44.googlebot.com.
~ $ host crawl-66-249-71-44.googlebot.com
crawl-66-249-71-44.googlebot.com has address 66.249.71.44
参考:Googlebot かどうかの確認 – Search Console ヘルプ
…というわけで、ひたすら host コマンドを叩いた結果が以下の通り。
IP アドレス
|
回数
|
ホスト名
|
52.10.165.55 |
2436
|
ec2-52-10-165-55.us-west-2.compute.amazonaws.com
|
52.24.47.119 |
3559
|
ec2-52-24-47-119.us-west-2.compute.amazonaws.com
|
52.25.199.249 |
3573
|
ec2-52-25-199-249.us-west-2.compute.amazonaws.com
|
52.26.48.237 |
3548
|
ec2-52-26-48-237.us-west-2.compute.amazonaws.com
|
52.26.7.151 |
3590
|
ec2-52-26-7-151.us-west-2.compute.amazonaws.com
|
52.27.163.28 |
3496
|
ec2-52-27-163-28.us-west-2.compute.amazonaws.com
|
52.27.179.6 |
3107
|
ec2-52-27-179-6.us-west-2.compute.amazonaws.com
|
54.148.164.248 |
3238
|
ec2-54-148-164-248.us-west-2.compute.amazonaws.com
|
54.148.210.66 |
1230
|
ec2-54-148-210-66.us-west-2.compute.amazonaws.com
|
54.148.9.134 |
3286
|
ec2-54-148-9-134.us-west-2.compute.amazonaws.com
|
54.149.25.125 |
1821
|
ec2-54-149-25-125.us-west-2.compute.amazonaws.com
|
54.149.32.142 |
3503
|
ec2-54-149-32-142.us-west-2.compute.amazonaws.com
|
54.149.51.108 |
3374
|
ec2-54-149-51-108.us-west-2.compute.amazonaws.com
|
54.149.51.19 |
3463
|
ec2-54-149-51-19.us-west-2.compute.amazonaws.com
|
54.149.51.205 |
1439
|
ec2-54-149-51-205.us-west-2.compute.amazonaws.com
|
54.149.6.148 |
3415
|
ec2-54-149-6-148.us-west-2.compute.amazonaws.com
|
54.149.8.94 |
3481
|
ec2-54-149-8-94.us-west-2.compute.amazonaws.com
|
54.69.228.145 |
3678
|
ec2-54-69-228-145.us-west-2.compute.amazonaws.com
|
54.69.229.22 |
3406
|
ec2-54-69-229-22.us-west-2.compute.amazonaws.com
|
54.69.3.69 |
3516
|
ec2-54-69-3-69.us-west-2.compute.amazonaws.com
|
全部 EC2 かよ。
もう許さん!次回はこの20個の IP アドレスをギッタギタのメタメタにブロックしてやる!