テニスナビの遍歴とアクセス負荷への対応、情報サイトを弱小マシンで8年半運用し続けた凄腕エンジニアに聞いた運用監視(1/3)

サーバー管理とアクセス負荷

先日「テニスナビ」を「TENNIS.jp」に移転しました。2014年1月から少しずつ初めて、2015年9月に完了しました。テニスナビはさくらサーバーで1台の物理サーバーによって構築されており、8年半前にしてすでに古いと言われるほどのスペックしかありませんでした。具体的には以下のスペックでした。

  • OS・・・FreeBSD 6.1-RELEASE
  • CPU・・・Pentium4
  • HDD・・・120GB
  • メモリ・・・1GB

今回はこの弱小サーバーで8年半もの間、テニスナビを運用してくださったネットワークエンジニアの方にお話をうかがってきました。長くなったので三本立てです。

テニスナビの遍歴とアクセス負荷への対応、情報サイトを弱小マシンで8年半運用し続けた凄腕エンジニアに聞いた運用監視のいろは(1/3)(本記事)

スペックが足りないときのコツとセキュリティ、情報サイトを弱小マシンで8年半運用し続けた凄腕エンジニアに聞いた運用監視のいろは(2/3)

今風の運用についてとその他書ききれなかったこと、情報サイトを弱小マシンで8年半運用し続けた凄腕エンジニアに聞いた運用監視のいろは(3/3)

テニスナビとは

TENNIS.jp」の前身であり、テニスに関する情報や選手のブログなどを掲載していたウェブサイトです。MovableTypeEnterpriseというMT3系のシステムで運用していました。

テニスナビとは

Tennis.jp」の前身であり、テニスに関する情報や選手のブログなどを掲載していたウェブサイトです。MovableTypeEnterpriseというMT3系のシステムで運用していました。

テニスナビの移行遍歴

初期

1台のサーバーに全てが入っていました。

  • 情報サイト商用環境
  • 情報サイト開発環境
  • SNS商用環境
  • SNS開発環境
  • メールサーバー
  • 外部連携用のシステム

中期

メールサーバーのみ移行しました。
移行先はGoogleAppsです。

後期

情報サイト環境以外を別サーバーに移行しました。

  • SNS商用環境
  • SNS開発環境
  • 外部連携のシステム

最初から最後まで1台のサーバーで運用されていたのは、以下の2つです。

  • 情報サイト商用環境
  • 情報サイト開発環境

アクセス負荷への対応

運用監視上一番多かった障害は何でしたか?

やっぱり、アクセス負荷によってページが落ちることですね。単純にアクセス数が増えて、マシンスペックを超えてしまった場合と、外部からのアタックによって負荷が増えた場合の2種類がありました。

1.アクセス集中による負荷増大

アクセスが増えた時の対処としてどのようなことをしていましたか?

そもそもマシンパワーが低いので、特別なことはせず(出来ず)に問題が起こるとそれに対して個別に対応するという形式を取っていました。テニスナビはCGIの処理が重かったため、短時間に書き込みを何度もするとそれだけで落ちていました。

CGI・・・Common Gateway Interface(コモン・ゲートウェイ・インタフェース、CGI)は、ウェブサーバ上でユーザプログラムを動作させるための仕組み。 現存する多くのウェブサーバプログラムはCGIの機能を利用することができる。 – Common Gateway Interface – Wikipedia

CGIに関しては何か対処をしていましたか?

CGIの処理に関しては、マシンスペックの問題なのでもうどうしようもなかったです。

単純なアクセス増大による負荷の場合は、sshでアクセス出来るレベルかどうかによって変わります。アクセスできるなら、ログを見たりして、何が負荷かを調べて設定を変えます。普通のページのアクセス数が跳ね上がっているならkeep aliveを一時的にすごく小さくしてタイムアウトになるユーザー数を増やしました。また、掲示板書き込みが多かったりで負荷が上がっている場合は、keep aliveを長くしていました。

KeepAlive・・・クライアントがサーバーに接続した際に、KeepAliveTimeoutで指定した時間になるまでセッションを切断しないことで、次回のリクエストに対するレスポンスを速くするための機能。Apacheやnginxなどに備わっている。
KeepAliveTimeoutを短くすると、一人ひとりに割く時間が短くなり、リソースを複数ユーザーに分配することが出来る。
KeepAliveTimeoutを長くすると、セッションを張り続けるため、TCPによる接続が掲示板書き込みの途中で切断されることが無いため、書き込みに成功する可能性が高くなる。

