最近、臨時用2ch串のことしか書いてないような気がするのだけれど、
実際、ここ最近はなんだかんだで手を入れているし、
Apache2.4の環境も今ひとつ安定してないのである意味仕方のない事なのかもしれない。

今回の変更は mod_security が今ひとつNGワード、許可ワードをキッチリ判定して
くれないことに起因する。

今までは↓な感じで判定を書いていて、

# POST Method logging
#SecRule REQUEST_METHOD “post” phase:1,pass,nolog,auditlog,t:lowercase

# NG List
SecRule ARGS:MESSAGE “@pmFromFile /opt/htdocs/http/proxy2ch/setting/nglist.txt” deny,status:406
SecRule ARGS:submit “@pmFromFile /opt/htdocs/http/proxy2ch/setting/ngtitle.txt” deny,status:406
SecRule ARGS:FROM “@pmFromFile /opt/htdocs/http/proxy2ch/setting/ngname.txt” deny,status:406

# Allowlist
SecRule ARGS:MESSAGE “@pmFromFile /opt/htdocs/http/proxy2ch/setting/allowlist.txt” allow,log,noauditlog

# NG List2
SecRule ARGS:MESSAGE “@pmFromFile /opt/htdocs/http/proxy2ch/setting/nglist2.txt” deny,status:406

まずNGワード(nglist.txt)があれば除外、
次に許可ワード(allowlist.txt)があれば許可、
最後にURL(nglist2.txt)を含むかチェックしてあれば除外
txtファイルの中身は引っ掛ける単語を、2chと同じ文字コードで書いて羅列。

という感じにしていたのだけれど、許可ワードで引っ掛けてるはずの、
ニコニコ動画やらyoutubeやらサンスポやらをうまく判定してくれず、
その後のURLチェックまで進んで弾かれていた。
どうも前後に日本語があるとダメなような気がする。

一時期の違法薬物関連でブロックしたログをチェックしてなかったら
ずーっと気が付かないままだったんだろうなぁ……

で、なんとなくディレクティブの書き方が足りなかったりするんだろうなぁ……
とは思ったものの、基本的に英語のドキュメントを調べて試しては面倒くさいので
単語チェックもPHP側に処理を全部任せてしまうことにした。

臨時用2ch串の運用当初はできるだけ低レベルなレイヤでの処理を心がけてたのだけれど
正直、仕方がない面もある。
最近の mod_security はLuaとかlibxmlとか使い始めて変な方向に重厚になってたし
頃合いといえば頃合いなのかもしれない。

という訳で、ざっくりとPHPのコードを書いて単語チェック機能を実装。
したまでは良かったのだけれど、Apacheの設定ファイルから、
mod_security の設定を全部抜いて再起動すると、2.4系列にしてから嫌というほど見た
Segmentation fault(11) が大量発生。
ついでに、 exit signal Bus error (10) も大量発生。

困ったのは原因がまったく判らない。
core吐かせても、PHPのハンドラに処理が渡った後コケてる位しか判明しない。

で、小一時間ほど臨時用2ch串含めてkonata.netの全機能停止。
というか、何度Apacheを再起動させたか判らん。
ここ2日の臨時用2ch串がよく落ちてたのは、原因解明の為に再起動を繰り返したから。
この間にApacheのバイナリ再作成やら、組み込みモジュールの再作成やら、
色々試すも結局、原因は分からずじまい。

そうこうしているうちに、なぜかエラーがパッタリと止まる。
設定ファイルはもちろん弄ってない。
バイナリもエラー吐いてた時と変わってない。
でも、正常に動いてるっぽい。
気味が悪い。

しばらく考えると、どうもPHPのAPCモジュールが戰犯のような気がしてきた。
速度向上に定評があるけど、問題のある事でも定評があるモジュールだし。
大量のエラーでキャッシュが一回りして一掃されたんで大丈夫になったんじゃなかろうか

原因が掴めないままというのは、かなり嫌な感じだ。
が、もう追求もできないのでどうしようもない。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です