このページではLinux構築した自宅サーバーで使用するMTAであるPostfixメールの転送・受信・拒否の制御について初心者向けに解説します。

HPの格安エントリーサーバー機"HP ProLiant ML115"でのLinuxサーバー構築記を掲載しました。サーバー機の選定にお悩みの方は是非お越しください...。お便利サーバー.com管理人。
サーバーのセットアップ
Postfixの設定

Postfixについて

Postfixのファイル構成

設定ファイルmain.cfについて

ホスト名とドメイン名の設定

受信するホスト名の設定

ホスト名毎のメールの振分け

メール転送設定の使い分け

受信/転送に関する設定

セキュリティ関連の設定

"main.cf"の書式チェック

Postfixのコントロール

連携するアプリケーション

サイト内検索

Postfixの受信/転送に関する設定

以下は、 Postfix の主設定ファイル "/etc/postfix/main.cf" の設定項目です。

"unknown_local_recipient_reject_code"〜ユーザー不明の場合のエラーコード

WBEL3 及び CentOS3 では 213,214行目 、WBEL4及びCentOS4では 211行目 あたりに記述があります。

Postfix が受信したメールを、自ホスト内に保存するとき、該当する宛先のメールボックスが見当たらなかった場合、送信元に表示するエラーコードを設定する ディレクティブ です。

WBEL3及びCentOS3の場合 デフォルト では、

#unknown_local_recipient_reject_code = 550
unknown_local_recipient_reject_code = 450

となっていて、エラーコード 450 が送信元に表示されることになります。

ルミカショップへようこそ
管理人がお手伝いしたサイトです。 一度お越しくださいね!。

ところがこれには少し問題があります。

エラーコード 450 は、それを受け取った MUA または MTA 側では、

「今は事情があって受信できないので、後からもう一度送信しなおしてください。」

という意味に解釈されることがあり、ありもしないアカウント宛てに、一定時間毎に何度もメールの再送信を試みられてしまうことがあるからです。

これではメールを送る側にも送られる側にも迷惑な話ですから、

「該当するユーザーが見当たらないので、そのメールは受信できません。」

このディレクティブに何も設定しなければ 550 を返しますので、両方のディレクティブをコメントアウトしてもOKです。
でも、WBEL3やCentOS3のPostfixはどうしてこんなデフォルト設定になっているのでしょうか?。

という意味のエラーコード 550 を返すように、

unknown_local_recipient_reject_code = 550
#unknown_local_recipient_reject_code = 450

と修正することをお勧めします。

ただしWBEL4及びCentOS4の場合はデフォルトで、

unknown_local_recipient_reject_code = 550

となっていますから修正する必要はありません。

"mynetworks_style"〜転送を許可するホストの範囲

WBEL3 及び CentOS3 では 242行目〜 、WBEL4及びCentOS4では 239行目〜 あたりに記述があります。

Postfix が受信したメールを他の ホスト へ転送可能にする、 送信元のホストの範囲を設定する ディレクティブ です。 デフォルト では、

#mynetworks_style = class
#mynetworks_style = subnet
#mynetworks_style = host

と、全ての設定パターンがコメントアウトされていますが、この場合は "mynetworks_style = subnet" が設定されているものと解釈されます。

この場合、 構築中のLinuxサーバー と同じ サブネット 、すなわち "192.168.100.0/24" と、 ループバックアドレス である "127.0.0.0/8" が設定対象となります。

これが "mynetworks_style" ディレクティブの推奨設定です。

つまり、

mynetworks_styleがsubnetまたは省略されたときのPostfixの動作
"mynetworks_style"が"subnet"または省略されたときのPostfixの動作

のように、"192.168.100.0/24"または"127.0.0.0/8"からPostfixに送信されたメールは、外部のMTAへと転送できますが、それ以外の IPアドレス のホストから送信されたメールは、外部のMTAへは転送されないということです。

ちなみに、 "mynetworks_style = class" を有効にすると、同じ ネットワーククラス に属するホストがすべて対象になり、設定上 セキュリティ の問題を抱えることになります。

