04/19日の応答ログを漁っていると、特定の時間に集中して水遁された形跡を発見。
15:04~15:10位にかけて、合計9回水遁を食らっている。
けれど、水遁の履歴を見た感じでは、それっぽい書き込みがない。

試しに、自分用の忍法帳で書き込みを試すと、こっちも水遁をもらっている。
水遁されるような書き込みをした記憶は無いのだけれど。

水遁履歴を抜き出すと、書き込みに共通点を発見。
ホスト名が全部、 torsrv8.snydernet.net になっていた。
得られたログからの推測に過ぎないけれど、
書き込み履歴っぽいのがあって、履歴の同一IPの忍法帳が全部焼かれたような気がする。

ついでに、このホスト名がログに出て来るということは、
リスト作成のスクリプトにバグがあるということだったりする。
ホスト名チェックを関数化した時に、変数を直してなかったらしい、
単純なだけにかなりカッコ悪いバグ。
就寝前の薬のんで注意力散漫な時にコード書くとろくなことが無い。

いそいそとスクリプトを直し、今度はきちんと動くことを確認して作業完了。
その後、プロクシが変わって、書き込みは出来るようになったので、
まぁ、よしとする。

気がついたのは、運が良かったと思う。

臨時用2ch串の2chに要求を投げた結果ログが50MBを越えてたので削除して、
念のため、少し時間を置いてキチンと動いてるか確認してみたところ、

書きこみが終わりました。
画面を切り替えるまでしばらくお待ち下さい。

の文言がなんかヘン。
具体的に書くことは避けるけれど、いろいろとおかしい。
加えて、忍法帖が焼かれた後にもかかわらず、ログには修行が足りませんが出てこない。

これはおかしい。
試しに、自分で書いてみると書き込みが終わりましたの表示は出るものの、
実際には書き込めていない。
あれか、書き込んだ気分だけ味わえるって事か。中々粋なことをする。

HTTPヘッダをみた感じだとsquidで立てたプロクシで、torを偽装してるような感じ。
とりあえず、応答内容をみてエラー扱いにして別プロクシを使うように変更した。

が、対処を先にしてしまったのであやしいプロクシのIPを取り忘れた。
2ch用に立てられたプロクシだと思うので、IP確認して殺しておかないといけないのに。

最近、臨時用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モジュールが戰犯のような気がしてきた。
速度向上に定評があるけど、問題のある事でも定評があるモジュールだし。
大量のエラーでキャッシュが一回りして一掃されたんで大丈夫になったんじゃなかろうか

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

という訳で、
最近後手後手に回りつつあれこれ制限ばかり追加している臨時用2ch串について。

3/29に始まった大規模規制の影響で、臨時用2ch串が大賑わい。
ここ数日の移り変わりを見ていくと、書きこみ試行回数が3倍近くになっている。

日別書き込み試行回数
03/28 831回
03/29 1393回
03/30 2220回
03/31 2252回
04/01 2387回

これには「上記全てを承諾して書き込む」と
「確認して書き込む」も含まれているので、実際の書き込み件数はもう少し少ない。
で、広告収入が上がって中の人はホクホクです。
というだけなら幸せなのだけれど、そういうわけにもいかないのが世の常。

書き込みに使っているIPアドレスは常に一つなので、
書き込み失敗の可能性も飛躍的に増大している。

04/01を例に出すと、およそ36秒に一回の割合で書き込みが試行されることになる。
86400秒 / 2387 = 36.19 秒/回

実際は、利用者の生活スタイルに準拠する形でアクセス数に偏りが出るので、
人の多い夕方から深夜1時にかけては結構な頻度で書き込みに失敗している気がする。

NG理由調査用の2chに要求を投げた結果ログを見たところ、
03/26日~現在までのログが残っていて、その期間中の書き込み結果はこんな感じ。

書きこみが終わりました 9372回
しばらくたってから投稿してください 4876回

ログを日でわけるのが面倒くさいので大まかな感触だけれど、
3回に1回は書き込みに失敗している。
ここ数日のピークタイムに絞れば、2回に1回程度の割合で失敗している気がする。

中の人は一日に1回書くかどうかで、書き込み失敗の経験は殆どなかったので、
正直、ここまでコケてるとは思ってなかった。
samba規制やバーボン送りになってないだけマシだったのかもしれない。

