ソース コードからのPostfixインストール


1 - このドキュメントの目的

これはあなたが最小のステップで最初からPostfixを立ち上げて走らせる 手助けをするためのブートストラップドキュメントです。すでにコンパイルされた バージョンのPostfixを使っているのであれば、システムをより詳細に記述する ことを目的とした、一般的なPostfixドキュメントを読んでいるべきです。 このブートストラップドキュメントは一般的なPostfixドキュメントの一部とは 見なさない方がよいでしょう。

このドキュメントにはPostfixシステムの作成・インストール・設定の 仕方が書いてあります。これにより、次のうち一つが出来るようになります。

このドキュメントで触れる話題:

  1. このドキュメントの目的
  2. 表記方法
  3. ドキュメント
  4. サポートされたシステムでのビルド
  5. 未サポートシステムへのPostfixのポーティング
  6. コンパイルが成功した後のソフトウェアのインストール
  7. メール送信専用のPostfixの設定
  8. バーチャルインターフェースを通してメールを 送受信するPostfixの設定
  9. Sendmailの代わりにPostfixを走らせる
  10. 必要な設定ファイルの編集
  11. chroot すべきか chroot せざるべきか
  12. Postfixシステムのメンテナンス

2 - 表記方法

以下の説明で

# command

と書かれたコマンドはスーパーユーザで実行します。

% command

のように書かれたコマンドは一般ユーザとして実行します。

3 - ドキュメント

ドキュメントは README ファイル (README_FILES/AAAREADME から始めてください) およびHTMLウェブページ ("html/index.html" をブラウザで見てください)、 UNIX形式のマニュアルページで得られます。

README ファイルには太字を表記するためにバックスペース文字を 使っているので、more(1) や less(1) のようなページャを使って参照してください。 バックスペース文字なしで README ファイルを印刷するには、col(1) コマンドを 使ってください。例:

% col -bx <file | lpr

Postfixをインストールする前にマニュアルページを参照するには、MANPATH 環境変数を "man" サブディレクトリに向けてください; 絶対パスを使うことを 忘れずに。

% export MANPATH; MANPATH="`pwd`/man:$MANPATH"
% setenv MANPATH "`pwd`/man:$MANPATH"

特に関心を持つべきなのは、400以上の設定パラメータ全てをリストアップした postconf(5) マニュアルページです。この テキストのHTMLバージョンでは、簡単にナビゲートできるようになります。

全てのPostfixソースファイルにはそれ自身のマニュアルページが 組み込まれています。これらの組み込まれたマニュアルページを抽出するツールは mantools ディレクトリにあります。

4 - サポートされたシステムでのビルド

ある時点で、Postfixのバージョンがサポートされているのは以下の通りです:

AIX 3.2.5, 4.1.x, 4.2.0, 4.3.x, 5.2
BSD/OS 2.x, 3.x, 4.x
Darwin 1.x
FreeBSD 2.x, 3.x, 4.x, 5.x
HP-UX 9.x, 10.x, 11.x
IRIX 5.x, 6.x
Linux Debian 1.3.1, 2.x, 3.x
Linux RedHat 3.x (January 2004) - 9.x
Linux Slackware 3.x, 4.x, 7.x
Linux SuSE 5.x, 6.x, 7.x
Mac OS X
NEXTSTEP 3.x
NetBSD 1.x
OPENSTEP 4.x
OSF1.V3 - OSF1.V5 (Digital UNIX)
Reliant UNIX 5.x
Rhapsody 5.x
SunOS 4.1.4 (July 2006)
SunOS 5.4 - 5.9 (Solaris 2.4..9)
Ultrix 4.x (well, that was long ago)

または非常に類似したもの。

4.1 - はじめに

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

これは他でコンパイルした時に残された、システムに依存する部分を 除去します。

4.2 - 利用するコンパイラ

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

最適化は自動的にオフになる場合があります。

4.3 - オプション機能をつけてビルドする

