server status

先週ふたばのみならず、多くのサイトが DDoS 攻撃に晒されサービスを正常に提供できなくなる事件が起きた – 経過。その攻撃自体は今は沈静化している。また、ふたば側ではユーザーとサーバとの間に CloudFlare を挟むようになり、DDoS 耐性が増強された。

で。ふたばに関してはサーバの状態を観測するには公式の接続テストページか、拙作のふたば鯖☆偽監視所がある。今回はふたばの全サーバが攻撃されたので、公式の接続テストページは本来の役目を果たさない。従ってサーバの状態を確認したいユーザのアクセスが偽監視所に集中し、今まではだいたい日に 100 件とかそこらのアクセスだったのが、400000 アクセスとかに増えるようになった日が数日続いた。

偽監視所にアクセスして返される内容は gzip された静的な html であり、内容に含まれるグラフっぽい何かはすべて CSS で表現される軽量なテキストデータなので、サイズは高々 10 KB 程度だ。それでも、400000 アクセスされると一日の転送量は 3GB くらいになる。3GB というのは xrea の一日の転送量リミットの上限の数値だ(ただ、これが絶対の上限だと明言されているわけではない。これを超えると何がどうなると明言されてるわけでもない。このゆるゆるでテキトーでいい加減な管理ポリシーが今となっては xrea の最大の魅力だ)。従っていますぐ xrea を追い出されるということではないのだが、もしも転送量が倍々ゲームになるようだといろいろと対策を考えないといけない。

というわけでいろいろ改修を施した:

  • PHP のバージョンが上がることによって発生していた warning を潰した。これらはクラスのインスタンスを保持するのに [cci]=&[/cci] を使っていたとか、クラスのメソッドを static に呼び出していたという、PHP4 からの移行期の遺物だった。なにしろ偽監視所を作ったのは 2010 年のことでその後ずっとほったらかしのまま稼働させていたので仕方がない
  • 従来の仕様では、同じ IP アドレスを持つ複数の仮想名を持つサーバに関しては最初の 1 つだけ HEAD を飛ばし、それを残りのサーバにも適用していた。しかし今回 CloudFlare を挟むようになったことですべてのサーバが見かけ上同一の IP アドレスを共有するようになったので、HEAD は律儀に個別に飛ばすようにした
  • 従来の仕様では、サーバ名から IP アドレスを正引きのは単に [cci]gethostbyname()[/cci] していた。今回やはり CloudFlare を挟むようになったことで、複数の CloudFlare 側のアドレスが割り当てられるようになり、単に [cci]gethostbyname()[/cci] を呼ぶだけではラウンドロビンにより呼び出しの度異なるアドレスが返されるようになった。そこで [cci]gethostbynamel()[/cci] を使うようにし、ソートした上で先頭の IP アドレスを使うようにした
  • ユーザに返す html は 3 分ごとにリロードするようにしていたが、5 分 15 秒ごとにした

もうひとつ重要な心残りがある。偽監視所のグラフはいわば時系列を示している。しかし一般的な時系列グラフが、右端が最新を示すのに対して偽監視所は全くその逆で左端が最新なのである。6 年前の自分がなぜそういう仕様にしたのかこれっぽっちも全く覚えちゃいないのだが、今回見なおしたらやたら気になった。そこで虹裏に適当なスレが立った時に「」に聞いてみたところ、慣れたのでこれでいいという言質がとれた。これはつまり、これ以降「このグラフの仕様変じゃね?」という意見が出たとしても「」の総意ですからということでおあしすできるということだ…!