2011/01/30 CentOS5.5





直接インターネットへ配信するメールサーバ

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

最近の大手ISPではほとんど規制されているタイプです。
最上位のメールサーバや、大容量のビジネス回線を保持している企業ではこのタイプです。
地域の二種事業者など、ビジネス回線を提供していないISPでも許可されているところがあるかもしれません。
検証で使う場合は十分な注意が必要です。

条件
 メールサーバ自身がMXレコードを解決して、グローバルメールサーバへ配送します。
 最近のISPでは規制されているタイプで、最上位のメールサーバが行う仕事です。
 十分な設定と調整を加えないままインターネットに晒すのは危険です。
 


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を次のように編集します。
設定するのはとりあえず2つだけで動作します。

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

mynetworks
これはメールを外部へ中継することを許す送信元を指定します。なにも指定されていなければ、サーバと同一セグメント内からは全許可です。誰のメールでも中継するようになります。気を付けましょう。
通常、これは信用できる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を使うほうが勘違いが少ないでしょう。

ただし、これだけでは安定的に動作しません。現代でも、メールの世界は意外とルールが定まっていないのです。
逆引きDNSで解決できないホストからは受け取らないサーバ、ホスト名とメールの送信元ドメインが一致しないと受け取らないサーバもあります。
逆引き辺りに至っては、もはや回線環境にも依存してくる話ですが、以下のパラメータも設定することをお勧めします。

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

myhostname = mail.example.local

mydomain
メールをマシンから送信した場合、@以降に現れるドメインです。
通常は、myhostnameのドメイン部分だけを指定します。
さまざまな箇所で用いられます。

mydomain = example.local

ここまで設定したら、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=[宛先のメールサーバ: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