ちまたをちょっとだけ騒がせた、POSTで送る同値の変数を大量に送りつけて
サービスを重くさせるDDoS対応のバージョンということで、
なんか新しくLemonとかいうのが必要になっているのだけれど、それも含めてサクっとインストール。

話題になった点の対処として、max_input_vars ディレクティブを追加。
デフォルトは1000なのだけれど、このサイトでそんなにパラメータを使うことはないので、
以下の設定にした。

max_input_vars = 50

それはそれとして、そろそろPHPを置いてるディレクトリについても、
制限をかける頃合いになってきたと思うので、更に以下を追加。

phpが触れるファイルの場所を open_basedir 配下のみに限定させる。

open_basedir = “/opt/htdocs:/opt/apache/conf:/var/tmp”

phpがファイルを検索する場所のリスト include_path を設定。
include_pathの設定は適切に行えば、自前のライブラリ置き場として使える。

include_path = “.:/opt/php/lib/php:/opt/htdocs/phplib”

既存のソースもひと通り、ライブラリ側を利用するように変更して、
試しに幾つかの画面を表示させてみると、そこにはなつかしのPHPエラー画面が。

open_basedirの設定は、phpが操作する全ファイルが対象になるので、
phpのセッション情報置場の /var/tmp と、2ch proxyの allowlist.db が設定から漏れていた。
上記2つの場所も追加して、ようやく事象は解決。

次は、phpから実行できるプログラムの制限をしたいのだけれど、どうやればいいのだろう?

リリースが出ていたのは知っていたのだけれど、AHCI周りでなんか嫌な予感がしていたので敬遠。
が、FreeBSD8.2のサポートがあんまり長くない事や、
一応ディスクイメージは取っておいてあるので、トラブルが起きても
最悪1日もあれば復旧できる筈という見積もりでバージョンを上げてしまうことにした。

いつもどおりrootで入って、以下のコマンド実施

#freebsd-update upgrade -r 9.0-RELEASE
#freebsd-update install
#reboot
#freebsd-update install
(各種パッケージの再ビルド)
#freebsd-update install

パッケージ類の再ビルドに思いのほか時間がかかって、
20:30に開始した作業は25:00までかかった。

8.2の頃には認識してくれなかったAHCIもデフォルトで認識している模様。
ad14でルートとswapをマウントしているので、
頃合いを見て /etc/fstabを書き換えて置く必要があるかもしれない。

ada0 at ahcich5 bus 0 scbus5 target 0 lun 0
ada0: ATA-8 SATA 2.x device
ada0: 300.000MB/s transfers (SATA 2.x, UDMA5, PIO 8192bytes)
ada0: Command Queueing enabled
ada0: 238475MB (488397168 512 byte sectors: 16H 63S/T 16383C)
ada0: Previously was known as ad14

以前はニコイチBOXと、別のUSBで接続していたHDDでda0~da2までの
デバイス順番が変な感じになっていたのだけれど、
9.0ではきちんと挿してる順番で認識されている模様。

ひと通りのサービスが起動していることを確認して就寝。

※追記
 konata.netは64Bit版だったので問題が起こらなかったのだけれど、
 32Bit版(いわゆるi386)の場合は、freebsd-updateで取ってくるファイルのフォーマットが間違っていて、
 何回やってもfreebsd-updateがコケる。
 
 /var/db/freebsd-update にある tagファイルの最後の項目に
 ”EOL=xxxxxxx”みたいのがあるんだけど、これ、EOL=が有るせいで
 フォーマットチェックに失敗するのが原因。
 
 対処としては、freebsd-updateのスクリプトで該当チェックをしてる箇所の
 正規表現を書き換えて、”EOL=”付きのtagファイルを許容させてやるととりあえず処理が進むようになる。
 まぁ、そろそろ64Bit版に移らないか?という天の声かもしれんね。

konata.netのサーバをHP Microserverへの乗り換え完了。

旧サーバのノートPCには引退してもらうことにした。
余生を過ごさせようにも、流石にもう6~7年前のスペックなので、用途がない。
さんざん酷使したので、バッテリー起動するとOS起動する前に尽きる。
konata.netの鯖を落とす時のスタンバイ系に置いておくという考えもあるけれど、
そこまでの冗長性をもたせる気はないので、やっぱり廃棄が現実的。

動作確認が取れるまでは、なかなか本棚の上に配置出来なかったのだけれど、
これでようやっと床置から開放された。
そのかわりトラブった時にコンソール繋ぐのがものすごくめんどくさいけど。
この辺はノートだと気楽なのだけれど、まぁ、多分大丈夫。

結局、メモリとUSB無線LANを追加で投入することにした。
メモリはECC対応の4GBを2つ。今のところ使う用途が無いけれど。
無線LANは面白そう+2000円しない値段ということで、適当に選んで追加。
後で調べると、FreeBSDではまだドライバが無いチップらしい。
まぁ、有線があるので気にしない。そのうち使えるようになるだろう。

旧サーバだと、起動時にニコイチBOXが認識しない問題があったのだけれど、
Microserverだと起動に問題なし。
が、USBHDDの認識順が何やら変な感じ。
2.5inchの外付けと、ニコイチBOXをUSB接続しているのだけれど、
以下のようにda1が間に挟まる。

umass0:0:0:-1: Attached to scbus0
da0 at umass-sim0 bus 0 scbus0 target 0 lun 0
da0: Fixed Direct Access SCSI-2 device
da0: 40.000MB/s transfers
da0: 953869MB (1953525168 512 byte sectors: 255H 63S/T 121601C)
umass1:1:1:-1: Attached to scbus1
da1 at umass-sim1 bus 1 scbus1 target 0 lun 0
da1: < 0100> Fixed Direct Access SCSI-0 device
da1: 40.000MB/s transfers
da1: 38154MB (78140160 512 byte sectors: 255H 63S/T 4864C)
da2 at umass-sim0 bus 0 scbus0 target 0 lun 1
da2: Fixed Direct Access SCSI-2 device
da2: 40.000MB/s transfers
da2: 953869MB (1953525168 512 byte sectors: 255H 63S/T 121601C)

