どさにっき 3D 〜2011年3月下旬〜

by やまや
<< = >>

2011年3月22日(火)

災害と車中泊

_ 連続3日以上の車中泊は危険 エコノミークラス症候群にご注意

_ 3日どころか1週間以上の車中泊を年に何回かしてるけどなんともないです。年間20日〜30日ぐらいは車で寝てる。もちろん対策してないわけじゃなくて、不自然にならない姿勢で寝られるように工夫はしてる。つーか、車を選ぶときにいちばん重要視する検討項目が「足を伸ばして寝られるかどうか」だし。ふだんからそういう備え(?)をせずに、いきなり被災地で何日も車中泊をしてたらたしかに危険だろうね。

_ 職業柄リモートで障害対応しなきゃいけないときがあるのでノート PC への給電手段は常に確保しておく必要があって、また、不意のバッテリーのトラブルへの備えとして、 ポータブル電源を常備してるんだけど、でもあくまで非常装備であって、ふだん車中泊するときはほとんど電気は使わないので実際に使う機会はめったになかったりする。が、東電の計画停電のせいで車中泊ではなく自宅で有効活用されそうな気配。こんなことのために買ったもんじゃないんだけどな…。といっても、うちの近辺はまだ一度も停電してなかったりするんだが。なんでだよ。停電しなきゃ不公平でしょ。


2011年3月24日(木)

無題

_ アルコールには殺菌力があるので、アルコール耐性がある人は疫病などにやられにくく、そうでない人は淘汰されていった。日本はヨーロッパに比べて醸造技術の獲得が遅れたのでそのような淘汰が起きなかった。また、日本の川は急流が多いため、澱んで汚れた水を摂取して腹をこわすようなことは起きにくく、水のかわりに酒を飲むから有利だとはいえなかった。これが日本人にアルコール耐性のない人が多い理由である。

_ …という説を聞いたことがあるが、だとしたら人類が醸造を発明してからわずか数千年で急速に淘汰が進んだことになり、かなり無理がある。そんなわけで、この説は信じてはいないけど、でもおもしろい考えかただとは思う。

_ こんなヨタ話を思い出したのは、うちに水を供給してる浄水場でも I-131 が検出されたというニュースが流れたから。水がダメなら酒を飲めばいいじゃない。というわけで、ひとり酒。

_ ってゆーかさー、みんな 過剰反応すぎ。現状ではラドン温泉の方がよっぽど放射線量が多いのに。有馬温泉まで行かなくても自宅で湯治できるよ、と喜ぶことすらできない。このまま関東に留まって健康被害を受ける確率よりも、放射能から逃げるために西に逃げようとする最中に交通事故に遭う確率の方がたぶん高いんじゃないかと思う。地下ではなく地上でじゃんじゃん核実験をやってた50年ぐらい前は、気流に乗って日本にもじゃんじゃん放射性物質が流れてきて、ここ数日の日本どころじゃないぐらい高い放射能に汚染されてたけど、そのころ子供だったおっさん達は今でもピンピンしとるよ。

_ もちろん、これは「現状の放射線レベルなら」という話であって、この先もずっと気にしなくていいというわけではない。今後どうなるか注視する必要があるのは言うまでもない。

_ あ、あと、政府が隠蔽してる、とかわめいてる人もいるようだけど、原発の中で起きてることはともかく、外に放出された放射能については隠蔽は不可能。今は世界の注目の的になってるので、専門家だけでなくマスコミもプロ市民のみなさまもそれぞれ独自に計測してる。そんなもんまで隠蔽できるはずがない。明らかに異常な値が検出されれば、政府が発表しなくたってそっち方面からそういう話が聞こえてくるはず。


2011年3月29日(火)

dovecot2

_ これまでずっと 1.2 を使ってたけど、2.0 が出てもうずいぶん経つのでいいかげん新しいのに入れ替えようかと。その作業メモ。

_ うちでは postfix を使ってるけど、メールボックスへの配送は postfix のものではなく dovecot の LDA を使ってるので、アップデート作業中に外からメールが届くのはよろしくない。ので、まずローカル配送を一時的に止める(postfix 自体は止めない)。まあ、別に放置してエラーになってもバウンスするわけじゃないけど。