デフォルトでは、Postfixはオプション機能があまりないメールシステムとして ビルドします。サードパーティデータベースなどのサポートはPostfixがコンパイル されるときに設定されなければいけません。以下のドキュメントでは、拡張機能の サポートをつけてPostfixをビルドする方法を記述します:
Postfix拡張機能 ドキュメント 利用可能
Berkeley DB database DB_README Postfix 1.0
LDAP database LDAP_README Postfix 1.0
MySQL database MYSQL_README Postfix 1.0
Perl compatible regular expression PCRE_README Postfix 1.0
PostgreSQL database PGSQL_README Postfix 2.0
SASL authentication SASL_README Postfix 1.0
STARTTLS セッション暗号化 TLS_README Postfix 2.2

注意: IP バージョン6サポートは IPv6 をサポートしているオペレーティング システム上でPostfixに組み込まれます。詳細は IPV6_README ファイルを 参照してください。

4.4 - ビルトインパラメータのデフォルト設定を上書きする

全てのPostfix設定パラメータは、一つを除いてPostfix設定ファイルを 編集することで変更できます: 例外はPostfix設定ファイルの場所を指定する パラメータです。/etc/postfix 以外の設定ディレクトリでPostfixをビルド するには、次のコマンドを使います:

% make makefiles CCARGS='-DDEF_CONFIG_DIR=\"/some/where\"'
% make

「重要」: 引用符を正しくつけてください。これらの記述がよく問題を 起こします。

この方法で指定可能なパラメータ:

マクロ名 デフォルト値 典型的なデフォルト
DEF_COMMAND_DIR command_directory /usr/sbin
DEF_CONFIG_DIR config_directory /etc/postfix
DEF_DAEMON_DIR daemon_directory /usr/libexec/postfix
DEF_MAILQ_PATH mailq_path /usr/bin/mailq
DEF_HTML_DIR html_directory no
DEF_MANPAGE_DIR manpage_directory /usr/local/man
DEF_NEWALIAS_PATH newaliases_path /usr/bin/newaliases
DEF_QUEUE_DIR queue_directory /var/spool/postfix
DEF_README_DIR readme_directory no
DEF_SENDMAIL_PATH sendmail_path /usr/sbin/sendmail

4.5 - 数千のプロセスをサポートする

1000 以上の配送プロセスを動かすような、非常に大きなアプリケーションの ためにPostfixをビルドするには、FD_SETSIZE マクロの定義を select() が正しく動くように上書きする必要があるかもしれません:

% make makefiles CCARGS=-DFD_SETSIZE=2048

注意: 上記は Linux の一部のバージョンでは効果がありません。これらの システムでは FD_SETSIZE の値はドキュメントにないインターフェースを使う ことでのみ変更できるようです。現在のところ、それは<bits/types.h> を直接含み (これは許されません)、__FD_SETSIZE マクロを上書きすることを 意味します。ドキュメントにないインターフェースはいつ警告なしに変更されるか 分からないことに注意してください。

4.6 - 最後に、Postfixのコンパイル

コマンド

% make

が成功したら、Postfixのインストール (セクション6) に進んでください。

コンパイルエラーメッセージが出る場合、次はウェブを検索したり、 postfix-users@postfix.org メーリングリストに聞く番かもしれませんが、 初めにメーリングリストのアーカイブを検索することを忘れないでください。 メーリングリストアーカイブのいくつかは http://www.postfix.org/ から リンクされています。

5 - 未サポートシステムへのポーティング

それぞれのシステムタイプはユニークな名前で識別されます。例: SUNOS5, FREEBSD4 など。新しいシステムにPostfixをポーティングする場合、まず新しい システムの SYSTEMTYPE 名を選んで下さい。同じシステムの違うリリースが 混乱なくサポートできるように、名前にはオペレーティングシステムのメジャー バージョンを含むように (SUNOS4 や LINUX2 のように) しなければいけません。