接続順を変えて何度かリブートしてみたのだけれど、変わらないのでこのままで行くことにした。
起動毎にデバイス名が変わるわけじゃないので実運用で困る場面ないからな。

とかやってる内に、Microserverに新型が出たらしい。
このシリーズ、製品自体の出来は良いと思うので、長く続いてくれることを祈る。

konata.netの中に、loto6の当選番号通知メール送信というのがある。

中身は、みずほのloto6当選番号結果のページをパースして、
当日の当選番号諸々を引っこ抜いて、登録のあったメールアドレスにメールを送信するもの。

が、問題発生。
こっちのミスなのだけれど、konata.netの鯖を取り替える過程で、
FreeBSDのcronで送られる状態通知メールが、本当は宛に送らなければならないところが、宛に流れていて、posftixのキューに滞留。
キューの対流に気がついていなかったうちに、MyDNS鯖宛に延々と宛のメールを投げようと接続を繰り返しては、存在しないドメインだと怒られてエラーになっていた。

その結果。

どうやら、このブログ主や、このブログ主と同じように接続を拒否されてしまったらしい。

弾かれたログはこんな感じ

Sep 27 13:39:23 konata postfix/error[97329]: なんかID: to=<宛先メールアドレス>, relay=none, delay=30, delays=0.01/30/0/0.02, dsn=4.4.1,status=deferred (delivery temporarily suspended: connect to auth.gate-on.net[210.197.72.170]:587: Operation timed out)

原因になったキュー滞留のメール送信はこんな感じ

Sep 24 14:03:55 konata postfix/smtp[51504]: なんかID: to=, orig_to=, relay=auth.gate-on.net[210.197.72.170]:587, delay=266570, delays=266570/0.21/0.05/0.1,dsn=4.0.0, status=deferred (host auth.gate-on.net[210.197.72.170] said: 450 : Sender address rejected: Domain not found (in reply to RCPT TO command))

で、そのあおりを食って、loto6の当選番号通知メール送信ができなくなった。
「IP変えて登録し直しでメールの送信ができるようになった」と先のブログには書いてあるのだけれど、
konata.netは固定IPなんだよなぁ……

急遽gmail経由に切り替えて前回の当選番号通知は一日遅れで送ったのだけれど、
gmail経由だと、自分のgmailアドレスがメールに含まれるのであんまり好ましくない。
ついでに、今までSASL認証使ってメール送信してたと思ったら、実は使ってなかった事も判明。
今まで送れてたから、気がつかなかったんだなぁ……
まぁ、スパム送信の踏み台にされてなかっただけ良かったのかもしれない。

で、いろいろ考えて、当選番号通知自体を辞めてしまうことにした。

なんだか、最近この手の割と単純なミスを連発している気がする。
ツキに見放されているとでもいうか、嫌な感じが抜けない。

10/01追記
 接続出来るようになりました。
 ある程度の期間、アクセスできなくなるようだ。
 とはいえ、メール送信系のサービスはもう、やらないだろうな。そんな時代でもないし。
 ともかく、MyDNSさんには悪いことしたなぁ……

konata.netのサーバをHPのMicroserverに置き換えようとして色々やっているのだけれど、
やはり、無問題というわけにはいかなくて、幾つかの障害があったりする。

今回はphpの構築。
ソースからmakeして入れるのだけれど、
cron起動しているスクリプトのエラーメールを受け取って事態が発覚。
パッと見、makeが通り、それっぽいライブラリがインストールされるのだけれど、
コマンドラインでphpを実行すると、Undefined symbol “sqlite3_open”みたいな感じで跳ねられる。

ちゃらっと調べて、以下のコマンドを叩くと、やっぱりオカシイ。

konata# php –ri pdo_sqlite

pdo_sqlite

PDO Driver for SQLite 3.x => enabled
/libexec/ld-elf.so.1: /opt/php-5.3.8/lib/php/extensions/no-debug-non-zts-20090626/pdo_sqlite.so: Undefined symbol “sqlite3_libversion”

nmで関数を見てやると、sqlite3_open初め諸々の関数の行き先が軒並み空っぽ。
そりゃ、エラー吐くわ。

もうちょっと調べて、ここに行き着く。
どうやら、configureのファイルを書き換えてやる必要があるらしい。
というか、1年以上前のバグに引っかかったのかなぁ……

で、再makeしたのだけれど、やっぱり中身がオカシイ pdo_sqlite.so が出来上がる。
書き換えた configure の指定は見ていないのか、そのルートに入ってないのか。
で、試行錯誤した結果、php-5.3.8/ext/pdo_sqlite 配下の Makefileに行き着く。
shared_objects_pdo_sqlite の指定に、sqlite3.lo の指定が足りない。

Makefile の shared_objects_pdo_sqlite の行を書き換える。

shared_objects_pdo_sqlite = pdo_sqlite.lo sqlite_driver.lo sqlite_statement.lo ../sqlite3/libsqlite/sqlite3.lo

後は、普通にmakeすると、なんとなくよさげなサイズの pdo_sqlite.so が出来上がる。
nmで中身を見て、とりあえず埋まってる事を確認。
make install で、pdo_sqlite.so だけ再インストール。

エラー吐いてたスクリプトを叩いてみてちゃんと動くことを確認。
いやぁ、めんどくさかった……