grepで検索文字の行番号を取得

2021-06-22

概要

先日、当サーバーへのHPが閲覧できなくなり、SSH接続も重くなりコンソール操作も難しい状況になりました。ServerMan@VPSの管理画面より再起動しても事象は変わりません。

外部に公開しているサービスがApacheのWEBサービスのみですので、Apacheの起動を停止してログを確認すると以下のようなログが大量に吐き出されていました
【Apacheアクセスログ】

91.230.54.xx - - [dd/Jan/2016:YY:MM:SS +0900] "POST /xmlrpc.php HTTP/1.0" 200 64699
91.230.54.xx - - [dd/Jan/2016:YY:MM:SS +0900] "POST /xmlrpc.php HTTP/1.0" 200 64699
91.230.54.xx - - [dd/Jan/2016:YY:MM:SS +0900] "POST /xmlrpc.php HTTP/1.0" 200 64699
91.230.54.xx - - [dd/Jan/2016:YY:MM:SS +0900] "POST /xmlrpc.php HTTP/1.0" 200 64699
91.230.54.xx - - [dd/Jan/2016:YY:MM:SS +0900] "POST /xmlrpc.php HTTP/1.0" 200 64699
91.230.54.xx - - [dd/Jan/2016:YY:MM:SS +0900] "POST /xmlrpc.php HTTP/1.0" 200 64699
91.230.54.xx - - [dd/Jan/2016:YY:MM:SS +0900] "POST /xmlrpc.php HTTP/1.0" 200 64699
91.230.54.xx - - [dd/Jan/2016:YY:MM:SS +0900] "POST /xmlrpc.php HTTP/1.0" 200 64699
91.230.54.xx - - [dd/Jan/2016:YY:MM:SS +0900] "POST /xmlrpc.php HTTP/1.0" 200 64699
91.230.54.xx - - [dd/Jan/2016:YY:MM:SS +0900] "POST /xmlrpc.php HTTP/1.0" 200 64699

WordPressの「xmlrpc.php」へのDDoS/DOS攻撃のようです。WordPressのxmlrpc.phpは、管理画面以外からもAPIを使って記事が投稿できる機能です。この機能を利用するファイル(xmlrpc.php)へのアタックの方です

このアタック中は、Apacheの応答が増えプロセス数が増大し高負荷状態となりWEBサービスが停止し、サーバー自体のロードアベレージが増えSSH接続などは難しくなっていました

このような状況では、以下のようなことを対策があります

ApacheのDoS攻撃対策モジュールを導入する

先日の記事に説明した「mod_evasive」を導入しました。同一のIPアドレスから大量のアクセスがあると404の応答をします。

参考URL:Apache DoS攻撃対策モジュール【mod_evasive編】

導入してみましたがDoS攻撃元には、404のステータスを返しますので、Apacheは忙しさは変わらず、負荷は減りますがHPは重く表示に時間がかかり、まともにWEBサービスは提供できてなかったです

Apacheで、xmlrpc.phpを制限

この対策は後日にApacheの設定ファイルに設定しています。この事象が発生した時は同一アドレスからのアクセスだけだったのiptablesでのそのIPアドレスのアクセス自体をドロップするようにしました

Apacheで、xmlrpc.phpを制限するには、「.htaccess」またはhttpd.confなどの設定ファイルで、xmlrpc.phpのアクセスを制限します。設定は以下の内容を追記します。
設定内容は、xmlrpc.phpへのアクセスをすべて拒否しています。

「.htaccess」に記載した場合は、Apacheの再起動を不要ですが、httpd.confなどの設定ファイルに追記した場合は、設定ファイルのリロードまたはApacheの再起動が必要です

Apache 2.2系以前の場合(xmlrpc.php制限)

  <Files "xmlrpc.php">
    order deny,allow
    deny from all
  </Files>

Apache 2.4系以後の場合(xmlrpc.php制限)

  <Files "xmlrpc.php">
    Require all denied
  </Files>

iptablesでDoS/DDoS攻撃のIPアドレスを制限する

Apache側で攻撃元のアクセスを制限しても、Apacheは404のステータスを返したりするので、Apacheの負荷は大幅に減らない場合はあります。その場合はiptable(ファイアーウォール)で攻撃してきているIPアドレスをドロップ(遮断)することにした。この対応で本サーバへのDoS/DDoS攻撃の負荷は落ち着きました

iptablesでの設定内容は、以下のコマンドを参考にして下さい

## 遮断したいIPを設定します
# iptables -I INPUT -s <制限したいIPアドレス> -j DROP
# iptables -I INPUT -s 91.230.54.XX -j DROP

## 設定した内容を保存します
# /etc/init.d/iptables save
 
## 設定した内容を反映します
# /etc/init.d/iptables restart