ソースコードの一番上のディレクトリにある "makedefs" シェルスクリプトに 新しいシステムが確実に認識されるように条件文を付け加え、正しいシステム 依存の情報を出すようにしてください。コードはユーザの PATH 設定に依存 しないことを確認してください; もしシステムが様々な UNIX の環境 (例えば BSD と SYSV)を提供できるならば、エミュレートされたものではなく、 ネイティブな形式であることを確認して下さい。

util/sys_defs.h インクルードファイルの中に #ifdef SYSTEMTYPE セクションを付け加えます。新しいマクロを作る必要があるかもしれません。 マクロは HAS_DBM や FIONREAD_IN_SYS_FILIO_H のようなわかりやすい 名前にして下さい。

それぞれのソースファイルで #ifdef SYSTEMTYPE に依存性を書かないことを 強く推奨します。これは最も速い解決法に見えますが、時間が経つと保守が 難しくなっていきます。さらに、次のポーティングの際に全てのソースコードに 再び #ifdef を書く必要性が生じてしまいます。

6 - コンパイルが成功した後のソフトウェアの インストール

この文章はソースコードからのPostfixのインストール方法を記述して います。他のシステムに配布するためにパッケージをビルドするので あれば、PACKAGE_README ファイルを参照 してください。Mac OS X でソースからPostfixをインストールする場合の情報は auxiliary/MacOSX/README-INSTALL.OSX を参照してください。

6.1 - Sendmailのバイナリの保存

「重要」: もし現在インストールされている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

6.2 - アカウントとグループの作成

初めてPostfixをインストールする前には、アカウントとグループを作る 必要があります:

6.3 - Postfixのインストール

コンパイルされたソースコードからPostfixをインストール、もしくはアップ グレードするには、スーパーユーザで以下のいずれかのコマンドを実行します:

# make install       (インタラクティブバージョン、最初のインストール)

# make upgrade       (非インタラクティブバージョン、アップグレード用)

6.4 - Postfixの設定

Postfixを走らせたい方法によって、以下のセクションから選んで進んで 下さい:

7 - メール送信専用のPostfixの設定

Postfixをメールの送信のみに使用するのであれば、インストールされた Sendmailの設定を変更する必要はありません。かわりに、mail user agent (MUA, メーラ)が直接Postfix sendmail プログラムを呼び出すように設定 します。

section 10 の"必要な設定ファイルの編集"に従い、 section 11 の文章 "chroot すべきか chroot せざるべきか" を再検討してください。

