naoki86star

インターネットの片隅でなにかしら書いてみる

メールフィルタ機能(UNIXサーバでの思い出話)

 昔のunixでサーバ一台にアカウントがたくさん登録されていたりしてls -l /homeするとユーザー名がリストされたりあるいは/etc/passwdとかでユーザー一覧とか見れたり。そのサーバがemailを受信できるようになってると、各ユーザーはmailコマンドとかでメールが見れたりする、あるいはそのインタフェースを用いてローカルのメーラーソフトウェアとか動かせたりする。実際に動かしたことあるのを思い出せるのはemacsくらいだろうか。*1

 .mailfilterって仕組みというか受信メールをフックする機能が存在して、$HOME/.mailfilterにメールを受信したら起動したいコマンドを記述するとメール受信時にそのコマンドを起動して受信メールソースをコマンドに標準入力に流し込んで処理することが可能だったのである。元々はメーラーの機能でメールボックスディレクトリに保存してくれるが、自分でそれを全部再定義することだってできたのだ。*2*3

 というのを思い出して、今時のpostfixはどうなのかというのを調べてみたら、当然なのか同等の設定ができるようであった。mail filterを縮めてMilterと呼ぶsendmail以来のprotocolと呼んでいいらしい。postfixちゃんとわかってないけどもmaster.cfを眺めるとメールを受け取るところから各プロセスをそれぞれの機能モジュールで数珠つなぎに処理していく感じだと思うので、すると当たり前ながらその途中とか最後のほうでユーザーの処理したい機能を定義してあげるとよいだろう、というかそれができるとのこと。*4*5

 かつて一時期この仕組みで趣味で動かしていたのは(postfixじゃないが)、ガラケーのメーラーから情報を飛ばしてそれをサーバに保存するとかちょっとしたクエリー処理させてメールバックさせてたこと。ガラケーでGPS情報が取れたりとか写メで画像がそれぞれメールで簡単に飛ばせたので画像ファイルをサーバに転送して保存するみたいなことしていた。

 こういう受信契機でコマンドを起動するといった系というのは、当然セキュリティ的にはもう危険極まりない状況になりやすいわけで、オープンなサービスをこの仕組みで作る気にはとてもならない。またスマートフォン時代になったら、そこからわざわざメール形式で飛ばすというのはナンセンスな感じ。

*1:いや、popクライアントとして使っていたか

*2:こう書いたが処理して情報取り出すだけでメールの保存まではしてなかった

*3:これは、例えば今のさくらインターネットってところのレンタルサーバにはメールの機能も含まれてるけども、ここのはsshでアカウントにログインできたりして、今でも.mailfilterを使えたりする。

*4:master.cfで定義して、main.cf#smtpd_recipient_restrictions で起動対象を絞る

*5:と調べてていてここPostfix SMTP リレーおよびアクセス制御に辿りついた。うむむ読んでおこう。