1 - このドキュメントの目的 ========================== このドキュメントには Postfix システムの作成・インストール・設定の仕方が 書いてあります。これにより、次のうち一つが出来るようになります。 - すでにインストールされている sendmail を変更せずにメールを送信の のみを行なう。 - すでにインストールされている sendmail を変更せずに、 バーチャルホストインターフェースを通してメールを送受信する。 - sendmail を完全に置き換える。 2 - 表記方法 ============ 以下の説明で # command と書かれたコマンドはスーパーユーザで実行します。 % command のように書かれたコマンドは一般ユーザとして実行します。 3 - ドキュメント類 ================== ドキュメント類は HTML 形式( html/index.html をブラウザでみて下さい)と UNIX 形式の man page (MANPATH 環境変数に man サブディレクトリを 絶対パスで加えて下さい)で提供されています。 conf ディレクトリにある設定ファイルのサンプルには多くのコメントが ありますが、全ての特徴・機能の全てのニュアンスを記述したものでは ありません。 多くのファイルには、それ自身にマニュアルページが含まれています。 mantools ディレクトリにはそのように埋め込まれたマニュアルページを 取り出すツールがあります。 4 - サポートされたシステムでのビルド ==================================== 以下のシステム、もしくはそれによく似たシステムがサポートされています。 AIX 3.2.5 AIX 4.1.x AIX 4.2.0 BSD/OS 2.x BSD/OS 3.x BSD/OS 4.x Darwin 1.x FreeBSD 2.x FreeBSD 3.x FreeBSD 4.x FreeBSD 5.x HP-UX 9.x HP-UX 10.x HP-UX 11.x IRIX 5.x IRIX 6.x Linux Debian 1.3.1 Linux Debian 2.x Linux RedHat 4.x Linux RedHat 5.x Linux RedHat 6.x Linux RedHat 7.x Linux Slackware 3.x Linux Slackware 4.x Linux Slackware 7.x Linux SuSE 5.x Linux SuSE 6.x Linux SuSE 7.x Mac OS X NEXTSTEP 3.x NetBSD 1.x OPENSTEP 4.x OSF1.V3 (Digital UNIX) OSF1.V4 aka Digital UNIX V4 OSF1.V5 aka Digital UNIX V5 OpenBSD 2.x Reliant UNIX 5.x Rhapsody 5.x SunOS 4.1.x (with Postfix 1.1.0) SunOS 5.4..5.8 (Solaris 2.4..8) Ultrix 4.x (well, that was long ago) Solaris では、"make" コマンドやその他のソフトウェア開発用 ユーティリティは /usr/ccs/bin にあるので、コマンド検索パスに /usr/ccs/bin を「必ず」含めなければいけません。 Postfix を複数のアーキテクチャ用にビルドする必要がある場合、 lndir コマンドを使ってソースファイルにシンボリックリンクを 張ったシャドウツリーを作って下さい。lndir は X11R6 の一部です。 ビルド中に "make: don't know how to ..." というようなメッセージが 出る場合、Postfix の一番上のディレクトリに行き、次のコマンドを 実行することで回復できます。 % make -f Makefile.init makefiles 他のマシンでビルドした後に Postfix をコピーしてきた場合、 まず一番上のディレクトリで次のコマンドを実行するのがよいでしょう。 % make tidy これは他でコンパイルした時に残されたシステムに依存する部分を 除去します。 GCC を用いてビルドする場合や、ネイティブのコンパイラの方がよいと 報告されているシステムについてはそのコンパイラを使ってコンパイル する場合、Postfix のソースツリーの一番上のディレクトリに cd し、 次のコマンドを実行するだけです。 % make デフォルトではないコンパイラを使用するには、コンパイラの名前を 以下のように指定する必要があります: % make makefiles CC=/opt/SUNWspro/bin/cc (Solaris) % make % make makefiles CC="/opt/ansic/bin/cc -Ae" (HP-UX) %make % make makefiles CC="purify cc" % make 最適化は自動的にオフになる場合があります。 デフォルト以外の設定でビルドする場合、例えば /etc/postfix 以外に 設定ファイルのディレクトリを作る場合には、次のコマンドを使います。 % make makefiles CCARGS=-DDEF_CONFIG_DIR=\\\\\\\"/some/where\\\\\\\" % make バックスラッシュが7つありますが :-) これで少なくとも sh でも csh でも 動作します。 1000 以上の配送プロセスを動かすような、非常に大きなアプリケーションの ために Postfix をビルドするには、FD_SETSIZE マクロの定義を select() が正しく動くように上書きする必要があるかもしれません: % make makefiles CCARGS=-DFD_SETSIZE=2048 次のコマンド % make でコンパイラエラーメッセージが出る場合は、FAQ (html/faq.html 参照) を調べて下さい。 5 - 未サポートシステムへのポーティング ======================================= - それぞれのシステムタイプはユニークな名前で識別されます。例: SUNOS5, FREEBSD4 など。新しいシステムの SYSTEMTYPE 名を選んで下さい。 同じシステムの違うリリースが混乱なくサポートできるように、名前には オペレーティングシステムのメジャーバージョンを含むように (SUNOS4 や LINUX2 のように) して下さい。 - トップディレクトリにある "makedefs" シェルスクリプトに 新しいシステムが確実に認識されるように条件文を付け加え、 正しいシステム依存の情報を出すようにしてください。 コードはユーザの PATH 設定に robust であることを確認してください; もしシステムが様々な UNIX の環境(例えば BSD と SYSV)を提供できる ならば、エミュレートされたものではなく、ネイティブな形式であることを 確認して下さい。 - util/sys_defs.h インクルードファイルの中に #ifdef SYSTEMTYPE セクションを付け加えます。新しいマクロを作る必要があるかもしれません。 マクロは HAS_DBM や FIONREAD_IN_SYS_FILIO_H のようなわかりやすい 名前にして下さい。それぞれのソースファイルで #ifdef SYSTEMTYPE に依存性を書かないことを強く推奨します。これは最も速い解決法に 見えますが、時間が経つと保守が難しくなっていきます。さらに、 次のポーティングの際に全てのソースコードに再び #ifdef を書く 必要性が生じてしまいます。 6 - コンパイルが成功した後のソフトウェアのインストール ====================================================== この文章はソースコードからの Postfix のインストール方法を記述して います。他のシステムに配布するためにパッケージをビルドするので あれば、PACKAGE_README ファイルを参照してください。 重要: もし現在インストールされている sendmail を Postfix で 置き換えるのであれば、古い sendmail をしばらくの間走らせておいて、 メールキューを消す必要があります。スーパーユーザで次のコマンドを 実行して下さい (sendmail, newaliases や mailq コマンドは別の場所に あるかもしれません)。 # mv /usr/sbin/sendmail /usr/sbin/sendmail.OFF # mv /usr/bin/newaliases /usr/bin/newaliases.OFF # mv /usr/bin/mailq /usr/bin/mailq.OFF # chmod 755 /usr/sbin/sendmail.OFF /usr/bin/newaliases.OFF \ /usr/bin/mailq.OFF Postfix のインストールやアップグレードをするために: - 他のユーザアカウントが使用していないユーザIDとグループIDを持った ユーザ "postfix" を作成します。できればこれは誰もログインできない アカウントにします。このアカウントにはログインシェルやホーム ディレクトリは必要ありません。私のパスワードファイルエントリは 次のようになっています。 postfix:*:12345:12345:postfix:/no/where:/no/shell - 次のようなエイリアスが /etc/aliases にあることを確認します。 postfix: root - 他のユーザアカウントに使われていないグループ ID を持つグループ "postdrop" を作成します。postfix ユーザアカウントにも使われては いけません。私のグループファイルエントリは次のようになっています。 postdrop:*:54321: 注意: このグループは古い Postfix リリースではオプションでした; 現在は必須となっています。 - オプション: Postfix プログラムやデーモンのシンボルを取り除いた (デバッグしない)バージョンをインストールしたければ、次のコマンドを 実行してください: % strip bin/* libexec/* - 次のコマンドのいずれかをスーパーユーザで実行します。 # make install (インタラクティブバージョン、 初めてのインストール時) # make upgrade (非インタラクティブバージョン、 アップグレード用) 非インタラクティブバージョンには前回のインストールで作られた /etc/postfix/main.cf ファイルが必要です。ファイルが存在 しないのであれば、インタラクティブインストールを使って下さい。 インタラクティブバージョンでは、インタラクティブに上書き可能な パス名を提案し、将来のアップグレードで便利なように /etc/postfix/main.cf にプリファレンスを保存します。 - Postfix を走らせたい方法によって、以下のセクションから選んで  進んで下さい。 - インストールされた sendmail はそのまま変更せずに Postfix で  メールの送信のみを行なう。(section 7) - バーチャルインターフェースを通してメールの送受信を行なうが、  インストールされた sendmail はそのまま変更しない。(section 8) - sendmail を完全に置き換える。(section 9) 7 - メール送信専用の Postfix の設定 =================================== Postfix をメールの送信のみに使用するのであれば、インストールされた sendmail の設定を変更する必要はありません。かわりに、mail user agent (MUA, メーラ)が直接 Postfix の sendmail プログラムを呼び出すように 設定します。 section 10 の "必要な設定ファイルの編集" に従い、section 11 の "chroot すべきか chroot せざるべきか" 文章を再検討してください。 本物の sendmail と衝突しないために、/etc/postfix/master.cf の `smtp inet' はコメントアウトしなければなりません。 Postfix を起動するには、 # postfix start とするか、 Postfix の sendmail コマンドを or, if you feel nostalgic, use the Postfix sendmail command: # sendmail -bd -qwhatever として郷愁にふけり、syslog ファイルでエラーメッセージをチェックします。 % egrep '(reject|warning|error|fatal|panic):' /some/log/file 典型的なログファイル名は: /var/log/maillog または /var/log/syslog 正確なログファイル名は /etc/syslog.conf を参照して下さい。 メールキューを調べるには、次のコマンドを使います。 % sendmail -bp section 13 の "メンテナンス" も参照してください。 8 - メールを送受信する Postfix の設定 (バーチャルインターフェース) ================================================================== それ以外に、バーチャルなインタフェースアドレスで Postfix を走らせる ことによって、sendmail の設定には手をつけずに Postfix システムを メールの送信および受信に使うことが出来ます。単に mail user agent が Postfix の sendmail プログラムを直接呼び出すように設定するだけです。 examples/virtual-setup ディレクトリには様々な UNIX のバージョンに対する バーチャルインターフェースの設定の説明があります。 /etc/postfix/main.cf ファイルに、次のように設定します。 myhostname = virtual.host.tld inet_interfaces = $myhostname mydestination = $myhostname section 10 の "必要な設定ファイルの編集" に従い、section 11 の "chroot すべきか chroot せざるべきか" 文章を再検討してください。 メールシステムを起動するには、 # postfix start とするか、Postfix の sendmail プログラムを # sendmail -bd -qwhatever として郷愁にふけり、syslog ファイルでエラーメッセージをチェックします。 % egrep '(reject|warning|error|fatal|panic):' /some/log/file 典型的なログファイル名は: /var/log/maillog または /var/log/syslog 正確なログファイル名は /etc/syslog.conf を参照して下さい。 メールキューを調べるには、次のコマンドを使います。 % sendmail -bp section 13 の "メンテナンス" も参照してください。 9 - 永久に sendmail を止める ============================ Postfix のインストールに先立ち、現在動いている sendmail のプログラム ファイルを6章に記載したように保存します。 未配送メールを全て送るために、最低数日間は古い sendmail を動かし 続けるよう気をつけて下さい。そうするために、sendmail を止めて、 次のようにリスタートします。 # /usr/sbin/sendmail.OFF -q 下にある"Mandatory configuration file の編集"を行なった後、 次のように Postfix システムを起動します。 # postfix start またなつかしい sendmail の方法でも同様に動きます。 # sendmail -bd -qwhatever そしてメールシステムからの文句をシスログで眺めて下さい。 % egrep '(reject|warning|error|fatal|panic):' /some/log/file 典型的なログファイル名は: /var/log/maillog または /var/log/syslog 正確なログファイル名は /etc/syslog.conf を参照して下さい。 初めて起動する時には、Postfix スタートアップシェルスクリプトが Postfix のスプールディレクトリ以下にサブディレクトリ群を作成します。 section 13 の "メンテナンス" も参照してください。 10 - 必要な設定ファイル編集 =========================== デフォルトでは Postfix の設定ファイルは /etc/postfix にあり、 root が所有する必要があります。誰か他の人に main.cf もしくは master.cf の書き込み権を与えることは、その人に root の特権を与えることを 意味します。 設定ファイルを書き換えたら、次のコマンドを実行して走っているメール システムに更新を伝える必要があります。 # postfix reload 最低限のパラメータを /etc/postfix/main.cf にする必要があります。 Postfix の設定パラメータはシェル変数と似たものです。変数は次のように 設定します。 parameter = value 変数名の前に $ をつけて、その変数を使うことが出来ます。 other_parameter = $parameter $parameter は設定する前に使うことも出来ます。Postfix の設定言語は lazy な評価方法を使い、パラメータの値は実行中にそれが必要となる時まで 値を参照しません。 まず第一に、unqualified アドレス (すなわち @domain.tld がない アドレス) に付け加えるドメイン名を設定します。"myorigin" パラメータの デフォルトはローカルのホスト名ですが、非常に小さなサイトでは十分 でしょう。 いくつか例示します: myorigin = $myhostname myorigin = $mydomain 上の場合、ローカルメールは user@$myhostname として送信されます。 下の場合の送信者は user@$mydomain となります。 次に Postfix のシステムがローカルで配送すべきメールアドレスを 設定する必要があります。 いくつか例示します: mydestination = $myhostname, localhost.$mydomain mydestination = $myhostname, localhost.$mydomain, $mydomain mydestination = $myhostname 最初の例はワークステーションに適しており、2番目はドメイン全体の メールサーバに適しています。3番目の例はバーチャルホストインター フェースで実行している場合に使います。 マシンがオープンネットワークにある場合、そのマシンを通して メールをリレーすることを許可するクライアント IP アドレスを 指定しなければいけません。デフォルトの設定はマシンがつながっている クラス A, B または C ネットワーク全てです。これでは多過ぎる クライアントにリレー許可を与えることがあります。私自身の設定は: mynetworks = 168.100.189.0/28, 127.0.0.0/8 システムがファイアウォール内にある場合は、リレーホストの設定をする 必要があります。できるなら Postfix が DNS 探索を使えるように、そして プライマリの MX ホストがダウンしている時にセカンダリの MX ホストを 利用できるように組織のドメイン名を設定します。そうでなければ、 単に確実なホスト名を設定します。 いくつか例示します。 relayhost = $mydomain relayhost = mail.$mydomain relayhost = [mail.$mydomain] [] で囲まれた形式では、DNS の MX レコードは無視します。 デフォルトでは、SMTP のクライアントはリレーホストを設定した場合でも 送信及び受信アドレスを DNS 探索します。もし DNS サーバにアクセスできない のであれば、SMTP クライアントの DNS 探索を次のように止めます。 disable_dns_lookups = yes FAQ (html/faq.html) には、ファイアウォールのあるネットワークや やダイアルアップネットワークへのヒントや TIPS があります。 最後に、Postfix の前に sendmail を使っていないのであれば、alias の データベースを作る必要があります (sendmail -bi もしくは newaliases を 実行する)。root や postmaster のエイリアスが実在の人にメールが転送される ようになっているか確かめて下さい。Postfix はローカルの状態に 適応できるサンプル aliases ファイルを conf/aliases に用意しています。 11 - chroot すべきか chroot せざるべきか ======================================== ほとんどの Postfix のデーモンは chroot jail で走ることができます。 すなわち、プロセスは低い特権レベルに固定されて走り、Postfix キュー ディレクトリ (/var/spool/postfix) へのアクセスしかしません。 これは攻撃に対して重要な障壁になります。この障壁は通り抜けないものでは ありませんが、多少は役に立つでしょう。 local 配送と `pipe' デーモン以外の全てのデーモンは chroot して 走らせることが可能です。 高いセキュリティが要求されるサイトはネットワークに話しかける全ての デーモンを chroot することを考えるべきです: これには smtp および smtpd プロセス、また lmtp クライアントを含むかも知れません。 デフォルトの /etc/postfix/master.cf ファイルではどの Postfix デーモンも chroot されていません。chroot 操作を有効にするには、 /etc/postfix/master.cf を編集して下さい。方法はファイルの中に 書かれています。 chroot されたデーモンは全てのファイル名の解決は Postfix キュー ディレクトリ (/var/spool/postfix) からの相対値であることに 注意して下さい。chroot jail をうまく使うには、ほとんどの UNIX システムでいくつかのファイルやデバイスノードを持ち込む必要が あります。examples/chroot-setup ディレクトリには Postfix システムを chroot 環境で動かすための設定のスクリプト集があります。 12 - Postfix システムのメンテナンス =================================== Postfix プログラムは全ての問題の log を syslog デーモンに渡します。 ログファイル名は /etc/syslog.conf に定義されます。 注意: syslogd はこのファイルを作りません。syslogd を(再)起動する前に このファイルを作らなければなりません。最低限次のようなものが必要です。 mail.err /dev/console mail.debug /var/log/maillog 好運なことに問題の数は少ないでしょうが、次のコマンドを毎晩 syslog ファイルが rotate される前に実行するのはいいことです。 # postfix check # egrep '(reject|warning|error|fatal|panic):' /some/log/file 典型的なログファイル名は: /var/log/maillog または /var/log/syslog 正確なログファイル名は /etc/syslog.conf を参照して下さい。 最初の行 (postfix check) は Postfix にファイルの権限や所有者の 矛盾を報告させます。 2行めはメールソフトからの問題レポートに見えますが、アンチリレーや アンチ UCE ブロックがどれだけ有効かも報告します。