この文書について
この文書は, 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
- --enable-login は Outlook 系の SMTP Auth がおバカ(らしい)ためにつけます。Thunderbird ばっかな環境には関係のないお話なので、邪魔なら切っちゃってもいいかと。
- --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 については、ご丁寧に山のようにコメントがついているので、それほどは困らないとは思います。以下、特殊な部分にだけ触れます。
-
mydestination = white-void.net, linkage.white-void.net
virtual_alias_domains = a.white-void.net, b.white-void.net
virtual_alias_maps = hash:/etc/postfix/virtual
このように設定した場合、〜@white-void.net、〜@linkage.white-void.net 宛てのメールは、実ユーザに対して配送されます。Unix アカウントを利用してそのまま配送する場合は mydestination に書けばよい、といったところでしょうか。
virtual_alias_domains には、バーチャルドメインとしての処理対象となるドメインを書きます。〜@a.white-void.net と 〜@b.white-void.net 宛てのメールは、/etc/postfix/virtual ファイルにしたがって処理されることになります。
-
ここからややこしくなります。次の smtp_sasl_* は、ISP の SMTP サーバに接続するための設定です。
relayhost = [ISP の SMTP サーバ]:587
smtp_sasl_path = smtpd
smtp_sasl_application_name = smtpd
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/isppasswd
smtp_sasl_security_option = noanonymous
smtp_sasl_mechanism_filter = cram-md5, plain, login
最近は Outbound Port 25 Blocking が設定されていることもあるので、ISP の SMTP を踏んでメール送信です。Submission ポート (587) が使えない場合は 25 を使用します。
/etc/postfix/isppasswd ファイルには次の形式で、ISP の SMTP Auth の認証のための情報を書いておきます。
[serveraddress] [username]:[password]
この isppasswd ファイルも、後述の postmap が必要なのをお忘れなく。
-
こちらが SMTP サーバとしての SMTP Auth の設定です。RBL はスパム避けです。詳しくは RBL.JP さんでも参照してください。
smtpd_sasl_auth_enable = yes
smtpd_sasl_mechanism_filter = cram-md5, plain, login
smtpd_client_restrictions = permit_mynetworks,
permit_sasl_authenticated,
reject_rbl_client [RBL のサーバ],
permit
-
Maildir 形式で使う場合は次のエントリを書き換えます。
home_mailbox = mail/
-
あんまり大量に ISP に送ると迷惑ですので、適当にちまちま送るには次のようにします。
というか、あんまり同時に接続かけると蹴られますし。
initial_destination_concurrency = 1
default_destination_concurrentcy_limit = 2
.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 とかで試して、あとはメーラーでテストです!