in a fever.

in a fever.

また徒労日記のWebサーバがスローダウンしました。事例として経過をメモしておきます。

発生は今日の15:50

以前に

iPhoneが探すapple-touch-icon.pngを用意(サイト不調のお詫び)徒労日記 | 徒労日記


GoogleAnalyticsで観る限りそんなに同時アクセスは無いので一種の熱病にかかったんじゃないかと思いました。

と表現していたサーバの熱病がまた起きました。

確認すると正常時は(左側の空きメモリ:kbmemfreeに注目)

$ sar -r
Linux 2.6.32-042stab092.2 (dti-vps-srv931)      2014年10月04日  _x86_64_        (32 CPU)

00時00分02秒 kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit
00時10分01秒   2540324   1653980     39.43         0    136092         0      0.00
00時20分01秒   2424548   1769756     42.19         0    136392         0      0.00
00時30分01秒   2453444   1740860     41.51         0    137008         0      0.00

中略

14時10分01秒   2620800   1573504     37.52         0    135176         0      0.00
14時20分01秒   2845036   1349268     32.17         0    136216         0      0.00
14時30分01秒   3018136   1176168     28.04         0    137560         0      0.00
14時40分01秒   2918172   1276132     30.43         0    138724         0      0.00
14時50分01秒   2541536   1652768     39.41         0    139264         0      0.00

だったものが、今日の15時50分を境に

15時40分01秒   2101212   2093092     49.90         0    144260         0      0.00
15時50分02秒    307020   3887284     92.68         0     17616         0      0.00
16時00分02秒     52904   4141400     98.74         0      6948         0      0.00
16時10分02秒     21344   4172960     99.49         0      8268         0      0.00
16時20分01秒     36176   4158128     99.14         0      8480         0      0.00
16時30分01秒    643368   3550936     84.66         0     49140         0      0.00
16時40分02秒    214712   3979592     94.88         0      8448         0      0.00
16時50分02秒    522016   3672288     87.55         0     51880         0      0.00

中略

18時20分01秒      5516   4188788     99.87         0      6964         0      0.00
18時30分02秒      4664   4189640     99.89         0     14600         0      0.00
18時40分02秒      7392   4186912     99.82         0      9668         0      0.00
18時50分01秒      1312   4192992     99.97         0      7432         0      0.00
19時00分02秒      1136   4193168     99.97         0      7024         0      0.00
19時10分01秒      1248   4193056     99.97         0       900         0      0.00

空きメモリを食い尽くし、スワップが3GB近くまで使用されている状態でした。家の回線やiPhoneからアクセスしても死んでは居ないけど極端に応答の無い状態。遅いってレベルではなくて。

最初はApacheの設定を疑う

前回と同じhttpdのパラメータから疑い始めました。でもMaxClientをいくら下げても遅いのは変わらず。ググってもみんなこれで直った!って書いてる人ばかりなんですけどね・・・。今回もGoogle Analysticsのリアルタイムサマリーは大した人数を示していません。

とりあえずhttpd1個あたりのメモリ使用量(top -cのRES)が多すぎるので、急いで

  1. httpd.confから余計なLoadModulesを削除
    (参考サイト:Apacheの不要モジュールを外してWordPress(ワードプレス)を高速化する | CONETA.JP)
  2. php.iniのmemory_limit = を128Mから80Mへ。

を実施。少しメモリ使用量は減りましたが、サーバの無反応っぷりは相変わらず。

これじゃない。

アタックされてる??

.phpへの不正アクセス?

ひとりぶろぐさんの記事「WordPressが重くてサーバが落ちる件、ブルートフォースアタック対策で正常化」を思い出してaccess.logをチェックしましたが、特段phpへのアクセスは無し。

これでもない。
レイヤ7で問題ないとすると、レイヤ3以下の話??

そもそもと思ってtcpdump

Webサーバは虫の息なことにもかかわらず

sudo tcpdump port 80

したらものすごい速度でログが流れだしました。ゲリラ豪雨の様に落ちるログを死んだ魚みたいな目で眺めていると、特定のIPが多く出てくる事に気が付きました。パラパラ漫画の要領で(伝わるかなコレ(‘A`)

20141004-01いいチェック方法は無いかと探すと、iptablesでサーバへの攻撃をブロックする方法 ≪ Iptables ≪ セキュリティ ≪ ソフトウェアのインストールと設定 ≪ Linux 大学にていいコマンドを発見。netstatコマンドの結果を整形して、どのIPからのアクセスが多いか表示する方法です。

$ sudo netstat -anp |grep 'tcp\|udp' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
      1 xxx.xxx.xxx.xxx
      2 yyy.yyy.yyy.yyy
      7 0.0.0.0
     58 154.35.160.123
    238

ダントツに怪しい”154.35.160.123″が。

sudo tcpdump port 80 | grep -v 154.35.160.123

試しに↑すると大分まともなダンプ結果になるのでビンゴっぽい。
このアドレスが誰なのかドメイン/IPアドレス【whois情報検索】で調べましたが逆引き結果無し。

いい加減困ってるのでiptablesでブロックする事にしました。

$ sudo iptables -I INPUT -s 154.35.160.123 -p tcp -m tcp --dport 80 -j DROP
$ sudo /etc/init.d/iptables save
$ sudo /etc/init.d/iptables restart

最初はプロトコルもポートも指定しないでallでiptablesに入れましたがうまくブロックしてくれませんでした。”-p tcp -m tcp –dport 80″を入れる必要が有るようです。

この他2つほどの怪しいホストと、その他アタックへのブロック定義を追加してサーバアクセスが復帰しました。ただ一時的な対処療法だし、もしかすると相手が飽きてアクセスをやめただけかもしれません。

別なIP使ってくるでしょうから、denyリストの動的更新とか、まじめにiptablesを考えないとダメそうです。はぁ。

コメントを残す