これはあなたが最小のステップで最初からPostfixを立ち上げて走らせる 手助けをするためのブートストラップドキュメントです。すでにコンパイルされた バージョンのPostfixを使っているのであれば、システムをより詳細に記述する ことを目的とした、一般的なPostfixドキュメントを読んでいるべきです。 このブートストラップドキュメントは一般的なPostfixドキュメントの一部とは 見なさない方がよいでしょう。
このドキュメントにはPostfixシステムの作成・インストール・設定の 仕方が書いてあります。これにより、次のうち一つが出来るようになります。
このドキュメントで触れる話題:
以下の説明で
# command
と書かれたコマンドはスーパーユーザで実行します。
% command
のように書かれたコマンドは一般ユーザとして実行します。
ドキュメントは 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 ディレクトリにあります。
ある時点で、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)
または非常に類似したもの。
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
最適化は自動的にオフになる場合があります。
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 ファイルを 参照してください。
全ての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
1000 以上の配送プロセスを動かすような、非常に大きなアプリケーションの ためにPostfixをビルドするには、FD_SETSIZE マクロの定義を select() が正しく動くように上書きする必要があるかもしれません:
% make makefiles CCARGS=-DFD_SETSIZE=2048
注意: 上記は Linux の一部のバージョンでは効果がありません。これらの システムでは FD_SETSIZE の値はドキュメントにないインターフェースを使う ことでのみ変更できるようです。現在のところ、それは<bits/types.h> を直接含み (これは許されません)、__FD_SETSIZE マクロを上書きすることを 意味します。ドキュメントにないインターフェースはいつ警告なしに変更されるか 分からないことに注意してください。
コマンド
% make
が成功したら、Postfixのインストール (セクション6) に進んでください。
コンパイルエラーメッセージが出る場合、次はウェブを検索したり、 postfix-users@postfix.org メーリングリストに聞く番かもしれませんが、 初めにメーリングリストのアーカイブを検索することを忘れないでください。 メーリングリストアーカイブのいくつかは http://www.postfix.org/ から リンクされています。
それぞれのシステムタイプはユニークな名前で識別されます。例: 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 を書く必要性が生じてしまいます。
この文章はソースコードからのPostfixのインストール方法を記述して います。他のシステムに配布するためにパッケージをビルドするので あれば、PACKAGE_README ファイルを参照 してください。Mac OS X でソースからPostfixをインストールする場合の情報は auxiliary/MacOSX/README-INSTALL.OSX を参照してください。
「重要」: もし現在インストールされている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" を作成します。できればこれは誰もログインできない アカウントにします。このアカウントにはログインシェルやホームディレクトリは 必要ありません。私のパスワードとグループファイルのエントリは次のように なっています:
/etc/passwd: postfix:*:12345:12345:postfix:/no/where:/no/shell /etc/group: postfix:*:12345:
注意: "postfix:" の前に空白を入れてはいけません。
他のユーザアカウントに使われていないグループ ID を持つグループ "postdrop" を作成します。postfix ユーザアカウントにも使われては いけません。私のグループファイルエントリは次のようになっています:
/etc/group: postdrop:*:54321:
注意: "postdrop:" の前に空白を入れてはいけません。
コンパイルされたソースコードからPostfixをインストール、もしくはアップ グレードするには、スーパーユーザで以下のいずれかのコマンドを実行します:
# make install (インタラクティブバージョン、最初のインストール) # make upgrade (非インタラクティブバージョン、アップグレード用)
非インタラクティブバージョン ("make upgrade") は以前に インストールされた /etc/postfix/main.cf が必要です。このファイルが 存在しなければ、代わりにインタラクティブインストール ("make install") を使ってください。
インタラクティブバージョンでは、インタラクティブに上書き可能な パス名を提案し、将来のアップグレードで便利なように /etc/postfix/main.cf に プリファレンスを保存します。
Postfixを走らせたい方法によって、以下のセクションから選んで進んで 下さい:
インストールされているSendmailを変更せずにメールの 送信 のみを行なう (セクション7)。
すでにインストールされているSendmailを変更せずに、バーチャルホスト インターフェースを通してメールを送受信する (セクション8)。
Sendmailの代わりに を走らせる (セクション9)。
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 の "メンテナンス" も参照してください。
それ以外に、バーチャルなインタフェースアドレスで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 の "メンテナンス" も参照してください。
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 の "メンテナンス" も参照してください。
注意: このセクションでカバーしている内容は、 BASIC_CONFIGURATION_README ドキュメントでより詳細に書かれています。以下に示された情報は経験豊富な システム管理者をターゲットにしています。
デフォルトではPostfixの設定ファイルは /etc/postfix にあります。最も 重要な2つのファイルが main.cf と master.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.cf や master.cf ファイルを変更するたびに、実行中のメールシステムを 更新するために次のコマンドを実行してください:
# postfix reload
まずはじめに、修飾されていないアドレス (すなわち @domain.tld がない アドレス) に付け加えるドメイン名を設定しなければいけません。 "myorigin" パラメータのデフォルトは ローカルのホスト名ですが、非常に小さなサイトではこれで十分でしょう。
いくつか例示します (1つだけ使ってください):
/etc/postfix/main.cf: myorigin = $myhostname ("user@$myhostname" としてメールを送信) myorigin = $mydomain ("user@$mydomain" としてメールを送信)
次にPostfixのシステムがローカルで配送すべきメールアドレスを設定する 必要があります。
いくつか例示します (1つだけ使ってください):
/etc/postfix/main.cf: mydestination = $myhostname, localhost.$mydomain, localhost mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain mydestination = $myhostname
最初の例はワークステーションに適しており、2番目はドメイン全体のメール サーバに適しています。3番目の例はバーチャルホストインターフェースで実行 している場合に使います。
proxy_interfaces パラメータにはPostfixがプロキシやネットワークアドレス変換ユニットを 通してメールを受信する全てのネットワークアドレスを指定します。 ネットワークアドレスの代わりに、象徴的なホスト名を指定することもできます。
「重要」: あなたのシステムが他のドメインのバックアップ MX ホストで ある場合、プロキシ/NAT 外部アドレスを指定しなければいけません。そう しないと、プライマリ MX ホストがダウンしているときにメール配送ループが 生じてしまいます。
例: NAT ボックスの背後にあってバックアップ MX ホストを動かしている ホスト。
/etc/postfix/main.cf: proxy_interfaces = 1.2.3.4 (プロキシ/NAT 外部ネットワークアドレス)
マシンがオープンネットワークにある場合、そのマシンを通してインター ネットへメールをリレーすることを許可するクライアント IP アドレスを指定 しなければいけません。デフォルトの設定はマシンがつながっている サブネットワーク全てです。これでは多過ぎるクライアントにリレー許可を 与えることがあります。私自身の設定:
/etc/postfix/main.cf: mynetworks = 168.100.189.0/28, 127.0.0.0/8
マシンがオープンネットワークにある場合、よそからのメールを転送するかどうかも 指定しなければいけません。デフォルトの設定では、 $mydestination にリストアップ された全てのドメイン (およびそのサブドメイン) へメールを転送します。 推奨設定 (1つだけ使ってください):
/etc/postfix/main.cf: relay_domains = (よそからのメールを転送しない) relay_domains = $mydomain (自分のドメインとそのサブドメイン) relay_domains = $mydomain, other.domain.tld, ...
システムがファイアウォール内にある場合は、 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 があります。
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
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 するように設定する必要があります。あるシステムでの例:
# mkdir -p /var/spool/postfix/var/run # syslogd -l /var/spool/postfix/var/run/log
# mkdir -p /var/spool/postfix/dev # syslogd -a /var/spool/postfix/dev/log
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
最初の行 (postfix check) はPostfixにファイルパーミション/所有者の 矛盾を報告させます。
2行目はメールソフトウェアからの問題報告や、中継やジャンクメール アクセスブロックがどの程度有効かの報告を探します。これは大量に出力されるかも しれません。興味のない情報を除くために、後処理をおこなってもよいでしょう。
DEBUG_README ドキュメントには、 Postfixロギングの "warning" 等のラベルの意味が記述されています。