どさにっき 2.0 〜2006年9月下旬〜

by やまや
<< = >>

2006年9月21日(木)

NTT 用語

_ 通じない言葉(IBM用語とNTT用語)

_ NTT 用語では「工事」「故障」ってのがあるなぁ。ふつーの日本語では工事といったら地面をひっぺがしたりドリルで穴を開けたりするのを想像するけど、NTT では違うもんね。オペレーターのおねぇさんが「ポチッとな」とやるだけの作業も、ソフトウェアのアップデートも、NTT では「工事」。そりゃ昔は文字どおりの工事をやってたんだろうし、今だって回線敷設のようなほんとの工事がなくなったわけではないけどさ、この時代にそんな工事がいったいどれだけの割合であるんだか。「故障」も、よそではふつー「障害」と呼んでる現象のこと。

_ NTT がすげーのは、そのローカル用語を 外部にもそのまま垂れ流しちゃってることだよね。あまりに一般的な言葉をごくあたりまえのふりして違う意味で使ってるから、これが NTT 用語だと気がついてない人も多いと思う。

_ あと、 日立用語


2006年9月23日(土) 秋分の日

SPF で backscatter 防止

_ む。 au が SPF で検証失敗したらバウンスしないようにするって。

_ backscatter といって、宛先不明のメールをほいほいバウンスしてしまうと、spammer が送信者アドレスを詐称していた場合には詐称されたユーザに心当たりのないバウンスが届いちゃうという問題がある。なので、SPF で詐称じゃないと判定されたアドレスならバウンスしても気にしなくていいや、fail なら backscatter になるからバウンスしないで捨てちゃおう、という理屈。

_ 考え方自体はわりと前からあったものなんだけど、そういう仕組みを作るのが現行の実装ではどれもめんどくさいこともあって提案レベルのままだった。実際に実行に移したところはたぶんはじめてなんじゃないかな。ちょっと見直した。えらいぞ au。

Web で man を見たければ

_ ぐぐれ、だそうな。

_ いろんな OS の man が見られて便利そうだけど、いちいち subscribe しなきゃ使えないのかぁ。だったらこれまでどおり これでいいや。サイトは freebsd.org だけど、FreeBSD 以外の man も調べられるし。

_ おまけ。ローカルにインストールされている man ページをブラウザで読めるようにする方法。w3m をインストールすると、w3mman2html.cgi というスクリプトもいっしょについてくる。これは w3m の ローカル CGI の機能を利用して w3m から man を読むために使われるものなんだけど、ちょっと修正すればふつーの CGI としても使える。

--- /usr/local/libexec/w3m/cgi-bin/w3mman2html.cgi      Sat Nov  5 22:30:41 2005
+++ w3mman2html.cgi     Sun Dec 12 23:50:01 2004
@@ -1,13 +1,14 @@
 #!/usr/local/bin/perl

-$MAN = $ENV{'W3MMAN_MAN'} || '/usr/bin/man';
+$MAN = $ENV{'W3MMAN_MAN'} || '/usr/local/bin/jman';
 $QUERY = $ENV{'QUERY_STRING'} || $ARGV[0];
 $SCRIPT_NAME = $ENV{'SCRIPT_NAME'} || $0;
-$CGI = "file://$SCRIPT_NAME";
+$CGI = "$SCRIPT_NAME";
 $CGI2 = "file:";
 # $CGI2 = "file:///\$LIB/hlink.cgi?";
 $SQUEEZE = 1;
 $ENV{'PAGER'} = 'cat';