ちなみに、通常の書き込み失敗であれば、
臨時用2ch串はIP単位の5分間のクールタイムをカウントしないので、
2ch側の制限時間が過ぎた後は即時に書き込める。
まぁ、その間に他の人が同じ板(鯖?)に書き込みしたらsambaにひっかかるし、
忍法帖も依然としてあるので、結果としてやっぱり書き込みは失敗するのだけれど。

対処方法は書き込めるIPを増やすしか無いのだけれど、
そもそも、臨時用2ch串の中の人のIPはBBQリスト入りしているし、
複数のプロクシがとれても、書きこみを振り分けるような仕掛けもいるし、
「上記全てを承諾して書き込む」なんかは同じプロクシに振り分けなければいけないし、
同じ人が書きこむ度にプロクシを無差別に振り分けるとIDが今以上にコロコロ変わるし、
と、面倒くささいっぱいである。

しかも、どれもこれもざっと考えて対処ができないこともないのが嫌な感じだ。
技術的に無理筋だったりすれば、いい感じに諦めてオシマイなのに。
春だから中の人はなんにも考えずに寝てたいのに。
ついでに、こんな大規模規制は数年に一度だろうから、
わざわざ作り込む程の事でもないような気がする。
と、言い訳ばかりが出てくるダメな大人。

ぱぱーっと規制終わんないかなぁ……
そりゃ、広告収入は減るし、中の人的にはお金が貰えるのはやっぱり嬉しいけど、
その広告収入は、書き込めない人の不幸がタネになってるわけで、
「書き込みできる!」と思わせといて、「書き込みできませんでした(´・ω・`)」
では、あんまりといえばあんまり。

多かれ少なかれ後ろ指さされるのは臨時用2ch串の性質上仕方ないとして、

臨時串の中の人:鯖の電気代程度稼げる
規制された人:とりあえず、荒らししない程度に書き込める
2chの中の人:適度に●が売れる

くらいが罪悪感もなくて丁度いい。
新しいコード書く必要もないし。

世の中うまくいかんね。

出来ればこんなエントリは書きたくないのだけれど、
事象が起こってしまった以上書かなくてはならないような気がする。

昨日、ぼーっとログを眺めていたら発見した恐らく違法な薬物販売?のスパム書き込み。
tor経由のアクセスを弾くようにしてひと安心。
と、思っていたのだけれど、今日の夕刻過ぎ、今度はWebプロクシを使って書き込みされてしまった。
Webプロクシの存在自体は知っていたので予想されて然るべき事態だったのだけれど、
そこはツギハギでやってる臨時用2ch串なので、当然のように備えがなかった。

念のため、Apacheのログとmod_securityのログも洗い出すと、
11時頃に tor 経由で数回アクセスを試みた後、書き込みできないので、
電話番号を2バイト文字にしてNGワードを回避しようとした形跡が伺える。
実際は、 tor だから弾かれたのだけれど。

その後、18時少し前に再トライしてきて、この間にWebプロクシを使うことを思いついたようだ。
Webプロクシから一度NGワードで弾いて、その後文言変えて書き込みを3回されてしまう。

余談だけれど、mod_securityで弾いたログの中に、
「ローンの一本化」とかいう如何にもブラックな業者が立てそうな
名前でスレッド建てようとしてたのがあったりして、ゴリゴリとSAN値を削られる。
臨時用2ch串の初期も初期、スレッド立てができた時代に、
「けいおんの誰それのウンコ食いたい」みたいな本当の糞スレ立ててたのがいたのは、
まだマシだったのだと気がついた。

なんていうか、なんでこういう事するかなぁ……
2chの運営もさぞ苦労していることだろうと思う。
それを回避してる自分が言えた義理では無いけれど。

仕方が無いので、ここを参考に本家のBBQとBBX、DNSBLのチェックを行うようにした。
引っかかったら403エラーを返す。
ついでにNGワードも増量。
ここまでやってすり抜けられたら、まだかなCGIに登録されて無ければ、
もう2chにそのまま書けるだろうと思う。

対処後、警視庁の情報提供フォームにもう一度報告。

できることはやったと思うけれど、
これで完全に防げるかというと、正直自信がない。
次ダメだったら、誤爆が出るから出来れば入れたくないけれど、
電話番号検出コードを入れるしか無いか……

なんか、面倒なのに目をつけられてしまったなぁ……