PCが瀕死になって大慌て


 いつものように俺PCの電源を入れたのだが。

 プーップップッ。
 プーップップッ。
 プーップップッ。
 プーップッ(略)

 ぎゃあああああああああああ。

 人間の方も10秒ほどフリーズしかかったが、我に返ってとにかく電源を落とす。
 電源を落とす前の一瞬、HDDやDVDドライブ(CD入れっぱなしの)なんかがスピンアップしている感じの音が聞こえる。ふむ。つーことは全土陥落に繋がるような障害は無いのかな。
 ともかく、まずはbeep codeの解明からだが、BTOだもんでM/Bの型番も忘れてる。ASUSなこととSocket939なことは分かるが。
 つーことで、母PCからネットに繋ぐ。もし母PCが無かったらと思うと、まあお隣の事務所PCも24時間勝手に触れるからいいんだが、それも無かったらサブPC欲しくなるな。サブPC持ってる人の気持ちが少し分かった気もするぞ。
 んで、ASUSの939マザー一覧を見ると、A8N-VM CSMというのが目に入る。あーそうだ、確かこんな名前だった。んじゃBIOSの種類はっと、AMIか。そういや電源入れる時に「AMIかわいいよAMI」とかそんな台詞が脳裡を過ぎってうざかったっけ。そうだそうだ。

 で、AMI BIOSのbeep codeを調べると、長1短2はビデオBIOS辺りがコケてるぜ、らしい。ふーむ。
 確かオンボードビデオも(買う時はそんなもん要らんと思ってたが)あったはずなので、ビデオカードを引っこ抜いて電源だけ入れてみる。正常なPOST音が鳴った。ほほう。助かったのかも?
 どうせオンボードなんかアナログだろ、ってことでアナログケーブルを探してきて、PCの背面I/Oパネルを見たら何かDVI端子があるんですよ。あれ?
 マニュアル見たら、普通にDVI-Dくらい行けますぜ、って書いてあった。えー。んじゃ繋ぐか。起動。動いた。えー。
 曲がりなりにも同じGeForceなせいか、ドライバの入れ替えすらしてないのに動いてる。楽だな。でも大丈夫かよ(笑)。

 ということで、GeForce7600GTが死んだ。ELSAのカードだったようだ。買ってから一年半くらいかな。
 取り外したカードを見渡しても、俺には外見的な異常は見当たらなかったので、何で死んだのかは分からない。
 まあ、マビくらいはオンボードのGeForce6150でも普通に遊べるんじゃなかろうか、とか思わなくもないが、M/Bに負荷を掛けたくもないし、さっさと新しいカードを買わないとな。参ったなあ。

 あ、何かPCが前より静かだ(笑)。


sendmailの設定を元に戻す


 all.rbl.jpを利用した拒絶設定を試しに導入してみたものの、目に見えるほどの変化は無かった。一割くらいは減ったかなあ。
 dnsblでspamが半分以下になった、というような話を読んで導入したのだが、今はspammer側の対策も進んでいるということかもしれない。であれば、メールの到達性を下げる僅かな可能性の方が危険と思われるので、設定を素に戻した。
 また、Greet Pauseも軽く試してみたが、送信側のタイムアウトに依存する手法であり、安全な(spamでないメールを「一つも」落とさないような)運用を続けることを考えたら正直俺的には無理があると思われるので、これもやめた。

 複合的な手法が効果的、という話もあるのだが、これは設定方法が分からないのでやめた(笑)。PTRが引けないホストにだけGreet Pauseを120秒くらいかませば有効かもなあ、とか思わなくもないが。
 結局、ローカルでフィルタリングして仕分けされた物を、自己責任でざっと見渡すのが一番なのかなあ。

 つーか、お遊びサーバだった頃は気楽だったんだけど、身内の事務所のメールボックスをがっつり収容しちゃってるから、微妙に真面目にやらないとまずいんだよな(笑)。


