随分久しぶりの更新となります。
ここ最近仕事が忙しかったのと興味が自転車に移ってしまい時間が取れるなら走りに出かけるような生活を送っておりました。
といってもメールサーバは常用していること、自転車のブログを始めたことなどからサーバを利用すること自体は継続しており、時々Zabbixを除いたり定期的に再起動したり各種プログラムのアップデートをチェックしたりと管理は続けているつもりでした。
が、昨日(12/6)サーバがダウンしましたので現象・対策を備忘録として書き残しておきます。
発覚したきっかけ
気づいたきっかけはメールの異常でした。
諸事情で手動受信をかけて都度チェックしている自鯖アカウントメールなんですが、昨日は朝から忙しくて見れていなかったんです。
16時ごろ「そういえば今日はメール見てねぇや」と思い受信を行うと反応がない…
通常だと数秒で終わるところがしばらく経過しても「サーバ接続中」のまま。
タバコを吸い終わるころようやく完了したのですが明らかに動作がおかしい。
そのままブラウザで当サイトへ接続するとしばらくたってエラーコード502が返ってきます。
別ドメインで動かしているサイトへ接続しても同様に502エラー。
zabbixの稼働状況を見ようにもこちらも繋がらず。ログをチェックしようと思いスマホからSSH接続を試みるもののこれも繋がらない…
下手すればクラックされてる可能性もあると思いサーバを止めたかったんですが会社にいる自分にはなすすべもなく、帰宅してから即サーバをチェックします。
LAN内のクライアントも接続できずサーバを再起動
帰って普段使いのパソコンからSSH接続を試みるけどこれもダメ。
直接サーバを覗くと明らかに動作が遅く、何をするにも時間が掛かりすぎ。
本来だと一通り調査してから…と思うところですがやむなくサーバを再起動します。
起動後にログをいくつか見てみると12/6 0:45過ぎからWordpressのxmlrpc.phpファイルに大量のアクセスが発生しており、0:46頃にはステータスコードが300→500へと変わっています。
Zabbixで確認するとほぼ同じ時刻でCPU、HDD、メモリの負荷が急上昇しており、中でもメモリはほぼ消費しきっている状態でした。
調べてみると同様の手口でダウンする事例が結構あったようで対策も見つけることができましたので早速実施します。
xmlrpc.phpに対するブルートフォースアタック対策
この度参考にさせて頂いたのはこちら。
とても助かりました。ありがとうございます!!
対策としては「Webサーバの設定」と「Wordpressの設定」の両面からアプローチされているのですが、Webサーバ側に関してはリソースの状況をチェックしないと適切な設定ができないと思われるため今回は割愛します。
要はxmlrpc.phpへのアクセスを遮断してしまおう!ということでアクセス制限をかけます。
<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が存在するディレクトリ(ルートディレクトリ)にある.htaccessに上のように追記します。(なければ.htaccessを新規作成しましょう)
平たく言うと「xmlrpc.phpに対する接続はhttp://0.0.0.0へリダイレクトしてしまおう」という内容となります。
セキュリティ的にはこれでOKかもしれませんが、このままだと攻撃を喰らったときのサーバの負荷は変わりないと思うので、やはりApache2のチューニングも必要だと思っています。
リソースをチェックしたら即刻実施したいところです。