また、 "mynetworks_style = host" を有効にすると、自ホストである 構築中のLinuxサーバー のみが対象となります。この設定は、Postfixを外部のホストの MUA から利用しない場合、つまり、 構築中のLinuxサーバー 内の アプリケーション を使ってのみメールを送信するような運用の場合に限られるでしょう。

ところで、このディレクティブが有効になるには、次に説明する "mynetworks" ディレクティブが 設定されていない ことが条件になります。

また、以後に説明するメールの受信/中継の判定のためのディレクティブ "smtpd_client_restrictions" smtpd_client_restrictionsディレクティブについて を利用するには "mynetworks" が有効になっていないと制御が難しくなりますので、できればこの部分は面倒でも次の "mynetworks" で設定を行うことをオススメします。

"mynetworks"〜転送を許可するホストの範囲(個別設定)

WBEL3 及び CentOS3 では 257行目〜 、WBEL4及びCentOS4では 254行目〜 あたりに記述があります。

ディレクティブ の意味は上で説明した "mynetworks_style" ディレクティブと同じです。

ただしこのディレクティブは、転送を許可するホストの範囲を IPアドレス またはネットワーク表記で具体的に設定します。

デフォルト では全ての設定パターンがコメントアウトされていますが、このディレクティブを有効にすると、 "mynetworks_style" "mynetworks" の設定が追加されるのではなく、 "mynetworks_style" の設定が無効になってしまう点に注意してください。

例えば、 "mynetworks_style = subnet" に該当する設定に加えて WAN 空間の特定のIPアドレスのホストから受信したメールの転送を追加で許可したいとき、これを "mynetworks" ディレクティブで記述する場合には、追加で許可するIPアドレスアドレスを記述するだけではなく、

mynetworks = 192.168.100.0/24, 127.0.0.0/8, 210.xxx.xxx.xxx
#mynetworks = $config_directory/mynetworks
#mynetworks = hash:/etc/postfix/network_table

のようにすべてのIPアドレス範囲を記述することになります。

MUA クライアント アプリケーション ですから、MTAからのメールの転送先ではありえません。

さて、Postfixが転送を試みる「他の ホスト 」とは、正確には 「他のホストからメールの受け入れが可能な MTA ということになります。

Postfix は、"mynetworks_style"や"mynetworks"ディレクティブで指定されたホスト(MTAまたはMUA)からのメールを受信すると、その宛先が "mydestination" ディレクティブで指定されたもの以外の場合、 DNSサーバー を利用してメールの宛先の 名前解決 を行い、自身以外のMTAへの転送を試みることになります。

実際のところ、ほとんどのインターネット利用者は ISP から提供されたメールアドレスを使用しているはずから、あなたが 構築中のLinuxサーバー 上のPostfixを使って友人などにメールを送りたい場合、あなたが使うMUAに対して"mynetworks_style"や"mynetworks"ディレクティブで「メール転送許可」を設定する必要があります。

ただし、自分の管理下にないMTAやMUAに対しては、 絶対にメール転送許可を設定してはいけません。

もしもそういう設定をしてしまうと、 構築中のLinuxサーバー スパムメールの発信基地 にされてしまうかもしれないからです。

スパマーは自分で設置したMTAから直接スパムメールを発信するわけにはいきませんから 自分所有するサーバーでスパムメールを発信できない理由 、「不用意に外部のMTAからの中継を許可しているメールサーバー」を常日頃から探し回っています。

そしてもし 構築中のLinuxサーバー がスパムメールの発信基地にされてしまったら、あなたのメールサーバーそのうちブラックリストに挙げられ、多くのMTAから受信拒否されてしまうことになるでしょう。

"alias_maps"〜受信メールの再転送先ファイルの指定

WBEL3 及び CentOS3 では 380行目〜 、WBEL4及びCentOS4では 375行目〜 あたりに記述があります。

Postfix は、自ホスト内に保存されるべきメールを、 データベース を参照して特定のアドレスへ再転送を行わせることができます。

その詳細については、 メールの転送設定について で詳しく説明しますが、この "alias_maps" ディレクティブ では、そのデータベースファイルの形式とファイルシステム上の位置を指定します。

WBEL3,CentOS3の場合 デフォルト では、

