Postfix にはハマリがちな罠がいくつかある。
main.cf を変更して、すぐに反映させたければ「postfix reload」コマンドを実行する。 しかし、「postfix reload」コマンドを実行しないと反映されないというわけではない。 Postfix は必要に応じて各種デーモンを起動したり停止したりするが、各デーモンは起動時にその時点の main.cf を読み込んで動作するのである。
postconf コマンドで出力されるパラメータ値も、main.cf を読んでいるだけなので、その値で各デーモンが動作しているとは限らない。
だから、設定を反映させたくない状態で、main.cf を変更してはいけない。 設定を反映したいタイミングで、main.cf を変更し、直後に「postfix reload」するのが正しい。
Postfix は「-」で始まっているメールアドレスの配送を拒否してしまう。 この形式は RFC 的には正しいメールアドレスなのにも関わらずだ。
これは、外部コマンドでメールを配送しようとする時に、「-」で始まっているメールアドレスが、コマンドに対するオプションと解釈されてしまう危険性があるからである。 この危険性を考慮して問題ない場合は、main.cf に次のように設定すれば「-」で始まっているメールアドレスにもちゃんと配送される。
allow_min_user = yes
このパラメータは、SMTP時に宛先に指定されたローカルメールアドレスが存在しない時に返されるエラーで、デフォルト値は 550 だが、Postfix インストール時に 450 に設定される。 設定ミス等で、配送して欲しいのにエラーになってしまうことを避けるためである。
この値を「デフォルト値でいいや」といって、main.cf から削除してしまうと、Postfix のバージョンアップを行なった時に、また 450 に設定されてしまう。 デフォルト値の 550 にしておきたくても、ちゃんと main.cf に次のように設定しておくべきである。
unknown_local_recipient_reject_code = 550
local エージェントを使用してメールボックスに配送を行なうときに、メールボックスファイルのサイズが 50MB に制限されている。 これはメールボックスを Maildir 形式にしている場合は関係ないし (厳密には1メールのサイズが制限されるのだが、このパラメータよりも先に message_size_limit で制限される)、 メールボックスへの配送に virtual エージェントを使用している場合にも関係ないので、デフォルトの値のまま見落とされがちなのだが、 この制限は実は setrlimit() を内部で使用しているので、local エージェントから起動される子プロセスにも影響する。
具体的には aliases 等から ML のような外部コマンドが起動される場合、そのコマンドが作成できるファイルのサイズも 50MB になってしまう。 main.cf に次のように設定することで無制限にできる。
mailbox_size_limit = 0
Postfix で、自ホストの IPアドレスの 25番ポートにメールを中継するように設定すると、「loops back to myself」と言われて、メールが配送できない。 これは、宛先が 25番ポートの場合のみ発生する。余計なお世話である。
[127.0.0.1]
の代わりに [127.0.0.2]
を使用して、Postfix を騙せばOK。別に 127.0.0.2 でなくても 127.x.x.x ならなんでも良い。
Postfix はそこまでチェックしていない。