りんけーじ - 開発資料 - サーバ - qmail から postfix へ



この文書について

この文書は, 2006/11/15 にメインサーバ sylph (OS:FreeBSD RELEASE 6.1RC-2) のメールサーバソフトウェア (MTA) を qmail から postfix に乗り換えた際の、postfix および周辺プログラムのインストールおよび設定についての記録です。結構適当にやっているので、間違いがシチューの中のジャガイモのようにごろごろしてるかもしれません。ご注意を。

あと、qmail と postfix の比較っぽいのはありませんが、気にしちゃだめです。


cyrus-sasl のインストール

cyrus-sasl は、postfix で SMTP Auth を使用するために必要となります。

いつもどおりの ./configure && make タイプです。configure だけちょっと注意が必要。

./configure --enable-login --enable-ntlm

次にコンパイルしますが、ばっちりエラーが出るので沈めます。

/usr/include/krb5_asn1.h:349: error: array type has incomplete element type
/usr/include/krb5_asn1.h:397: error: array type has incomplete element type
/usr/include/krb5_asn1.h:453: error: array type has incomplete element type

もう最近大嫌いになりつつある Kerberos 関連です。該当ファイル /usr/include/krb5_asn1.h を見ると、

extern struct units APOptions_units[];

とありますが、この struct units が /usr/include 内のいずれのファイルでも定義されていません。どうせ extern なので、エラー回避だけを考えて、

extern struct units *APOptions_units;

と書き換えます。この変更なら、大体の場合においては等価ですしね。同じようなのが 3 個なので、適当に書き換えます。

/usr/include のファイルをいじるのが嫌な人は、ソースのあるところにコピーして編集、インクルードパスでもいじってくださいな。

これで make が通るので、make install します。

最後にシンボリックリンクを1つ作成して完了です。

ln -s /usr/local/lib/sasl2 /usr/lib/sasl2

postfix のインストール

まずは tarball を www.postfix.org から連れてきます。

こちらのコンパイルは ./configure なしで、make だけで通ります。

しかし残念ながら山のようにオプションが必要なので、そのためにながぁいコマンドを打ちます。

make makefiles CCARGS="-DUSE_SASL_AUTH -DUSE_CYRUS_SASL -DUSE_TLS -I/usr/local/include -I/usr/local/include/sasl" AUXLIBS="-L/usr/local/lib -L/usr/local/lib/sasl2 -lsasl2 -lssl -lcrypto"

コンパイルは平和に終わるハズなので、make install。オプションはお好きにどうぞ。


postfix の設定

postfix の設定は /etc/postfix ディレクトリにあります。主にいじるのは aliases, virtual, main.cf です。

main.cf については、ご丁寧に山のようにコメントがついているので、それほどは困らないとは思います。以下、特殊な部分にだけ触れます。

.cf の設定ファイル以外の aliases や virtual などのファイルは、修正したらデータベースファイルに変換する必要があるので忘れてはいけません。

postaliases /etc/postfix/aliases
postmap /etc/postfix/isppasswd
postmap /etc/postfix/virtual

cyrus-sasl の設定

細かいことを考えるのはやめましょう。次の内容のファイルを /usr/local/lib/sasl2/smtpd.conf に保存するだけです。

pwcheck_method: auxprop
auxprop_plugin: sasldb
mech_list: cram-md5 digest-md5 plain login

認証ユーザの作成は saslpasswd2 で行います。

saslpasswd2 -c -u `postconf -h myhostname` [username]

-c オプションはエントリの作成を指示するものなので、パスワードの変更時には不要です。

無事 saslpasswd2 が成功して、/var/log/messages に

saslpasswd2: could not find auxprop plugin, was searching for [all]

とか出ていなければ cyrus-sasl はちゃんと動いています。

このエラーが出た場合は前節の --enable-ntlm を忘れていないか確認を。これをつけるとなぜか直るのです。

パスワードデータベースは /etc/sasldb2.db です。Postfix が読めるように、

chgrp mail /etc/sasldb2.db
chmod 640 /etc/sasldb2.db

としておきましょう。


起動

全部うまくいっていれば、postfix start で postfix が起動するはずです。telnet localhost 25 とかで試して、あとはメーラーでテストです!