#alias_maps = dbm:/etc/aliases
alias_maps = hash:/etc/postfix/aliases
#alias_maps = hash:/etc/aliases, nis:mail.aliases
#alias_maps = netinfo:/aliases

と記述されていますから、 「hash形式で"/etc/postfix/aliases(正確にはaliases.db)を参照する。」 と設定されていることになります。

動作の面だけから考えれば、この設定はこのままで何の問題もないのですが、お勧めは、

#alias_maps = dbm:/etc/aliases
#alias_maps = hash:/etc/postfix/aliases
#alias_maps = hash:/etc/aliases, nis:mail.aliases
#alias_maps = netinfo:/aliases
alias_maps = hash:/etc/aliases

です。

実はこの"aliases.db"の参照機能はPostfixがその互換対象としている Sendmail の仕組みをそのまま受け継いだものです。

しかし、デフォルトのSendmailは、hash形式の "/etc/aliases.db" を参照するようになっていますから、この設定のようにPostfixも同じデータベースを参照するようにしておくと、この二つの MTA を切り替えて使用したい場合、個々にデータベース化作業を行う必要がないというわけです。

一方のWBEL4,CentOS4のデフォルトの記述は、

#alias_maps = dbm:/etc/aliases
alias_maps = hash:/etc/aliases
#alias_maps = hash:/etc/aliases, nis:mail.aliases
#alias_maps = netinfo:/aliases

となっていますから修正する必要はありません。

"alias_database"〜newaliasesコマンドの実行対象の指定

WBEL3 では 390行目〜 、WBEL4では 385行目〜 あたりに記述があります。

"aliases.db" を作成するための データベース コマンド である、 newaliases を実行する際に、その出力先のデータベースファイルを指定する ディレクティブ です。

WBEL3,CentOS3では デフォルト で、

#alias_database = dbm:/etc/aliases
#alias_database = dbm:/etc/mail/aliases
#alias_database = hash:/etc/aliases
#alias_database = hash:/etc/aliases, hash:/opt/majordomo/aliases

と記述されていますので、上から3番目を有効にすれば良いのですが、 "alias_maps" ディレクティブと連動しておいたほうが面倒がないので、

#alias_database = dbm:/etc/aliases
#alias_database = dbm:/etc/mail/aliases
#alias_database = hash:/etc/aliases
#alias_database = hash:/etc/aliases, hash:/opt/majordomo/aliases
alias_database = $alias_maps

と設定しておくと良いでしょう。

また、理由はよくわかりませんがWBEL3,CentOS3の場合、この "alias_database" ディレクティブは、この"/etc/postfix/main.cf"の末尾に有効になっている記述がくっついています。

alias_database = hash:/etc/postfix/aliases

もちろんこの記述は不要ですから、

#alias_database = hash:/etc/postfix/aliases

のように無効にしてください。

おそらく バグ だと思われますが、WBEL4及びCentOS4のPostfixの場合、
"alias_database = $alias_maps"
というように、 "$" を使った変数で設定するとエラーになってPostfixが起動しなくなりますので注意してください。

一方WBEL4及びCentOS4の場合はデフォルトで、

#alias_database = dbm:/etc/aliases
#alias_database = dbm:/etc/mail/aliases
alias_database = hash:/etc/aliases
#alias_database = hash:/etc/aliases, hash:/opt/majordomo/aliases

と適切な設定になっていますからそのままでOKです。

関連セクションへ 関連セクション・ メールサーバーの構築

このサイトに対するご意見、ご要望、苦情、泣き言、献上品、資金援助などがございましたら こちら からお寄せください(お返事できなかったらごめんなさい)。もちろん リンクフリー です。趣味や勉強のためでしたら、引用、転用、コピー、朗読、その他OKです。このサイトへのリンクについては こちら をご覧ください。
Powered by Apache
”Linux”は、Linus Torvalds 氏の各国における登録商標です。”Red Hat”及びRed Hatのロゴおよび Red Hat をベースとしたすべての商標とロゴは、各国におけるRed Hat, Inc. 社の商標または登録商標です。その他のプログラム名、システム名、製品名などは各メーカー、ベンダの各国における登録商標又は商標です。
Powered by White Box Enterprise Linux