2008/01/02
[Postfix] バーチャルメールボックスドメインでMDAを使う場合
情報が少なくて苦労したけど、何とか設定に成功したのでメモ。
Postfixでは、システムアカウントのメールボックスに配信を行うときはlocalがやりますが、バーチャルメールボックスの場合だとvirtualが配信を行います。
で、localだと配信エージェント(procmailとかね)を使うのは簡単(.forwardに書くだけ)ですが、バーチャルメールボックスの場合はvirtualが直接メールボックスに配信するので、MDAが利用できないため、spamassassinやbsfilterなどのスパムフィルタや、個人的なメール振り分けができなくなっています。
でいろいろ調べた結果、localのようにエージェント経由でメールボックスに配信するのではなく、MDAに直接メールボックスへの配信が行えるようなのでやってみました。
環境:
OS: Debian Linux 4.0r1(lenny)
MTA: Postfix 2.4.6-2
Postfixでのバーチャルメールボックス運用は、本家の
Postfix バーチャルドメインホスティング Howtoでも書かれているので割愛。
今までMDAはずーっとprocmailを使ってたんですが、レシピの書き方が複雑で間違えやすいのに辟易してたので、courier-MTAシリーズのMDA、maildropを使ってみました。
さっそく必要パッケージをGET。
apt-get install maildrop
その後、配送マップをエディタで作成します。
以下サンプルでは/etc/postfix に transport と言うファイル名で配送マップを記載します。
[/etc/postfix/transport]
virtualdomain.domain maildrop:
もちろん、作成した後は「postmap /etc/postfix/transport」でハッシュデータベース化します。
その後、main.cfに以下の1行を足し、バーチャルドメインでの配送をmaildropに落とすように指定します。
[main.cf]
transport_maps = hash:/etc/postfix/transport
virtual_transoprt = maildrop
(08/05/17 追記)
main.cfには以下の一文を追記してください。
maildrop_destination_recipient_limit = 1
これを入れないと、複数Toに入れたメールアドレスが送信できないみたいです…。
その後、maildropエージェントでの配送設定を変更します。
[master.cf]
maildrop unix - n n - - pipe
flags=Ru user=mail argv=/usr/bin/maildrop -d ${user}@${nexthop}
※ ここでの「user」に注目。debianパッケージで入れたmaildropの場合、
※ mail・daemonユーザ以外でmaildropを実行すると「not trasted user」として
※ 動作してくれません。
maildropに「${user}@${nexthop}」として渡しているのは、うちのサーバではバーチャルドメインアカウントの認証は全てcourier-authdaemonに任せており、ユーザ名は全て「name@domain」形式で管理しています。
ここで「「${user}@${nexthop}」」として渡してあげると、「maildrop -d user@domain」として実行されたことになり、maildropがcourier-authdaemonの認証データベースに記載されているホームディレクトリやUIDなどを環境変数HOMEとして、設定UIDで動作してくれるようになります。
あとはcourier-authdaemonで指定されている場所に.mailfilterとして振り分けルールを書いてあげればOK。maildropの振り分けについては、
「maildrop 利用のメモというかtips」に詳しく書いてあります。
ちょっと前から、サーバにつけていたドメインもバーチャルドメインとして動作させるようにしていたので、振り分けができなくなるかと思い悩んでいたのですが、これにてスパムの振り分けもできるようになってスッキリ。やっぱりUNIXって便利だわー。