Postfix + Dovecot + Postfixadmin の設定

MTA を乗り換えたいなぁ と書いてからもう何週間か。仮想環境でテストした感じだとやっと使える目処が立ってきたので切り替え作業を行う。


今回乗り換えを行うのはこんな環境。

SMTP POP/IMAP Admin virus spam
変更前 qmail dovecot+vpopmail qmailadmin clam+amavis spamassassin
変更後 postfix dovecot postfixadmin clam+amavis 未定

設計・コンセプト

設計としては以下のようなものを考えた。

  • バーチャルドメインを使え qmail 以外であること
  • ローカル宛のメールもバーチャルで受けられること
  • アカウントの管理にはアプリケーションベースのものが使えること
  • SMTP での送信には認証を行い、外部への Relay には認証を必須とすること
  • DTI (うちのプロバイダ) から外 (ケータイ) に送信できること
  • ウイルス対策は出来る限り載せる
  • スパム対策はできれば載せたいが載せなくても構わない


その結果として上記のような構成がいいようだという結論に至った。 POP/IMAPdovecot ではなくて courier-imap でもいいのだが、現状使っているものが dovecot であることおよび世代的なものを考えて dovecot で行くことにする。

インターネット----(ルータ等)----サーバ[192.168.1.234 - niboshi.kakitsubata-ayame.net,----/var/vmail/%domain/%user%/Maildir
                                                     - kakitsubata-ayame.net,
                                                     - niboshi]

構成としては上記を想定している。

LAN 内にあるサーバ (名称:niboshi) がドメインコントローラ件メールサーバになり、 DNS 的には niboshi = kakitsubata-ayame.net = niboshi.kakitsubata-ayame.net ですべて同一である。外部公開用アドレスには kakitsubata-ayame.net を使う。メールボックスはサーバ上に /var/vmail/%domain%/%user%/ のようにドメイン・ユーザ単位でディレクトリを作成して Maildir 形式で配送されるようにする。また、すべて基本は SSL/TLS を用い、できるだけ暗号化する。

# 以下分かりやすいように設定ファイル等にはこの名称を用いる。
# ちなみに kakitsubata-ayame.net は実際には存在しないので悪しからず。


余談。実はできれば MySQL 等のデータベースは使いたくない感じでシステム構築してきたのであるが、今回使う postfixadmin はデータベース使用を前提に作られているようなので MySQL のインストールも行う。 vpopmail みたいにコマンドで簡単にユーザの追加が行えれば postfixadmin もいらないのだが、調べた感じだと postfix 単体では vpopmail が使えないらしいので仕方のない話…。

作業の順序

インストール作業は以下のように行う。最初にすべて設定してからテストするよりは原因の切り分けがしやすいと思われる。

  1. パッケージインストール (gentoo emerge)
  2. postfixadmin の設定と起動確認
  3. postfixadmin の初期設定と SMTP 認証なしでの SMTP 伝送確認
  4. dovecot の初期設定と POP/IMAP での認証確認
  5. SMTP 認証ありでの SMTP 伝送確認
  6. ウイルス対策の設定


現状メールの通数が多くないので spam 対策は不要と判断するけど、一応導入可能なようにインストールだけは行う。

パッケージインストール

依存関係上関連して入るものの中に USE フラグに注意すべきものがあるので合わせて記載。ウイルス関連は後回し。

パッケージ バージョン USE
mail-mta/postfix 2.7.3-r1 mysql sasl
net-mail/dovecot 1.2.16 mysql
www-apps/postfixadmin 2.3.2 mysql vhosts
dev-libs/cyrus-sasl 2.1.23-r1
dev-lang/php 5.3.5 mysql imap apache2 gd xml


これらを /etc/portage/package.use に書いていく。

解説
mysql フラグ
メールアカウント管理用 DB にアクセスするために必須。ただし SMTP 認証は MySQL を直接叩かずに imap 経由で行うため cyrus-sasl では外した (後述)。
postfix について
sasl で認証を行うのでこのように。 dovecot-sasl も入れると dovecot の sasl を標準で使おうとする。標準で使おうとするだけで設定次第で ON/OFF は可能であるため、今回は別に指定していない (もちろん指定しても良い)。
dovecot について
アカウント管理には mysql だけしか使わない。なお sieve は sieve プラグインを有効にするフラグ。 managesieve は managesieve プロトコルを有効にするフラグ。 sieve を使って maildrop もどきなことをしたいなら入れる (実は自分はいれている) といい。
postfixadmin について
vhosts フラグは postfixadmin のインストール方法を自由にするフラグだと思えば OK である。 apache の vhost の vhost 。
php について
上記フラグが有効になっていないと postfixadmin が動かないので上記は必須。
cyrus-sasl について
どの USE フラグも認証方法を追加するものである。なお autudaemond は courier-authlib 経由で認証する方式であるので courier-imap を使うなら入れると楽になる (必須ではない)。
またここで MySQL を使わないのは MySQL 上に格納するパスワードが clear-text でないと認証できないらしいためである。 DB 上に clear-text で格納する気はないので、今回は sql を叩かず imap サーバで認証できたら SMTP の認証を行ったように設定する。
実際のインストール

