FreeBSD10.3: sendmail の Smart relay host、DS が効かない

自分のサーバーの他、他サイトのサーバー管理も行っておりますが、他サイトサーバーでメール送受信に問題が発生したことから、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 を使用するメリットは、

  1. Smart relay host にアンチウィルスやスパムメールブロックユーティリティをインストールすることで、メールフィルタリングを1箇所だけで行える。他のメールサーバーに入れなくて済むので、末端サーバーの運用コストを節約できる。
  2. ユーザー用のメールサーバーはMXレコードを検索する必要が無くなるので、負荷を低減できる。

逆にデメリットもあり、

  1. Smart relay host には高い性能が求められるため投資が必要。
  2. 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 はホスト名で指定しなければならないと判明したという話でした。

Comments

  1. DSをIPアドレスで指定するときは[]のブラケットで囲ってください。

コメントを残す