# postconf -e defer_transports=local
# postfix reload
SMTP AUTH の認証も cyrus sasl ではなく dovecot のものを使ってるんで、ほんとはこれも止めた方がいいんだけど、自分がメールを送らなければいいだけなので放置。

_ dovecot 2.0.11 (+ sieve plugin) をインストール。バージョンアップにともなって設定ファイルがだいぶ変わってるので作りなおす。

# doveconf -n -c dovecot.conf-1.2 > dovecot.conf-2.0
いろいろ警告が出るが、よーするに古い設定だから最近のバージョン用に書き換えたよ、というだけなのでたいてい気にしなくてよい。新旧バージョンで根本的に互換性のない部分以外はこれで変換できる。うちではそういう互換性のない機能は使ってないので、これ以上いじる必要なし。

_ postfix 側の設定も修正する。といっても、dovecot の LDA の名前が deliver から dovecot-lda に変わったので追随するだけ。古い名前でも使えるように symlink が張ってあるので、書き換えなくてもちゃんと動くけど。

mailbox_command = /path/to/dovecot-lda

_ 起動。

# /usr/local/etc/rc.d/dovecot start
# postfix reload
MUA でふつーにアクセスできることを確認する。

_ ローカル配送は止めてるので、作業中に届いたメール(spam ばっかりだけど)がキューに溜まっている。失っても困らない spam の queue id を調べて、そいつだけを強制配送させてみる。

# postqueue -i queue-id
ちゃんとメールボックスに配送されれば、postfix から dovecot へのローカル配送の連携も問題なかろうということで、ローカル配送を再開してその他のキューも吐き出す。
# postconf -e defer_transports=
# postfix reload
# postqueue -f
おしまい。


2011年3月30日(水)

dovecot LMTP

_ 単に dovecot のバージョンを上げただけだとつまらんので、新しい機能を使ってみる。ローカル配送を LMTP に変更しよう。別にそれがやりたくて上げたわけじゃないけど。

-- dovecot.conf
protocols = imap pop3 lmtp
protocol lmtp {
  mail_plugins = sieve
}
service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
    user = postfix
    group = postfix
    mode = 0660
  }
}
-- postfix/main.cf
mailbox_transport = lmtp:unix:private/dovecot-lmtp
#mailbox_command =	# コメントアウト
それぞれ再起動してテストメールを送ってみると、…ありゃ、バウンスしてしまった。postfix からは user@domain 宛に送るけど、dovecot 側のユーザデータベースは @domain のないユーザ名のみになってるので、その不一致で user unknown になったらしい。とゆーことで、dovecot 側で @domain なユーザを食えるように修正。
passdb {
  driver = passwd-file
  args = username_format=%n /usr/local/etc/dovecot/dovecot.passwd
}
userdb {
  driver = passwd-file
  args = username_format=%n /usr/local/etc/dovecot/dovecot.passwd
}
username_format=%n を追加しただけ。

_ postfix (や、sendmail その他の MTA でも)はもちろん自前でメールボックスに配送することもできるけど、それを使わず dovecot にそれをやらせるのはもちろん理由がある。

_ dovecot は IMAP/POP サーバなので、メールボックスの扱いかたを知っている。どのユーザのメールボックスがどの場所に置いてあるかとか、mbox なのか Maildir なのかとか。もちろん postfix 側でもそれは設定することができるけど、dovecot と完全に同じ設定になっていなければならず、そのへんをチェックするのはめんどくさい。メールボックスへのアクセスを dovecot に一元化してしまえばそんなの気にしなくてもよくなる。

_ メールボックスに格納されるのは mbox だの Maildir だのといった形式的なものだけでなく、フォルダにどんなメールがあるかとかどのメールが未読でどれが既読かといった情報も含まれる。LDA/LMTP でローカル配送をおこなうと、配送が完了した時点でこのインデックスの更新もおこなわれる。MTA の LDA や procmail などの汎用品で配送する場合、インデックスの更新はログインしてメールボックスにアクセスしたときにおこなわれることになるが、前回ログアウト時からの差分が大きいとこの時間が馬鹿にならず、ひじょーに重く感じることになる。ローカル配送を LDA/LMTP でおこなうと IMAP が軽くなる。

