自分のサーバーの他、他サイトのサーバー管理も行っておりますが、他サイトサーバーでメール送受信に問題が発生したことから、FreeBSD10.3 の sendmail.cf の Smart relay host 設定に問題があったことに気づきました。
通常のメールサーバーはDNSのMXレコードを参照して、送信すべきメールサーバーを見つけて、自分でそのメールサーバーに送信します。
例えば、会社のアドレスから aaa@icloud.com あてにメールを送りたい場合、まずは会社のメールサーバーは、icloud.com というドメイン(メールアドレス @の右側)のMXレコードをDNSに問い合わせます。
すると、mail exchanger として次のように、送り先が見つかりますので、以下の6台のどれかにメールを投げればいいという訳です。普通は、= 右側の数字が小さいサーバーから接続トライですが、今回は全部「10」なので、どれを使ってもOK。普通は、mx1.mail.icloud.com へ送ります。
icloud.com mail exchanger = 10 mx1.mail.icloud.com. icloud.com mail exchanger = 10 mx4.mail.icloud.com. icloud.com mail exchanger = 10 mx5.mail.icloud.com. icloud.com mail exchanger = 10 mx2.mail.icloud.com. icloud.com mail exchanger = 10 mx3.mail.icloud.com. icloud.com mail exchanger = 10 mx6.mail.icloud.com.
とまあ、メールを一通送るだけで、メールサーバーはいろんな作業を行います。
Smart relay host を設定しておくと、利用者が何処かにメールを送ろうとした場合、メールサーバーは、何も確認せず、その Smart relay host へ配送を依頼します。
Smart relay host を使用するメリットは、
- Smart relay host にアンチウィルスやスパムメールブロックユーティリティをインストールすることで、メールフィルタリングを1箇所だけで行える。他のメールサーバーに入れなくて済むので、末端サーバーの運用コストを節約できる。
- ユーザー用のメールサーバーはMXレコードを検索する必要が無くなるので、負荷を低減できる。
逆にデメリットもあり、
- Smart relay host には高い性能が求められるため投資が必要。
- Smart relay host がダウンしたり高負荷状態になったりすると、全てのメール送受信が出来なくなったり遅延したりする。
となります。しかし、Smart relay host が長時間ダウンすることは(設計ミスをしていなければ)あまり考えられないでしょうから、メールをやり取りする数が膨大なメールサーバーでは Smart relay host を指定するメリットはあります。
FreeBSD sendmail の場合は、sendmail.cf を編集することでSmart relay host 指定を行うのですが、デフォルトは次のようになっています。デフォルトは未指定。
# "Smart" relay host (may be null) DS
DSの右側に、Relay host のアドレスを書いて sendmail を再起動すればOK。
例えば、メールサーバーとWebサーバーが同じの場合は、
DSwww.lifewithunix.jp
のように書きます。
そこで、ネットワーク管理から指定されたIPアドレスを書いて半年くらい運用していたのですが、突然、一部メールが消滅するという現象が発生し調査を始めたところ、Smart relay hostの設定DSが効いていないんじゃない?と気づきました。(トラブル内容とSmart relay host の指定は関係ありませんでした。)
ネットワーク管理からの指定は、IPアドレスだったため、次のように指定していました。
DS10.11.12.13
ところが、指定したIPアドレスへ、全然送られていない!
外向きパケットをチェックしてみたり、sendmail.cf の他の記述をチェックするなどいろいろ試した結果、どうもDSをIPアドレスで指定した場合リレイされず、DSをホスト名で指定すればリレイが有効になることが判明しました。
OSに依存するのか、OSのバージョンに依存するのか、sendmail のバージョンに依存するかどうかの確認まではしていませんが、ネットワーク管理者がIPアドレスで指定していることから(恐らく想定しているOSの)Linux ではIPアドレスで設定できるのかも知れません。
約半年、無事にメール送信が出来ていたのは、FallbackSmartHost をホスト名で指定していたためのようで、今頃になって「DS、効いてないじゃん!」となりました。
# fallback smart host O FallbackSmartHost=fall.back.host.net
現在は、DSをホスト名で指定することによりSmart relay hostが有効になっています。
FreeBSD10.3 の場合、Smart relay host DS はホスト名で指定しなければならないと判明したという話でした。
DSをIPアドレスで指定するときは[]のブラケットで囲ってください。
思いもよりませんでした。