denyhostsの微妙な問題


 導入三日目のsecurity run outputは5KBだった。素晴らしい。
 …が、何やらdenyhostsを利用したsshへのDoS攻撃がある模様。同種のBlockHostsやFail2banといったログ解析denyツールにも共通する問題として、八月頃に挙がっていたっぽい。
 仕組みは単純なインジェクションのようで、甘いREをアレして誤ったdenyを誘発するっぽい。まあ、そこまでは単純ミスとして仕方ないんだが、同種ツールがことごとく引っ掛かったってのはどうなのよ。まあいいけど(笑)。

 で、問題はその先で、Fail2banやBlockHostsは作者から報告者への回答もあり、最新版では対応済みのようだが、denyhostsは無返答でパッチも更新も出していない模様(報告者のとこにはパッチ例っぽいのがあるけど)。まずいじゃん。メンテナンスする人がいないとか?
 ともあれ、そんな状況じゃ怖くて使えないので、別のどっちかに移行するかなーと思ったけど、Fail2banは何となくLinux向けっぽい雰囲気だなあ。BlockHosts行ってみるかね。雰囲気も似てるし。

 …と思ったが、よくよく見てみたらdenyhostsのPorts版はパッチ適用済みらしい。ふむ。面倒だからこのまま行くか。後々どうしようもなくなったとして、移行するのが物凄く大変になるようなツールでもないだろうし。多分。
 とは言っても、いずれは移行しそうな気がするし、導入三日目で「ヤバいんじゃね」と思ったなら入れ替え時な気もするよなあ。やっぱ入れ替えるか。

 んで、調べているうちに、何故か全く無関係なSPAMブロック設定の話に目移りする。sendmailの設定変更も適当にやってたけど、真面目にFreeBSDの作法を調べるか。
 えーと、/etc/mailに入って、ホスト名.mcを編集するのか。んで、makeしてホスト名.cfが作成され、make installでsendmail.cfにコピーされ、make restartでsendmailが再起動されるんだな。楽でいいじゃないか。
 それって依存関係次第ではmake install restartでいいのかもしれない、とか余計なことを考えたが、何しろ依存関係次第だしメリットも無いのでやめとこう。
 つーことで、FEATURE(dnsbl,`all.rbl.jp')をmcに突っ込んで、真面目に三回のmakeを実行。たぶん完了。
 rbl.jpは手堅いポリシーのようなので(だから選んだのだが)、ある程度はすり抜けてくると思うが、現状では利用者の労力を何割減らせるかが大事なので、10割じゃなくても激しく有り難いのである。
 どちらかというと誤判定が0%に近いことの方が大事だ。その点で海外のブラックリストは怖いので見送った。
 ということで、有志の人に感謝しつつ、後日また成績の報告でも。

 で、denyhostsからBlockHostsへの移行である。
 まずdenyhostsだが、多分入れた時と逆の手順で外せばいいだろう。/usr/local/etc/denyhosts stopして、/etc/hosts.allowと/etc/rc.confから関連箇所をコメントアウトして、最後にpkg_deinstallを…。
 いやいや、その前にBlockHosts入れちゃっていいよな。えーとどこにあるんだ。えーと。

 Portsに無いんじゃね?

 しばらくdenyhostsで行くか。ハハハ。
 pam_afも調子に乗って入れてみるかなあ。でも不急の物は入れない方がいい気もするな。当分このままでいいか。


rootkitも調べよう


 何しろ、契約して軽く設定を見渡したっきり、かなり長期的に半放置状態だったのである。それほど危険な状況ではないと思ってはいるが、何となく気にはなる。
 まあ、ブルートフォース系は来るだろうけど、rootのパスワードは簡単には破れないだろうけどな。一般ユーザーも、ここ最近いじるようになる前までは俺とあ〜ごんだけだった気がする。多分二人ともそうそう安直なパスワードは使わないだろう。
 特にrootのパスワードは、大昔に連絡の途絶えたっきりの友人との内輪ネタだし、しかも英数モードのままカナ入力して適当にシフトを押したり押さなかったり(つまり元文字列が"ぱすわーど"だとすると"f{r0|s@"みたいになる)、という、一見すると無意味な文字列だけどカナ入力民族には楽に打ち込めて覚えやすい便利げな文字列を使っている。他で同じパスワードを使っているとかいう罠も確か無いと思ったし。

 つーか、いろんな無料会員制サービスが溢れかえる世の中だけど、平文でデータベースに登録するのやめろお前ら。
 あとリマインダーもうざいです。何が母親の旧姓だちくしょう。パスワード盗んでくださいと言ってるようなもんじゃないか。質問と無関係の答えを入れてるけど、パスワード二つ覚えなきゃならないのと変わらん上に、片方しか認証に使わないから安全ですらないし。

 まあいいや。本題本題。

 ともかく、気になったので検査する。
 えーと、chkrootkitとrkhunterとやらを使ってみるか。rkとはもちろんrootkitのことでしょう。そうでしょう。huntしてくれるのですね。便利そうだ。
 つーか、両方ともportinstallしてrehashして走らせるだけでした。ああ楽だ。
 chkrootkitは何も検出せず。rkhunterは何個かwarningが出たけど、見ていくと問題の無い物ばかりだった。オーケー。
 cronに登録して使う方法も書いてあったけど、別にいいかなあ。まあ、重くなるとかは無さそうな気もするけど。

 ついでに、昨日入れたdenyhostsのその後だが、導入半日で既にメールサイズが260KBほどに激減。大半は導入前の半日分の攻撃ログなので、明日はさらに大幅に減りそうだ。スリーストライクアウトで設定したから、三日後には完璧になっているのかな。何だか成長を見守る気分で楽しいな。ある意味学習型のツールだからかな。


security run outputが長すぎる


 さくらで借りてる鯖から毎日自動的に送られてくるセキュリティレポートだが、sshログイン失敗のログがとてつもなく大量すぎる。恐らくブルートフォース攻撃のログだな。勘弁してくれ。
 まーでも別に読み飛ばせばいいんだけど、と思いながら何となくファイルサイズを見たら、たった一通で650KBとか。おいおいおい。これはいかん。何とかしよう。

 ということで、まずはsshdの設定を一通り見てみる。ふーむ。ブルートフォース攻撃があっても全く気付かなくなるような設定は可能っぽいなあ。でもそれは嫌だな。一応は攻撃のログが残ってくれないと。
 んで、とりあえずパスワード認証を切って、公開鍵認証のみに変更してみる。少し待つと、相変わらず/var/log/auth.logが肥大化している。不正なユーザー名を試された時点でログに残るのか。うぜえ。
 ここで、連絡用Wikiのエラーログも妙に膨れ上がっていることに気付いたので、面倒だがローテートの設定。どうやらnewsyslogなるツールがデフォで使われてるようなので、ざっとmanを読んで、設定ファイルを適当に書き換えて、試しに一回実行してみる。綺麗にローテートする。こりゃ便利。

 それはともかく、何かうまい方法が無いかと探したのだが、pfというパケットフィルタ機能が使えないと駄目、という物が多かった。pfの導入方法を適当に調べると、何やらカーネル再構築がどうこう出てきた。怖いんで速攻で諦める。
 pfを使わないっぽいツールを調べると、pam_afとかdenyhostsとかが見付かる。どっちがいいのかさっぱり分からんけど、PAMはあまりよく分かっていない、TCPは何となく分かる気がする、という理由で後者を選択。
 では早速インストール開始。

 以前の教訓から、インストールの最後に出るメッセージはちゃんと読もう、と思ったので、読む。
 ふむふむ、/etc/hosts.allowを書き換えて、sshdの時は/etc/hosts.deniedsshを読み込むようにするのかな。よく分からんがサンプル通り書いとこうか。
 んで、hosts.deniedsshが無いなら自分でtouchしろ、とのこと。ハハハ。オーケーオーケー。touch /etc/hosts.deniedsshと。
 あとはもちろん、/etc/rc.confにdenyhosts_enable="YES"の追加だな。

 そして、/usr/local/etc/denyhosts.confを編集開始。
 ふむふむ、PURGE_DENYで有効期限を決める感じか。無期にすると事故った時に怖いな…。うーむ。どうするか。
 悩んでたら、次の項目にPURGE_THRESHOLDという設定が。ここで設定した回数以上の再犯者は無期になるっぽいな。併用すれば問題ないか。短めの有効期限にして、3ストライクアウトにしよう。万が一事故って自分が入れなくなったら、期限が切れた隙にログインしてしまえば何とでもなる。気がする。
 失敗回数の設定もあるな。これはまあ、そんな厳しくなくてもいい気はするな。ブルートフォース攻撃なんてもんは相当な回数で試行しないと破れるもんじゃなかろうし。デフォだとかなり厳しい設定になってるけど、レンタル鯖だからリモートシェル使えなくなる方がずっと怖いんだよな。つーかログがうざいのが元々の動機だし。ということで大幅に緩めておく。
 さらに、共有DBがあって、お互いに拒否情報を出し合ったり、○○台以上のホストに拒否食らってる奴の情報を貰って拒否とか何とか、便利そうな機能なので早速使おうと思いかけたんだけども、何かの間違いで俺がログイン出来なくなると嫌なので使わないことに。どんどん緩くしちゃうよー。

 んで、拒否リストを一定期間で解除する機能を有効にするには、コマンドラインに–purgeを書かなきゃならんのだが、どこで書くんだろう。んー。通例だと/etc/rc.confにdenyhosts_flags="--purge"とか?
 調べたけど良く分からんので、そのまま試した。オーケーちゃんと動いたぜ。
 そして、起動するなり早速どこかのホストが規制リストに加わっていた。ハハハ。ざまー見ろカス野郎が!

 ということで、メールのサイズが縮むことを祈るのであった。出来れば大幅に。
 ついでにブルートフォース攻撃の心配も軽減された(本来逆だが)ので、sshのパスワード認証を復活させても別にいいような気がしなくもないが。うーん。どうなんだろうなあ。