_ procmail なんかを使うのはフォルダへのメールの振り分けするのが大きな目的だと思うけど、それは IMAP 的には間違っている。IMAP では sieveという道具を使うのがお作法。フォルダへの振り分けだの転送だの不在応答だのといったありがちな要望はたいていサポートしてる。また、ssh でサーバにログインして ~/.procmailrc を更新して、なんてのは、つまりサーバにログインできることが前提だが、それじゃ仮想アカウントでは使えない。sieve は実アカウントのないユーザでもネットワーク経由で更新できるように なっている(対応してるクライアントはほとんど存在しないけど)。これを使うためにも、LDA/LMTP が必要になる。

_ ということで、dovecot の LDA/LMTP を使うことにはたくさんのメリットがありデメリットがない。もちろん、これは POP/IMAP サーバが dovecot ではなく cyrus などでも同じことがいえる。IMAP サーバに LDA/LMTP の機能があるならば MTA のものを使わずそっちを使うべき。

_ LDA と LMTP のどちらを使うか。LMTP は並列配送度を上げられるので大量のメールが届く環境ではかなり高速化できるかもしれないとか、LMTP は TCP で listen することもできるのでメールを受けるホストとメールボックスを置くホストを物理的に分離することが容易になるとか、LDA はメール1通ごとにプロセスを起動するけど LMTP はデーモンなのでプロセス起動のオーバーヘッドがないとかいうメリットがあるけど、うちのような小規模なところでは大差ない:-)。cyrus だと LMTP で並列配送したメールは受信者が複数でも実体はハードリンクでディスク消費も I/O もひじょーに少なく済むという決定的な強みがあるんだけど、dovecot ではそんなことはしてくれない。


2011年3月31日(木)

dovecot2 でアクセス制限

_ 引き続き、2.0 の新機能。1.x でもアクセス制御ができないわけではないんだけど、その 設定はユーザごとにおこなう必要があった。ユーザごとに異なる設定ができるのできめこまかい制御ができるんだけど、ユーザごとに設定するということは認証が完了した後でしか制限が発動しないということでもある。辞書攻撃をしてくるようなアホのせいで認証バックエンドに負荷がかかっていても、蹴ることができず耐えるしかない残念なシロモノだった。どーしても認証前に拒否したければ inetd 経由で起動させるという変態的な方法を取るか(2.0 ではそれもできなくなったらしい)、pf なり iptables なりを使って IMAP とは別のレイヤで対策する必要があった。2.0 になって tcp_wrapper で認証前に止めることができるようになったので、そいつを設定してみる。

_ …と、いちいち長ったらしく前置きしたのは、かんたんに使えるわけではないから。--with-libwrap で configure からやりなおさなきゃいけない。なぜかドキュメントにも載ってないし。tcp_wrapper 対応でコンパイルしたら、さらに以下の設定を追加。

login_access_sockets = tcpwrap
service tcpwrap {
  unix_listener login/tcpwrap {
    user = $default_login_user
    group = $default_login_user
    mode = 0600
  }
}
ここまでやって、やっと使えるようになる。
imap: 192.0.2.1 : deny
imap: ALL : allow
これで指定したアドレスからの接続を蹴ることができる。従来の allow_nets によるユーザごとの制限も可能だけど、まあぶっちゃけ使う機会はないと思う。

_ ほかにも、どうやら時間あたりの接続試行回数制限とかの機能(?)が追加されてるっぽいんだけど、そのへんのことは一切ドキュメントに書かれておらず、具体的にどんな内容でどう設定してどう使うのかまったく不明。

_ また、接続元アドレスによって異なる設定を使いわけるなんてこともできるようになったらしい。

remote 192.0.2.0/24 {
  parameter = value
  ...
}
みたいな構文らしいんだけど、これまたドキュメントがまったく存在しておらず実際のところどうなのかは不明。とりあえず syntax error にならないことだけは確認した。


<< = >>
やまや