実は単純に emerge するだけでは入れられない。 MTA も IMAP も複数は入れられないので先に削除する必要がある…。

$ emerge -pv postfix

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild  N    ] dev-libs/cyrus-sasl-2.1.23-r1  USE="crypt ssl -authdaemond -berkdb -gdbm -java -kerberos -ldap -mysql
 -ntlm_unsupported_patch -pam -postgres -sample -sqlite -srp -urandom" 0 kB
[ebuild  N    ] mail-mta/postfix-2.7.3-r1  USE="ipv6 mysql sasl ssl -cdb -doc -dovecot-sasl -examples -hardened -ldap
 -mbox -nis -pam -postgres (-selinux) -vda" 0 kB
[blocks B     ] mail-mta/netqmail ("virtual/mta" is blocking mail-mta/postfix-2.7.3-r1)
[blocks B     ] net-mail/mailwrapper ("net-mail/mailwrapper" is blocking mail-mta/postfix-2.7.3-r1)

Total: 2 packages (2 new), Size of downloads: 0 kB
Conflict: 2 blocks (2 unsatisfied)

 * Error: The above package list contains packages which cannot be
 * installed at the same time on the same system.

  (mail-mta/postfix-2.7.3-r1, ebuild scheduled for merge) pulled in by
    postfix

  (mail-mta/netqmail-1.06, installed) pulled in by
    mail-mta/netqmail required by (dev-lang/php-5.3.5, installed)
    ~mail-mta/netqmail-1.06 required by (virtual/qmail-1.03, installed)
    mail-mta/netqmail required by (app-admin/sudo-1.7.4_p5, installed)
    (and 4 more)


qmail (netqmail) と mailwrapper が邪魔で入れられないよ、と出る。今回の私の例では qmail であるが、たとえ qmail を使っていなくとも Gentoo では ssmtp なる MTA が入っていてこれを邪魔する。のでコレを無理やり削除することが最初の第一歩。

通常の削除では依存しているパッケージを削除した上で --depclean (-c) を使って安全に削除するべきであるが、メールアラート機能を持った syslog や sudo のような重要なパッケージが依存しているため --unmerge (-C) で依存関係を無視して強制削除を使う。何しろ一個 MTA が存在すればいいので postfix を入れてしまえば依存関係の問題はなくなるからである。

$ emerge -pvC netqmail mailwrapper
(確認してから)

$ sudo emerge -C netqmail mailwrapper
(削除)
35:39+09:00">追記:うちの環境だと qmhandle や vpopmail も外さないと後で qmail を入れようとしてくれるのでこれらも消した。


その後インストール (マージ) する。ちなみに私の環境では pam 等不要な認証も全部削ったため、こんな感じで入ることになる。

$ emerge -pv dovecot postfix postfixadmin

[ebuild  N    ] dev-libs/cyrus-sasl-2.1.23-r1  USE="crypt ssl -authdaemond -berkdb -gdbm -java -kerberos -ldap -mysql 
 -ntlm_unsupported_patch -pam -postgres -sample -sqlite -srp -urandom" 0 kB
[ebuild  N    ] mail-mta/postfix-2.7.3-r1  USE="ipv6 mysql sasl ssl -cdb -doc -dovecot-sasl -examples -hardened -ldap
 -mbox -nis -pam -postgres (-selinux) -vda" 0 kB
[ebuild   R   ] net-mail/dovecot-1.2.16  USE="ipv6 maildir managesieve mysql sieve ssl zlib -berkdb -caps -cydir -dbox
 -doc -kerberos -ldap -mbox -pam -postgres -sqlite -suid -vpopmail" 0 kB
[ebuild  N    ] www-apps/postfixadmin-2.3.2  USE="mysql vacation vhosts -postgres -xmlrpc" 0 kB

$ emerge -av dovecot postfix postfixadmin