2011/01/29 CentOS5.5





上位メールサーバへ一律転送するメールサーバ

他のパターンはPostfixでメールサーバを構築する(解説)も参照してください。

いまどきインターネットへメールを送信する場合、ISPによって規制がかかっていることが多いです。
検証のネット環境で外部へメールを送信する場合、ISPのメールサーバを経由しなくてはならない状況が出てきます。


条件
 LAN内のメールサーバで社内のメールを集約し、上位サーバへ転送します。
 アウトバウンド用の中継サーバとなり、インバウンドのメールは受け付けません。
 

ISPのメールサーバに対して、SMTP-AUTHを使った転送の場合「SMTP-AUTHを使って上位メールサーバへ転送する」を参照してください。


Postfixをインストールする
Postfixを設定する
Telnetでメールの転送を確かめる


Postfixをインストールする
postfixがインストールされているか確かめ、見つからなければPostfixをインストールします。

#rpm -q postfix
(Postfixとバージョン番号が表示されるか?)

表示されなければ
#yum install postfix
としてインストールします。リポジトリへ接続できることが条件です。

インストールしても、Postfixは起動しません。一見起動したように見えますが、statusを見ると起動してません。
これはデフォルトでSendmailが起動しているので、すでに25番ポートが使用されているからです。

sendmailを止めてPostfixを起動させます。

#service sendmail stop  (Sendmailを止めます)
#chkconfig sendmain off (自動起動を止めます)
#service postfix start   (Postfixを起動させます)
#chkconfig postfix on   (自動起動を有効にします)
#service postfix status  (動作を確認します)

「telnet localhost 25」などとして25番ポートのPostfixへアクセスできるか確認します。
ファイアウォールも確認しておきましょう。


Postfixを設定する
次にPostfixの設定ファイルを編集します。
/etc/postfix/main.cfを次のように編集します。
設定するのはとりあえず4つ。

myhostname
転送先メールサーバに対して名乗るホストネームです。
指定しない場合、自分で自分の名前を調べて使用されます。
上位メールサーバを使うに当たっては、指定しておくのが礼儀でしょう。

myhostname = mail.example.local

inet_interface
どのIPアドレスへサービスをバインドするかです。
デフォルトはlocalhostへバインドされていますので、メールサーバ自身しかPostfixへアクセスできません。
とりあえず全てのIPアドレスへサービスを提供しましょう。
inet_interface = all

mynetworks
無条件に外部ドメインへメールをリレーするクライアントを指定します。
なにも指定されていなければ、サーバと同一セグメントからは制限なし。つまりLAN内からは誰のメールでも中継するようになります。
通常、これは強く信用できるLANのセグメント、もしくはホストを記述します。

mynetworks = 192.168.1.0/24

※なお、よく似た値にmynetworks_styleがあります。
mynetworks_style = class/subnet/hostの三種類があります。
classを設定した場合は、Postfixの持つアドレスクラスと同じセグメントが与えられます(サーバアドレスが172.16.1.10ならmynetworksに172.16.0.0/16を指定したのと同じ効果)
subnetを設定した場合は、Postfixの所属するサブネットが与えられます(サーバアドレスが172.16.1.10/24ならmynetworksに172.16.1.0/24を指定したのと同じ効果)
hostを設定した場合は、mynetworksにlocalhostを指定したのと同じ効果
mynetworks_styleを使用してもmynetworksを使用しても同じ動作をしますが、一見して内容が理解できるmynetworksを使うほうが勘違いが少ないでしょう。

relayhost
転送先の上位メールサーバを指定します。
指定方法大別して二つがあります。

relayhost = hogehoge.net
指定されたドメインをMXレコードで調べ、得られたアドレスへ対してメールを転送します。
IPアドレスを指定することはできません。

relayhost = [mail.hogehoge.net]
relayhost = [xxx.xxx.xxx.xxx] (上位SMTPサーバのアドレス)
[かっこ]で囲むと、指定されたホスト名をAレコードで調べ、得られたアドレスへ対してメールを転送します。
IPアドレスを指定することもできます。

※ISPのメールサーバがSMTP-AUTHを採用している場合は、SMTP-AUTHクライアントとしての設定が必要となります。
 別項「SMTP-AUTH」を参照してください。


ここまで設定したら、Postfixにコンフィグを読み込ませます。

#service postfis restart


Telnetでメールの転送を確かめる
TelnetでSMTPの挙動を確認します。

メールサーバ上でメールのログを監視します。
#tail -f /var/log/maillog

「telnet localhost 25」として直接SMTPサービスにログインし、SMTPコマンドを実行します。

太字部分が入力内容です。
宛先のメールは、外部のインターネットメールを使用します。

220 localhost.localdomain ESMTP Postfix
helo localhost
250 localhost.localdomain
mail from: user1@example.local
250 2.1.0 Ok
rcpt to: user@hogehoge.net
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
helo postfix
.
250 2.0.0 Ok: queued as 0625633CC90
quit
221 2.0.0 Bye

tailで監視している/var/log/maillogの内容で

Jan 29 18:43:24 localhost postfix/smtp[3075]: D420533CC90: to=<user@hogehoge.net>, rely=[ISPメールサーバアドレス:25], delay=1.4, delays=1/0.03/0.18/0.2, dsn=2.0.0, status=sen (250 OK)

という内容が出れば成功です。
もし「reject」というログが出力されれば、転送が禁止されています。

Telnet、あるいはメールクライアントのセグメントがmynetworksに含まれているかを確認します。






prev.gif