+$ENV{'LANG'} = 'ja_JP.eucJP';

 if ($QUERY =~ /\=/) {
   for (split('&', $QUERY)) {
これだけ。$MAN と $ENV{'LANG'} は環境に応じて適当に。あとはふつーに HTTP で CGI としてアクセスできるところに置いておくだけ。


2006年9月24日(日)

reject_unknown_helo_hostname

_ reject_unknown_clientは迷惑メール対策としておすすめではない

_ Postfix で reject_unknown_client_hostname のようなパラメータが存在しているのは、危険であってもそれが明確に禁止されていないから、だと思う。とーぜん作者の wietse に確認したわけじゃないのであくまで推測なのだが、彼はぶつくさ言いながらもけっこう要望には答えてくれるし、多様性、柔軟性ということに関しては懐が広い人である。なので、自己責任だからいいだろ、というような人が危険なことをやるのを断固として止める、というような態度はあまり取らない。というわけで、そういう設定パラメータがあるからといって、影響を考えずにほいほい使うとヒドい目にあうことになるので注意しなければならない。Postfix に限ったことじゃないけど、あることが「できる」ということと、それを実際に「やる」ということの間には大きな溝があることは理解しておくべし。

_ さて、上のリンク先の記事曰く、

reject_unknown_hostname は上とはちょっと違って、詳細は省くけどそれほど弊害の大きい設定じゃないと思う。
省かれてしまったので詳細を書くと、reject_unknown_hostname (2.3 からは reject_unknown_helo_hostname)は逆引きとはまったく無関係で、HELO/EHLO で名乗った名前が DNS で正引きできない場合に拒否するというもの。が、「それほど弊害の大きい設定じゃないと思う」だって? 馬鹿いっちゃいけない。逆引きできないホストを蹴る以上にやっちゃいけない危険な設定だ。

_ 具体例をあげると、MTA がプライベートアドレスを持ったホストで、外とのやりとりでは NAT でアドレス変換されているようなネットワーク構成の場合。プライベートアドレスだからホスト名が組織内部の DNS にしか登録されておらず外部からは参照できないなんてことは、spammer ではないまともな企業のネットワークでもちっとも珍しくない。この場合 MTA が正直に自分のホスト名を名乗っても、それは外部から見える DNS には登録されていないので、意図せずとも偽造ホスト名に見えてしまう。よって、HELO の正引きチェックをされると見事にひっかかって拒否されてしまう。

_ こういう場合、MTA はイントラネット上の自分のホスト名ではなく、インターネットから解決できるてきとーな名前を名乗るか、あるいは、イントラ用のホスト名を外からも名前解決できるように DNS に登録するなどしないと回避できない。が、どうすれば回避できるか以前に、そのような問題があることを認識していないサイトが非常に多い。また、その問題を仮に認識して直そうとしても、MTA によっては設定するのがえらくめんどくさいものがある。

_ わりと管理がしっかりしている spam なんか出さない組織であってもこういう問題を抱えているところはかなりの数存在する。そういうところからのメールを捨てたくなければ HELO の正引きチェックをしてはならない。そういう事情を認識した上でなお「外から解決できる正しい名前を名乗りやがれ」という主張をする、誤爆を気にしないパラノイドな人が設定するパラメータが reject_unknown_helo_hostname である。

_ ちなみに、postfix でやるのは HELO を正引きして DNS から見つかるかどうかだけで、それがクライアントの IP アドレスと一致するかのチェックまではしない。ここまでやりたがるパラノイドもいるかもしれないが、さすがにこのような行き過ぎたチェックは RFC2505 で明確に禁止されてる(ただし、RFC2505 は standard track ではなく BCP)。逆に言えば、HELO で正引きをチェックするだけで止めたり、また逆引きが存在しないホストを蹴るのも、明示的に禁止するルールはない。ただ、禁止されてなければやってもいいかといえば、それは子供の理屈だ。

_ 参考までに、各 MTA で HELO で名乗る名前を変える方法。

_ Sendmail: HELO で名乗る名前は通常は $j 一択で、ホスト名と異なる名前を HELO で使うことはできない。複数の IP アドレスを持っているホストでは、O ClientPortOptions=Addr=192.0.2.1, Modifier=h と設定することでソース IP を指定することができて、$j ではなくソース IP についている名前の方を HELO で名乗るようだが(実際の動作は未確認)、やはり任意の名前を設定できるわけではない。ただし、-D_FFR_HELONAME つきでコンパイルした sendmail については、O HeloName=helo.host.name としてやると自分の名前ではない任意のものを使えるようだ(やっぱり未確認)。ちなみに、FFR = for future release なので、将来のバージョンではコンパイルしなおさなくてもふつーに使えるようになるかも。ついでに、ソースを見てたらステキなコメントが書いてあったので引用。src/usersmtp.c から。

 	/*
	**  Send the HELO command.
	**      My mother taught me to always introduce myself.
	*/

_ Postfix: 1.x では HELO で名乗る名前は常に $myhostname と同じであり、任意の名前をつけることはできなかった。2.x から $smtp_helo_name というパラメータができて、これを設定することでホスト名と異なる名前を HELO で名乗れるようになった。

_ qmail: 通常は control/me で設定した名前を名乗るが、control/helohost があればそちらが優先される。

_ もちろん、ホスト名自体をインターネットで通用するものに設定してしまっても HELO は変わるんだけど、ホスト名というのはとーぜん HELO 以外にも広く使われるパラメータである。外部とのやりとりはうまくいっても、今度はイントラ内に設置してある他のホストとのやりとりがおかしくなったりするかもしれない。影響する範囲が非常に広いので、それを把握しないでうかつにいじるのはおすすめできない。


2006年9月25日(月)

無題

_ すっかり涼しくなりまして、もう秋ですよ。つーわけで、ひさしぶりに自転車に乗って出勤。

_ 最初のうちは調子よかったものの、しばらく体を動かしてなかったから 5km も進んだあたりから急に足が動かなくなった。目標タイム75分のところを90分近くかかって到着。死ぬ。もっと精進すべし。


2006年9月26日(火)

skk.vim

_ うほほほ。 vim で skk な日本語入力ができるようになるスクリプトなんてのがあるらしい。もうずいぶん長いあいだ jvim3 で skkを使っていたんだよね。これで最新版の vim に乗り換えできるかもしれない(ちなみに im_customはまったく使いものならなかった)。

_ ……お、おもい。まあスペックの低いマシンなのである程度しかたないのだが。ローマ字をかなに変換するだけでも画面のちらつきが相当ひどい。でも、少し使ってみたかぎりでは SKK の機能としては、jvim3 + skkfep よりも上で、けっこう使いものにはなりそう。

_ とはいえ、SKK としての機能ではなく、エディタとしての日本語入力のしやすさでは jvim3 の方が上かなぁ。まだあんまり使いこんではいないので慣れもあるのかもしれないけど、挿入モードと編集モード、日本語入力モードと ASCII 入力モードのそれぞれをいったりきたりするときは jvim3 のモード遷移が直感的にわかりやすい。スクリプト中に短い日本語コメントを書く場合は vim7 + skk.vim でも十分だけど、長い日本語を書くには jvim3 + skkfep の方がずっと使いやすい。つーか、fepctrl がエラい。

_ そうはいっても、jvim3 からかなり進化した vim7 のありがたい機能が使えるようになるのはかなりうれしい。本格的な長い文を書くにはこれまでどおり jvim でいいけど、それ以外は徐々に vim7 に移行していってもいいかも。


2006年9月27日(水)

無題

_ この前自転車で出動したので、今日は自転車で帰ってきた。途中で晩飯を食ったり本屋で立ち読みしたりしてジャスト2時間。

_ ほんとは2日で片道ずつじゃなくて1日で往復できなきゃいかんよなぁ。体力がないのでそれをやったら死ぬけど。

ヒストリを数える

_ なんか最近ヒストリを sort | uniq -c | sort するのがはやってるみたい。元は このへんなのかな?

_ history ってさ、その実行したターミナルの上での履歴しか出ないんだよね。もちろん保存することもできるけど、わしみたいに screen で attatch/dettach を繰り返して何ヶ月もログアウトしないなんて使い方をしてる場合にはまったく関係ない話だ。zsh は複数プロセス間で履歴の共有ができるらしいけどわしは使ってないし。

_ というわけで、いくつも動いているシェルぜんぶまとめて、ついでに cron やスクリプト中から起動されるような、ふつーはヒストリに残らないようなものまで含めて実行したコマンドの数を数えてやる。

_ 下準備として、root で accton /var/account/acct を実行しといてね。あるいは、たとえば FreeBSD ならば

# echo accounting_enable=YES >> /etc/rc.conf
# /etc/rc.d/accounting start
こんなのを。

_ んで、しばらく仕事した後で次のように叩いてみる。

% lastcomm | awk '$3=="'`whoami`'"{print $1}' | sort | uniq -c | sort -nr | head
7296 sh
1118 cut
 990 cat
 827 sed
 789 rm
 522 grep
 439 awk
 285 sha256
 269 cc
 262 cc1
うーん、なんでこんなに cut が多いんだろ。自分で直接実行した以外のコマンドも数えてるので心あたりがない。sha256 も多いから、portsnap の中から間接的に実行されてるのかな?

_ あるいは、もっと単純に

% sa -n
とかやってみてもいいかもね。

_ というわけで、コマンドの実行履歴を取るってのは、シェルの機能だけではなく、カーネルの機能としても存在してる、っておはなしでした。おわり。


2006年9月28日(木)

dkim-milter

_ おお、 数少ない dkim-milter を使ってる人が:-)。ありがたやありがたや。

_ ということで、ports をアップデートしてみたら dkim-milter に WITH_POSTFIX_MILTER というオプションができていた。さっそく試してみたら、うーん、すでに mail/postfix-current がインストール済みでも、RUN_DEPENDS で mail/postfix をインストールしようとしちゃいますね。

_ というわけで、やっぱり野良ビルドで使うのでありました。日本語情報がほとんどないので、 Sendmail/Postfix 共用のインストールメモを書いてみたので参考までに。


<< = >>
やまや