Postfix

Masaki Murase

murase@tunagu.gr.jp

$Id: postfix.html,v 1.23 2003/03/10 11:32:02 masaki Exp $

この文書は、NEXTSTEP に付属する sendmail の置き換え (バージョンアップ、セキュリティ対策)に苦慮されている方に Postfix を紹介することを目的として作成したものです。 NEXTSTEP 固有の内容は極力含まないように心掛けましたので、 NEXTSTEP ユーザに限らず、 「Postfix ってどんなメールサーバプログラムなの?」 という方に参考にして頂けると幸いです。

なお、2009 年6月からは、それまで利用していた Web サーバの閉鎖に伴い、 http://www.hautbois.jp/~masaki/sys/mail/postfix.html にて公開をしていますが、内容がかなり古いため、リンクを張るのはお控えください。


Table of Contents
1. Postfix について
2. 運用を始めるにあたって
3. インストール
4. 最後に

1. Postfix について

Postfix は、 素のままの sendmail に見られる パフォーマンスやセキュリティ上の不満、および 導入・メンテナンス時の敷居の高さを解消した新しい MTA です。 また、sendmail 互換インターフェースが用意されているので、 sendmail を前提としたシステムのインストール・運用が容易です。 Postifix の詳細を知りたい方は、以下に紹介するリンクを辿って下さい。


2. 運用を始めるにあたって

2.1. 動作設定

動作設定は master.cf と、 main.cf および lookup テーブルを 編集することで行ないます。 master.cf は、 Postfix の master プロセスから呼び出される各サービスと 実際の各種メーラプログラムとの対応付けをし、 main.cf では Postfix の各種メーラの動作に 関する設定をします。 Postifx には約 100 個の パラメータが用意されていますが、多くの場合、 数個のパラメータを設定するだけで済むのではないかと思います。 (Postfix Documentation や、Positfix のぺーじ: 設定ファイルのコメントを読まれることをお勧めします。)


2.2. コマンドライン & sendmail コマンド

コマンドラインでの使用例です。 Postfix sendmail 互換インターフェースの一部として sendmailコマンドを用意しているので、 sendmail を使ったことのある人には 馴染み易いのではないかと思います。

postfix start, sendmail -bd -qwhatever

起動(root 権限で)。 sendmail -bd とあるが、 smtpd を動かさない場合もこのコマンドを使うので注意。

postfix stop

終了(root 権限で)。

postfix reload

設定ファイルの再読み込み(root 権限で)。

postfix -d, postfix -n

main.cfのデフォルト値(-d)/デフォルトでない設定パラメータ(-n)の表示

postconf -e defer_transports = smtp

main.cf のパラメータを書き換える。(例では、明示的に指示されるまでメッセージを キューに貯めて配送しない。)

postalias /etc/mail/aliases

alias データベースの作成/更新(sendmail v8 互換, NIS 対応)。

newaliases, sendmail -bi

alias データベースの初期化。

postmap hash:/etc/postfix/virtual

alias 以外の lookup table(ここでは hash:/etc/postfix/virtual) の作成/更新

postfix flush, sendmail -q

キューにたまったメッセージの配送。 -qR も利用できる。

mailq, sendmail -bp

キューの表示。


2.3. 互換性

sendmail コマンドや alias ファイルなど、 sendmail 互換インターフェースが 用意されているため、sendmail 環境を 前提としたシステム(ML ドライバ等)を、 Postfix 環境において ほとんどそのまま利用することができます。 その他を含めた詳細については、 Compatibility(by 池田さん) を参照して下さい。


2.4. ML ドライバ

main.cf

     allow_mail_to_commands = alias,forward,include 
を加えて include を有効にすれば sendmail で動作するものは ほとんどがそのまま動きます(Table 1参照)。

なお、Postfix では、 alias や include ファイルの 所有者の権限で配送が行なわれ、そのユーザの userid がヘッダに付加されます。 (リストの所有者がスーパーユーザの場合は、 main.cf に記述される設定パラメータである default_privs で指定されるユーザの権限で 配送がなされる。) sendmail のように Trusted User の指定をする必要はありません。

Table 1. ML dirvers and Postfix

ドライバインストールの際の注意事項
CMLDeliverd-To 絡みの問題、その他。(2001.07.30: CML-4.1-*-snap に関する記述を追加。)
distribute特になし。
fml特になし。 付属文書の doc/INSTALL_with_POSTIFIX.jpfmlPostfix と一緒に用いる場合の注意事項が書かれている。
MajordomoFAQに Deliverd-To: 絡みの問題について記述あり。
ppml知り合いの情報に依れば、インストール、運用時に 特に注意すべきことはないようだ。

2.5. NFS or SMTP/LMTP

NFS インポートしたファイルシステム上にスプールを おくのは lock の問題等から好ましくありません。 どうしてもリモートホストにメールスプールを置きたいのであれば、 SMTP もしくは LMTP over TCP を用いてスタティックにリモートホスト にメッセージを送るのが良いです。 (LMTP サーバは Cyrus IMAP Server に含まれている。) どうしても NFS を使いたいのであれば、Postfix ではなく qmail を使うべきです。


2.6. IMAP

スプールが独自仕様であるCyrus IMAP Serverにも対応しています。 具体的には、pipe mailer を利用して外部の配送エージェントに メッセージを渡しています。 (Postfix からの Cyrus-imapd の利用設定例)


2.7. POP

sendmail 環境をそのままに移行した場合、特に変更の必要はありません。 (実際のスプールの形態にあった POP サーバを選べば良いと思います。)


2.8. POP before SMTP

基本的には POP 認証の成功したホストを main.cfsmtpd_recipient_restrictions で参照指定する check_client_access データベースに 登録(そして一定時間後に削除)するだけなので自作も難しくないと思いますが、 今ではパッケージがいくつか出ています。 Postfix のぺーじの関連リンクで、いくつかの構築例が紹介されています。


2.9. SMTP AUTH

対応しています。


2.11. chroot 環境下での運用

master デーモンが管理する各種デーモン(local と pipe を除く)は chroot 環境下で動作させることができます。 パッケージのexamples/chroot-setup に 各 OS での chroot 環境の作り方についての例があります。

なお、chroot した環境下に必要なファイルを置くことを忘れないように。 (alias は local デーモンが参照するので、 chroot 下に置く必要はありません。)


2.12. SPAM リレー対策

Postfix での Spam 対策を参照のこと。

なお、SMTP によるメールの受信をする必要のないホスト(LAN 上の ほとんどのホストがこれに該当するのでは?)では、 master.cfにおいて `smtp inet ... smtpd' エントリをコメントアウトしておくことをお勧めします。 こうしておけば多少設定ミスをしても SPAM リレーすることはありません。


3. インストール

私の手元にある(あった)二つの環境におけるインストールの 実際を紹介します。


4. 最後に

今は MTA をインストールするにあたって、 sendmail 以外にもいくつかの選択肢があります。 Postfix の他には、たとえば、 qmaileximなど があります。 それぞれ特徴があるので、この中から好みのものを選べば良いと思いますが、 私が Postfix を選んだ理由は、 配布ドキュメントがコンパクトにまとまっていて、かつ、分かりやすかったからです。 最近では、配布ドキュメントのほとんどが日本語に翻訳されており、 日本人(の私)にはますます利用しやすくなりました。 翻訳を手掛けておられる方々に感謝したいと思います。