プロジェクト

全般

プロフィール

Postfixを勉強したときのこと

概要

Postfixの入門解説資料。
mydestinetionやリレーの設定が分かる・調べられるようにするのが目標。
他の解説ページも使うの推奨。特に「Postfixのぺーじ」が良いと思う。

前準備

CentOS 6、7なら標準で入って稼働しています。特にインストール作業などは不要です。

まずは以下のファイルを抑える。

ファイル名 役割
/var/log/maillog ログファイル
/etc/postfix/main.cf メインの設定ファイル
/etc/aliases ユーザー名のエイリアス
/usr/share/doc/postfix-2.10.1 Postfix付属のドキュメント類。当然英語

動作を見るときはtail -fでログファイルを監視しましょう。

簡単な歴史も抑えましょう、postfixより前の世代のメールサーバソフトとしてsendmailというものがありました。
大いに流行ったらしいので、postfixはsendmailと互換性を持つように作られています。「よくわからないなぁ」と思う部分があったら
「たぶん、sendmailの影響だろう」と思って納得してください。

ログの見方

以下はログの実例

Mar 24 03:05:03 hostname postfix/pickup[17871]: 56060D2814C: uid=0 from=<root>
Mar 24 03:05:03 hostname postfix/cleanup[1054]: 56060D2814C: message-id=<20190323180503.56060D2814C>
Mar 24 03:05:03 hostname postfix/qmgr[1406]: 56060D2814C: from=<root@見せられないよ>, size=1445, nrcpt=1 (queue active)
Mar 24 03:05:03 hostname postfix/smtp[1060]: 56060D2814C: to=<redmine@見せられないよ>, relay=リレー先サーバ[xxx.xxx.xxx.xxx]:25, delay=0.65, delays=0.31/0.04/0.22/0.08, dsn=2.0.0, status=sent (250 2.0.0 x2NI53NW065825 Message accepted for delivery)
Mar 24 03:05:03 hostname postfix/qmgr[1406]: 56060D2814C: removed

Postfixは複数のプロセスが連携して動いています。各プロセスが協調するためにキューを使用しています。ですのでキューの情報がとても大事です。
最後の行「potfix/qmgr[1406] removed」があるとうまくいったと思ってください。defferedって見えたら失敗したと思ってください。
問題があると処理されずキューに溜まっていきます。

構造

postfix

引用元:http://www.wakhok.ac.jp/~kanayama/summer/05/net/node78.html

この図を頭に叩き込んでください。

  1. pickupとsmtpdがメール送信要求を受け取る
  2. clenupからqmgrに伝わり。
  3. local配信か他のsmtpサーバに伝えられる

というメールを受信してからの処理の流れがまとまっています。masterはこれら複数のプロセスを制御しています。

設定は以下のページを参考に読むといいでしょう。
http://www.postfix-jp.info/trans-2.3/conf/main.cf.jp

受信設定

「$myhostname」は頭に$をつけることで設定した内容を後から参照するときに使います。

項目 説明
myhostname 自分のホスト名、hostnameコマンドで得られるものが入ると思う
inet_interfaces メールの受信を行うネットワークインターフェースを指定。動かしたいだけなら「all」と入れる
mydestination 自分が最終目的地と判断する(ローカルユーザーに配送する)メールドメイン。デフォルトは$myhostnameとかだったかな。 user@example.comあてのメールを受けたとき、mydestination=example.comだと「このメールが自分のマシンに受け取るユーザーがいる」と思いローカル配送を試みる。
# インターネットのホストとドメイン名
# 
# myhostname パラメータにはこのメールシステムのインターネット上の
# ホスト名を指定します。デフォルトは gethostname() から得られた
# FQDN(fully-qualified domain name, ホスト名+ドメイン名)です。
# $myhostname は他の多くの設定パラメータでデフォルト値として使われます。
#
#myhostname = host.domain.tld
#myhostname = virtual.domain.tld
# mydomain パラメータにはローカルなインターネットドメイン名を指定
# します。デフォルトは $myhostname からはじめの部分を引いたものです。
# $mydomain は他の多くの設定パラメータでデフォルト値として使われます。
#
#mydomain = domain.tld
# inet_interfaces パラメータには配送されたメールをメールシステムが
# 受け取る際のネットワークインターフェースのアドレスを指定します。
# デフォルトではソフトウェアはマシン上のすべてのアクティブなインター
# フェースを要求します。このパラメータは user@[ip.address] へのメールも
# 制御します。
#
# プロキシもしくはネットワークアドレス変換ソフトを通して自身に
# 転送されるネットワークアドレスについては、proxy_interfaces
# パラメータも参照してください。
#
# 注意: このパラメータを変更したら、Postfixを stop/start する
# 必要があります。
#
#inet_interfaces = all
#inet_interfaces = $myhostname
#inet_interfaces = $myhostname, localhost
# mydestination パラメータには、このマシンが自分自身が最終目的地だと
# みなすドメインのリストを指定します。
#
# これらのドメインは local_transport パラメータで設定された配送
# エージェントに回されます。それはデフォルトでは /etc/passwd や
# /etc/aliases、およびそれと同等のものに書かれた全ての受信者を
# 検索する UNIX 互換の配送エージェントです。
#
# デフォルトは $myhostname + localhost.$mydomain です。メールドメイン
# ゲートウェイでは、$mydomain も含めるべきです。
(途中略)
#mydestination = $myhostname, localhost.$mydomain, localhost
#mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
#mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain,
#   mail.$mydomain, www.$mydomain, ftp.$mydomain

送信設定

項目 説明
myorigin ローカルユーザーが送信したメールにつけられるドメイン名。デフォルト$myhostname。userというLinuxユーザーがメールを出すとuser@$originという送信元で出される。
relayhost 受け取ったけど送るユーザーがいないときに、ここで設定されたマシンに対してリレーする
# メールの送信
# 
# myorigin パラメータにはローカルで送信されたメールがどのドメインから
# 来るように見えるかを指定します。デフォルトは $myhostname で、これは
# 小さなサイト向きです。もし複数のマシンがあるドメインで走らせるので
# あれば、(1)これを $mydomain に変えて、(2) それぞれのユーザに対する
# エイリアスを user@that.users.mailhost の形でドメイン全体に渡って
# 作るべきです。
#
# 送信者と受信者のアドレス間の一貫性を保つため、myorigin は
# @domain 部分がない受信者アドレスに付け加えられるデフォルトの
# ドメインも指定します。
#
#myorigin = $myhostname
#myorigin = $mydomain
# relay_domains パラメータはこのメールシステムがどの目的地にメールを
# リレーするかを制限します。詳細な情報は postconf(5) の
# smtpd_recipient_restrictions の記述を参照してください。
#
# デフォルトでは、Postfixは
# - ($mynetworks にマッチする IP アドレスを持つ)「信頼された」
#   クライアントから全ての目的地へ
# - 「信頼されていない」クライアントから、$relay_domains または
#   そのサブドメインにマッチする目的地へ、送信者が指定した
#   ルーティングのアドレスを除いて
# リレーをします。デフォルトでは、relay_domains は $mydestination です。

ローカル配信とエイリアス

/etc/aliasesはユーザー名の別名を指定します。例えば「postmaster: root」となっていますが、
postmaster@myhost.example.comを自分のマシンが受け取ったとき、root@myhost.example.comへのメールとして扱います。

/etc/aliasesは編集するだけでは反映されません。編集後

newaliases

を打ちましょう。

今後

本当は全然足りないけどこの記事はここまで。次はまたいつかに。

参考