アクセスできない時は、もうどうしようも無いので、さくらインターネットさんに電話してマシンを再起動してもらいました。再起動してもらうや否やすぐにログインして、原因を調査して、対策を講じるといったかなり力技な運用をしていました。

でも、いくら対処してもある程度までで、根本的な解決は出来ません。マシンパワーが足りないので・・・。最近だと、錦織選手が勝つとアクセス数が一気に上がるので、アラートが鳴るだけで錦織選手が勝ったことが分かったりしましたね。(笑)

2.アタックによる負荷増大

アタックはどのようなものが多かったのですか?

基本的には、中国や韓国からのアタックが多かったです。しかし、ブログを書くテニスプレーヤーたちが世界中から書き込みをするため、外国からのアクセスそのものをブロックするということは出来ませんでした。

また、MovableTypeやWordPressをさくらサーバーで運用すると通常では海外から管理画面に入ることは出来ません。今回はセルフマネージドサーバーによる構築だったため問題ありませんでしたが、そうでない場合はその点にも気をつける必要があります。

アタックで一番多かったのはSSHのアタックです。IDやPASSをadminとかrootでアクセスを試みる、いわゆるブルートフォースですね。だいたい、平均して1秒に5、6回は来てました。

ブルートフォース・・・総当たり攻撃(そうあたりこうげき)とは、暗号解読方法のひとつで、可能な組合せを全て試すやり方。力任せ攻撃、またはカタカナでブルートフォースアタック(英:Brute-force attack)とも呼ばれる。 – 総当たり攻撃 – Wikipedia

後はXSS狙いのアクセスとかですね。rootkitとかを入れられていると危なかったですが、今回は運良くそんなことはありませんでした。過去にはサーバー室でサーバーを立てて、オフィスに戻る2、3分の間にrootkitを入れられたこともありましたよ。(笑)

XSS・・・ウェブページの部分をユーザからの入力をそのままエコーバック(オウム返し)することによって生成しているアプリケーションのセキュリティ上の不備を利用して、サイト間を横断して悪意のあるスクリプトを注入する攻撃のことをいう。 – クロスサイトスクリプティング – Wikipedia

rootkit・・・ルートキット(rootkitあるいはroot kit)はコンピュータシステムへのアクセスを確保したあとで第三者(通常は侵入者)によって使用されるソフトウェアツールのセットである。こうしたツールには作動中のプロセスやファイルやシステムデータを隠蔽する狙いがあり、ユーザに察知させることなく侵入者がシステムへのアクセスを維持することを支援する。 – ルートキット – Wikipedia

どのような対処をしていましたか?

マシンスペックが足りないので、一箇所のIPからのアタックを防ぐといったようなApacheの機能を実装することは出来ませんでした。始めはipfwでアタックをしてくるIPを落としていたのですが、それでもマシンが落ちるようになってしまいました。最終的には、アタックを食らうとさくらサーバーに再起動をお願いして、立ち上がった瞬間にipfwを打ち込むといった運用をしていました。

SSHのポート番号を22にしておいたままにするのは、アタックが半端無いので絶対にやめたほうがいいですよ。HTTPのポートとかは80番から変えてしまうとアクセスできなくなっちゃうのでどうしようも無いですが。

ipfw・・・ipfirewall (ipfw) とは、 FreeBSD に内蔵されたパケットフィルタ型のファイアウォールである。 FreeBSD のカーネルに組み込むことも、ローダブルモジュールとして動作することも出来る。 – ipfirewall – Wikipedia

テニスナビの遍歴とアクセス負荷への対応、情報サイトを弱小マシンで8年半運用し続けた凄腕エンジニアに聞いた運用監視のいろは(1/3)(本記事)

スペックが足りないときのコツとセキュリティ、情報サイトを弱小マシンで8年半運用し続けた凄腕エンジニアに聞いた運用監視のいろは(2/3)

今風の運用についてとその他書ききれなかったこと、情報サイトを弱小マシンで8年半運用し続けた凄腕エンジニアに聞いた運用監視のいろは(3/3)