本物の sendmail と衝突しないために、/etc/postfix/master.cf の `smtp inet' エントリはコメントアウトしなければなりません。smtpd サービスを定義している 行の前に "#" をつけてください:

/etc/postfix/master.cf:
    #smtp      inet  n       -       n       -       -       smtpd

Postfixを起動するには:

# postfix start

とするか、Postfixの sendmail コマンドを:

# sendmail -bd -qwhatever

として、maillog ファイルでエラーメッセージがないか探してください。 パス名は /var/log/maillog, /var/log/mail, /var/log/syslog またはそれ以外 です。典型的にはパス名は /etc/syslog.conf ファイルで定義されます。

% egrep '(reject|warning|error|fatal|panic):' /some/log/file

注意: 最も重要なエラーメッセージが最初にログに記録されます。それ以降の メッセージはあまり役に立ちません。

メールキューを調べるには、次のコマンドのいずれかを使います:

% mailq

% sendmail -bp

% postqueue -p

section 12 の "メンテナンス" も参照してください。

8 - バーチャルインターフェースを通してメールを 送受信するPostfixの設定

それ以外に、バーチャルなインタフェースアドレスでPostfixを走らせる ことによって、Sendmailの設定には手をつけずにPostfixシステムをメールの送信 「および」受信に使うことができます。単にmail user agentがPostfixの sendmail プログラムを直接呼び出すように設定するだけです。

/etc/postfix/main.cf ファイルで、次のように指定します:

/etc/postfix/main.cf:
    myhostname = virtual.host.tld
    inet_interfaces = $myhostname
    mydestination = $myhostname

section 10 の"必要な設定ファイルの編集"に従い、 section 11 の文章 "chroot すべきか chroot せざるべきか" を再検討してください。

Postfixを起動するには:

# postfix start

とするか、Postfixの sendmail コマンドを:

# sendmail -bd -qwhatever

として、maillog ファイルでエラーメッセージがないか探してください。 パス名は /var/log/maillog, /var/log/mail, /var/log/syslog またはそれ以外 です。典型的にはパス名は /etc/syslog.conf ファイルで定義されます。

% egrep '(reject|warning|error|fatal|panic):' /some/log/file

注意: 最も重要なエラーメッセージが最初にログに記録されます。それ以降の メッセージはあまり役に立ちません。

メールキューを調べるには、次のコマンドのいずれかを使います:

% mailq

% sendmail -bp

% postqueue -p

section 12 の "メンテナンス" も参照してください。

9 - Sendmailの代わりにPostfixを走らせる

Postfixのインストールに先立ち、現在動いている sendmail のプログラム ファイルを6章に記載したように保存します。未配送メールを 全て送るために、最低数日間は古い sendmail を動かし続けるよう気をつけて 下さい。そうするために、 sendmail を止めて、次のようにリスタートします:

# /usr/sbin/sendmail.OFF -q

注意: これは古い sendmail の文法です。新しいバージョンはメール送信や キューを走らせるために別のプロセスを使います。

下にある "必要な設定ファイルの編集" セクションを参照した後、次のように Postfixシステムを起動します:

# postfix start

とするか、郷愁に浸りたければ、Postfixの sendmail コマンドを:

# sendmail -bd -qwhatever

として、maillog ファイルでエラーメッセージがないか探してください。 パス名は /var/log/maillog, /var/log/mail, /var/log/syslog またはそれ以外 です。典型的にはパス名は /etc/syslog.conf ファイルで定義されます。

% egrep '(reject|warning|error|fatal|panic):' /some/log/file

注意: 最も重要なエラーメッセージが最初にログに記録されます。それ以降の メッセージはあまり役に立ちません。

メールキューを調べるには、次のコマンドのいずれかを使います:

% mailq

% sendmail -bp

% postqueue -p

section 12 の "メンテナンス" も参照してください。

10 - 必要な設定ファイルの編集

注意: このセクションでカバーしている内容は、 BASIC_CONFIGURATION_README ドキュメントでより詳細に書かれています。以下に示された情報は経験豊富な システム管理者をターゲットにしています。

10.1 - Postfix設定ファイル

デフォルトではPostfixの設定ファイルは /etc/postfix にあります。最も 重要な2つのファイルが main.cfmaster.cf です; これらのファイルは root が 所有する必要があります。誰か他の人に main.cf もしくは master.cf (および その親ディレクトリ) の書き込み権を与えることは、その人に root の特権を 与えることを意味します。

/etc/postfix/main.cf では、最低限の数の設定パラメータを設定する必要が あるでしょう。Postfix設定パラメータはシェル変数に似ていますが、2つの重要な 違いがあります: 1つ目はPostfixは UNIX シェルが理解するような引用符を 理解しないということです。

設定パラメータは次のように指定します:

/etc/postfix/main.cf:
    parameter = value

そして、名前の前に "$" をつけることでそれを使います:

/etc/postfix/main.cf:
    other_parameter = $parameter

値が与えられる前に $parameter を使うこともできます (これが UNIX シェル変数との2つ目の主な違いです)。Postfix設定言語は無精な評価方法を 使っており、実行時に必要となるまでパラメータの値を参照しません。

main.cfmaster.cf ファイルを変更するたびに、実行中のメールシステムを 更新するために次のコマンドを実行してください:

# postfix reload

10.2 - 修飾されていないアドレスのデフォルトドメイン

まずはじめに、修飾されていないアドレス (すなわち @domain.tld がない アドレス) に付け加えるドメイン名を設定しなければいけません。 "myorigin" パラメータのデフォルトは ローカルのホスト名ですが、非常に小さなサイトではこれで十分でしょう。

いくつか例示します (1つだけ使ってください):

/etc/postfix/main.cf:
    myorigin = $myhostname    ("user@$myhostname" としてメールを送信)
    myorigin = $mydomain      ("user@$mydomain" としてメールを送信)

10.3 - ローカルで受信するドメイン

次にPostfixのシステムがローカルで配送すべきメールアドレスを設定する 必要があります。

いくつか例示します (1つだけ使ってください):

/etc/postfix/main.cf:
    mydestination = $myhostname, localhost.$mydomain, localhost
    mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
    mydestination = $myhostname

最初の例はワークステーションに適しており、2番目はドメイン全体のメール サーバに適しています。3番目の例はバーチャルホストインターフェースで実行 している場合に使います。

10.4 - プロキシ/NAT インターフェースアドレス

proxy_interfaces パラメータにはPostfixがプロキシやネットワークアドレス変換ユニットを 通してメールを受信する全てのネットワークアドレスを指定します。 ネットワークアドレスの代わりに、象徴的なホスト名を指定することもできます。

「重要」: あなたのシステムが他のドメインのバックアップ MX ホストで ある場合、プロキシ/NAT 外部アドレスを指定しなければいけません。そう しないと、プライマリ MX ホストがダウンしているときにメール配送ループが 生じてしまいます。

例: NAT ボックスの背後にあってバックアップ MX ホストを動かしている ホスト。

/etc/postfix/main.cf:
    proxy_interfaces = 1.2.3.4 (プロキシ/NAT 外部ネットワークアドレス)

10.5 - 中継を受けるべきローカルクライアント

マシンがオープンネットワークにある場合、そのマシンを通してインター ネットへメールをリレーすることを許可するクライアント IP アドレスを指定 しなければいけません。デフォルトの設定はマシンがつながっている サブネットワーク全てです。これでは多過ぎるクライアントにリレー許可を 与えることがあります。私自身の設定:

/etc/postfix/main.cf:
    mynetworks = 168.100.189.0/28, 127.0.0.0/8

10.6 - よそからのメールを中継すべき配送先

マシンがオープンネットワークにある場合、よそからのメールを転送するかどうかも 指定しなければいけません。デフォルトの設定では、 $mydestination にリストアップ された全てのドメイン (およびそのサブドメイン) へメールを転送します。 推奨設定 (1つだけ使ってください):

/etc/postfix/main.cf:
    relay_domains =            (よそからのメールを転送しない)
    relay_domains = $mydomain  (自分のドメインとそのサブドメイン)
    relay_domains = $mydomain, other.domain.tld, ...

10.7 - オプション: リモート配送用のスマートホストを設定する

システムがファイアウォール内にある場合は、 relayhost の設定をする必要が あります。できるならPostfixが DNS 探索を使えるように、そしてプライマリの MX ホストがダウンしている時にセカンダリの MX ホストを利用できるように組織の ドメイン名を設定します。そうでなければ、単に決めうちされたホスト名を 設定します。

いくつか例示します (1つだけ使ってください):

/etc/postfix/main.cf:
    relayhost = $mydomain
    relayhost = [mail.$mydomain]

[] で囲まれた形式では、DNS の MX レコードは無視します。

デフォルトでは、SMTP のクライアントはリレーホストを設定した場合でも 送信及び受信アドレスを DNS 探索します。もし DNS サーバにアクセスできない のであれば、SMTP クライアントの DNS 探索を次のように止めます:

/etc/postfix/main.cf:
    disable_dns_lookups = yes

STANDARD_CONFIGURATION_README ファイルに、より多くのファイアウォール内やダイアルアップネットワーク用の ヒントや tips があります。

10.8 - aliases データベースを作成する

Postfixは local(8) 受信者宛のメールを他に 向け直すのにSendmail互換の aliases(5) テーブルを 使います。たいていの場合、この情報は2つのファイルに保存されます: テキスト ファイルの /etc/aliases とインデックス化された /etc/aliases.db です。 コマンド "postconf alias_maps" を 使うと、テキストファイルの正確な場所がわかります。

まず、実在の人にメールが転送される root、postmaster、"postfix" エイリアスを 持つように、テキストファイルを必ず更新してください。Postfixには、ローカルの 状態に適用できるようにするサンプル aliases ファイル、/etc/postfix/aliases が あります。

/etc/aliases:
    root: you
    postmaster: root
    postfix: root
    bin: root
    etcetera...

注意: ":" の前に空白を置いてはいけません。

最後に、以下のいずれかのコマンドでインデックス化された aliases ファイルを 構築してください:

# newaliases
# sendmail -bi

11 - chroot すべきか chroot せざるべきか

Postfixのデーモンは chroot 監獄で走るように (master.cf で) 設定する ことができます。プロセスは低い特権レベルに固定されて走り、Postfixキュー ディレクトリ (/var/spool/postfix) へのアクセスしかしません。これは攻撃に 対して重要な障壁になります。この障壁は通り抜けないものではありませんが、 多少は役に立つでしょう。

メールをローカルに配送したり、非Postfixコマンドを実行するデーモンは 例外ですが、それ以外の全てのデーモンは chroot して走らせることが可能です。

高いセキュリティが要求されるサイトはネットワークに話しかける全ての デーモンを chroot することを考えるべきです: これには smtp(8) および smtpd(8) プロセス、また lmtp(8) クライアントを含むかも 知れません。作者自身の porcupine.org メールサーバは chroot できる全ての デーモンを chroot して走らせています。

デフォルトの /etc/postfix/master.cf ファイルではどのPostfixデーモンも chroot されていません。chroot 操作を有効にするには、/etc/postfix/master.cf を 編集して下さい。方法はファイルの中に書かれています。

chroot されたデーモンは全てのファイル名の解決はPostfixキューディレクトリ (/var/spool/postfix) からの相対値であることに注意して下さい。chroot jail を うまく使うには、ほとんどの UNIX システムでいくつかのファイルやデバイスノードを 持ち込む必要があります。examples/chroot-setup ディレクトリには、さまざまな オペレーティングシステムでPostfixシステムを chroot 環境で動かすための 設定のスクリプト集があります。

さらに、おそらくほとんどの場合 syslogd がPostfixキューディレクトリ内の ソケットを listen するように設定する必要があります。あるシステムでの例:

FreeBSD:
# mkdir -p /var/spool/postfix/var/run
# syslogd -l /var/spool/postfix/var/run/log
Linux, OpenBSD:
# mkdir -p /var/spool/postfix/dev
# syslogd -a /var/spool/postfix/dev/log

12 - Postfixシステムのメンテナンス

Postfixデーモンプロセスはバックグラウンドで走り、問題や通常の活動を syslog デーモンに渡します。ログファイル名は /etc/syslog.conf で指定します。 最低限、次のようなものが必要です:

/etc/syslog.conf:
    mail.err                                    /dev/console
    mail.debug                                  /var/log/maillog

「重要」: syslogd はファイルを作りません。syslogd を(再)起動する前に これらを作らなければいけません。

「重要」: Linux ではパス名の前に "-" 文字を置く必要があります。すなわち、 -/var/log/maillog。そうしないと、syslogd はPostfixが使う以上にシステム リソースを使います。

願わくば問題の数が少ないことを。しかし次のコマンドを毎晩 syslog ファイルが rotate される前に実行するのはいいことです:

# postfix check
# egrep '(reject|warning|error|fatal|panic):' /some/log/file

DEBUG_README ドキュメントには、 Postfixロギングの "warning" 等のラベルの意味が記述されています。