Postfix+Dovecot+Vpopmail+ezmlm

一応懸念点はあるものの動いたのでメモ。
勘違い、間違いがあるかもしれないけど、メモ書きってことでお許しを。

やりたいことは
・フロントはPostfixがいい
Postfixはバーチャルドメイン運用をする
DovecotでPOPなりIMAPなり制御したい
・vpopmailでアカウント(主にパスワード)を管理したい
・ezmlmが使いたい

OSはCentOS5.6で試した。

ezmlmとかvpopmailってqmailベッタリなんでqmailは必須なんで、
とりあえずは慌てず騒がずqmail+vpopmail+ezmlmの環境を作る。
この辺はいろんなサイトにあるからそっちにお任せ。
動作を確認したら一度qmail落としておこう。

問題なく動くようならPostfixDovecotをインストールするんだけど、
yumから入れたDovecotはvpopmail使えないので、srpmを取ってきて

--with-vpopmail

を追記してビルドしてやる。
srpmを取ってくるやり方もいくつかサイトがあるからそっちにお任せ。
流れを書いとくとyum-utilsをyumからインストールして、
srpm用repoファイルを設置してダウンロードする感じ。

Postfixについては基本的にデフォルトのままで下記のようにする。

 :
inet_interfaces = all
 :
mydestination = $myhostname, localhost.$mydomain, localhost
 :
relay_domains = $mydestination, $virtual_alias_domains
 :
disable_vrfy_command = yes
virtual_transport = virtual
transport_maps = pcre:/etc/postfix/virtual_pcre
virtual_mailbox_domains = example.com
virtual_mailbox_base = /home/vpopmail/domains
virtual_mailbox_maps = hash:/etc/postfix/vmailbox
virtual_minimum_uid = 7008
virtual_uid_maps = static:7008
virtual_gid_maps = static:7003
virtual_alias_maps = hash:/etc/postfix/virtual
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions = permit_mynetworks, reject_non_fqdn_recipient, permit_sasl_authenticated, reject_unauth_destination

vpopmailは/home/vpopmailにインストールしたので、こんなパス。
virtual_minimum_uidとvirtual_uid_mapsとvirtual_gid_mapsの値はvpopmail用に作った
ユーザのuidとgidを設定する。

Dovecotについても余計なことしないで、vpopmailを使うようにするだけ

 :
mail_location = maildir:/home/vpopmail/domains/%d/%n/Maildir
 :
first_valid_uid = 7008
 :
first_valid_gid = 7003
 :
auth default {
 :
passdb vpopmail {
}
 :
userdb vpopmail {
}
 :
socket listen {
 :
  client {
    path = /var/spool/postfix/private/auth
    user = postfix
    group = postfix
  }
}

こんな感じになってれば平気でしょう。他は全部デフォルトのまま。
uidとgidについては先程と同じようにvpopmailのユーザIDとグループIDをセット。
ユーザのメールボックスは例えばhoge@example.comだとしたら、
/home/vpopmail/domains/example.com/hoge/Maildir
に落ちるようにしてある。
SSLとか使いたければ、適宜変更するといいでしょう。
ここでDovecotだけ起動して認証の確認をする。
既にvadddomainとvadduserしてパスワードも設定してるならそれを利用する。

次に問題のPostfixからezmlmに流す部分。
通常のメールアカウントであれば上記の設定に従って/etc/postfix/vmailboxに
メールアドレスと落とし先を記述してpostmapしてあげれば動く。

# cat /etc/postfix/vmailbox
hoge@example.com example.com/hoge/Maildir/
# postmap /etc/postfix/vmailbox

Maildirの最後の'/'を忘れずに。

同じようにezmlmのメールアドレスもvmailboxに記載しないと、門前払いされてしまう。
ただ、ezmlmは(ML名)-subscribeみたいな拡張アドレスをふんだんに利用するので、
全部記述するのは面倒といえば面倒。
ここが懸念点ではあるが、とりあえずは
@example.com example.com/gomi/Maildir
と設定しておいて、通常のメールアドレス以外は別のユーザに落とす設定にしておく。
さらにMLに流れてきたメールを全部qmailに流して処理させるようにする。
Postfixの設定で
transport_maps = pcre:...
という箇所があるが、これがそれに当たる。中身はML名をtest-ml@example.comとするならば

# cat /etc/postfix/virtual_pcre
/^test\-ml(\-.*)?@example\.com$/ qmail:

となる。
これはtest-ml-subscribe@example.comなどのコマンドメールにも対応するような正規表現
正規表現で記述したマッピングについてはpostmapの必要はない。
末尾のqmail:はqmailに渡しますよってもので、定義はmaster.cfに記載する。

# cat /etc/postfix/master.cf
 :
qmail unix - n n - - pipe flags=R user=qmailq argv=/var/qmail/bin/sendmail $recipient

これでtest-ml@example.com関連のメールは全てqmailsendmailに引き渡されて、
ezmlmで作成されたMLについての.qmail-test-ml関連の処理が可能になる。

ここまでやってPostfixと共にqmailを起動させる。
qmailは起動しなくていいって話だったんだけど、queueにたまったままになっちゃったんで起動した。
当然だけどqmail-smtpdやqmail-pop3dは必要ない。

懸念点であるvmailboxの記載をもうちょっと工夫したい。
コマンドメールを使わせないのであれば、ML名だけ書けばいいけども。