こんにちは。takkaaaaa(@butterfly_2100)です。VPSにこのブログを移転して約2週間が過ぎました。意外と順調に運用できているのですが、サーバーのログを見ていて気付いたことがあるので書いてみます。

1.やっぱり攻撃されてる

VPSに移行する前から予想していたことですが、やっぱり外国からサーバーを攻撃されていますね。nginxのアクセスログとエラーログを見ていてわかったのですが、主に攻撃されている対象は以下になります。

  1. WordPressのxmlrpc.php
  2. WordPressのログイン画面(login.php)
  3. メールサーバ

レンタルサーバーを使っている人でも、普段気づかないだけで、上記1と2の攻撃はされているのかと思います。

特にxmlrpc.phpへの攻撃が非常に多いです。特定のIPアドレスからではなくて、毎回違うIPアドレスから攻撃されています。xmlrpc.phpはピンバックやスマホアプリからWordPressの管理画面を見たりしなければ使わないファイルなので、nginxの設定ファイルでxmlrpc.phpへのアクセスは403を返すようにしました。(apacheの人はググれば方法はすぐ見つかると思います)

location ~ /xmlrpc\.php$ {
  return 403;
  break;
}

xmlrpc.phpへの攻撃があまりにも多いとサーバーの負荷が高くなってしまい、500系のサーバーエラーを返すようになってしまうかもしれません。その場合、サーバーに負荷がかかっているのはPHPの処理なので、上記のようにWebサーバー側(nginxやapache)で403を返してしまい、PHPの処理は行わないようにするのが良いでしょう。

WordPressのログイン画面(login.php)への攻撃(ブルートフォースアタック)もたまにあるのですが、デフォルトのadminやドメイン名とは異なるユーザ名にしているので、まあ大丈夫そうです。

メールサーバへの攻撃(ブルートフォースアタック)も結構あります。SMTPにログインしようとしてきていました。メールサーバを乗っ取られてしまうと、スパムメールの温床になってしまうので気をつけたいです。これはログ(/var/log/secure)に攻撃してきたIPアドレスが書いてあるので、その都度、以下のコマンドを打ってfirewallで弾くようにしています(CentOS6の場合だとiptablesになるのかな)。

# firewall-cmd --zone=drop --permanent --add-source=xxx.xxx.xxx.xxx
# firewall-cmd --reload

いずれにしても、簡単なユーザ名とパスワードの組み合わせはやばいですね。

追記・・・いちいちfirewallの設定をするのは面倒なので、Postfixへの接続のブロックリスト(ブラックリストではなくてブロックリストだそうです)を設定しました。sbl-xbl.spamhaus.orgやall.rbl.jpに含まれているIPからの送信者要求を拒否するようにしました。

# vi /etc/postfix/main.cf
smtpd_client_restrictions = permit_mynetworks,reject_rbl_client sbl-xbl.spamhaus.org,reject_rbl_client all.rbl.jp,permit

この他に、SSHによるログインを試みようとする攻撃も一般的には多いのかなと思います。うちの場合はポートをデフォルトの22から変更したり、パスワード認証を不可にして公開鍵認証にしたので、あまり攻撃もされておらず、今のところ防げている感じです。やり方はネット上にたくさん書かれている一般的な方法なので検索してみてくださいね。気をつけないと自分もログインできなくなってしまうけど・・・。

2.画像がパクられてる

nginxのアクセスログを見ていて気づいたのですが、他のサイトからうちのブログの画像に直リンクされていることがありました。

誰でも何らかのインプットを元にブログなどを書いていると思うので、パクリをあまり厳しく取り締まるつもりはないのですが、画像直リンクはちょっとヒドイですよね。個人のブログとかだったらまだしも、アフィサイトや商用のサイトはちょっとねぇ・・・。

なので、nginxの設定ファイルで、リファラーをチェックして外部サイトからの画像リンクには404を返すようにしました。

location ~ \.(jpg|png|gif|jpeg)$ {
  log_not_found off;
  expires 1y;
  access_log off;  #画像へのアクセスログは無効
  valid_referers none blocked server_names 画像リンクを許可するドメイン名(自分のサイト、googleなど);
  if ($invalid_referer) {
    access_log /var/log/nginx/images.access.log main;  #許可しないドメインからのアクセスログを有効
    return 404;
    break;
  }
}

また、WordPressには「Easy Watermark」という画像に透かしを入れるプラグインもあるので、併用しています。透かしを入れておけば、画像を保存して自分のサイトに上げ直してパクるパターンも少なくなるかと思います。

3.Googleアナリティクスには現れないアクセスも多い

暇な時にアクセスログをtail -fして眺めていたりするのですが、Googleアナリティクス(以下、GA)には現れないアクセスも結構あるなぁということに気付かされます。googleを初めとした色々なbotがありますし、クッキーやJavascriptを使っていないか、またはアドブロックにより、GAを遮断していると思われるアクセスもありました。

サーバーに転送量の制限がある場合は、GAに現れるアクセス数よりも多めに見積もっておかないと、オーバーしてしまうかもしれませんね。(アクセス数が多い人にとっては誤差みたいなものかもしれないけど)

※サーバーに記録されるアクセスログやGoogleアナリティクスを見ても、個人を特定する情報はわからないので、安心してうちのブログを見に来てくださいね。

まとめ

GMOクラウドのVPSに移行してから、ロリポップ!のレンタルサーバーでは見られなかった生のログを見ることによって、色々と気付かされました。VPSだけでなく普通のレンタルサーバーにも当てはまることが多いかと思います。これからもセキュリティーには特に気をつけてVPSの運用をしていきたいですね。