特定のサーバーを経由して中継するように sendmail を設定する方法

特定のサーバーを経由して中継するように sendmail を設定する方法

私はケーブル モデム (bresnan communications) の背後に小さなホーム サーバーをセットアップしています。このボックスから通知などの電子メールを送信 (受信ではなく) できるようにしたいと考えています。

私がすでにやったこと:

  • sendmail をインストールして設定しました。
  • mail.bresnan.net私の指示として追加しましたSMART_HOST

私が問題だと思っているのは

メールを送信しようとすると、メール ログに次の内容が表示されます。

Dec 22 10:24:17 batcave sendmail[1530]: oBMHOHrs001530: from=aburns, 
  size=140, class=0, nrcpts=1, 
  msgid=<[email protected]>, 
  relay=aburns@localhost
Dec 22 10:24:17 batcave sm-mta[1531]: oBMHOHWZ001531: from=<[email protected]>, 
  size=397, class=0, nrcpts=1,
  msgid=<[email protected]>,
  proto=ESMTP, daemon=MTA-v4, relay=localhost [127.0.0.1]
Dec 22 10:24:17 batcave sendmail[1530]: oBMHOHrs001530:
  to=<[email protected]>, ctladdr=aburns (1000/1000),
  delay=00:00:00, xdelay=00:00:00, mailer=relay,
  pri=30140, relay=[127.0.0.1] [127.0.0.1],
  dsn=2.0.0, stat=Sent (oBMHOHWZ001531 Message accepted for delivery)
Dec 22 10:24:18 batcave sm-mta[1517]: oBMH9mVv001357:
  to=<[email protected]>, ctladdr=<[email protected]>
  (1000/1000), delay=00:14:30, xdelay=00:00:42, mailer=relay,
  pri=300339, relay=pmx0.bresnan.net. [69.145.248.1],
  dsn=4.0.0, stat=Deferred: Connection timed out with pmx0.bresnan.net.

メッセージが私の sendmail サーバーによって配信のために受け入れられた場所、その後 bresnan のサーバーに渡そうとした場所、そしてタイムアウトになった場所を確認できます。

質問はここにあります。賢明な読者は、pmx0.bresnan.net私がSMART_HOST設定したディレクティブがこれではないことにお気づきでしょう。これは、MXbresnan.com/net ドメインの (外部?) サーバーです。どうやら、bresnan はネットワークを構成しているため、このサーバーに自社のネットワーク内からアクセスすることはできず、代わりにmail.bresnan.net(接続可能な) サーバーを使用する必要があります。問題は、sendmail にこれを使用するように指示する方法がわからないことです。サーバそして、ドメイン

私が試したこと

  • pmx0 サーバーがメール IP アドレスを指すようにホスト エントリを設定します。これは機能しませんが、これは当然です。sendmail は明らかに MX クエリを実行して IP を返すサーバーを見つけているため、通常の DNS 解決を行う必要がなくなり、ホスト ファイルが関与することはありません。

修正方法(すべての送信メールに対して):

もう一度言いますが、これを学ぶのに協力してくれた webmin (下の注記を参照) に感謝します。角括弧でスマートホストを入力すると、sendmail は MX 検索を行わなくなります。つまり、define('SMART_HOST','[69.145.248.18]')(引用符 -> バッククォートを修正) は、実際にはメーラー テーブルなしで機能します。

修正方法(特定のドメインの場合):

以下に指摘されているように、の設定mailertableが必要です。ただし、マニュアルページこの機能もファイル内で有効にする必要がありますsendmail.mc

また、メーラー ルートは、すべての操作で sendmail に指定されたサーバーの使用を強制するものではなく、受信者のアドレスに基づいていることに注意してください。私の場合、送信する必要があるのは少数のドメイン (gmail、google がホストしているドメイン、および私の仕事) だけなので、これは実際には問題ありません。

まとめ:

  • FEATURE('mailertable')ファイルに追加しますsendmail.mc。(最初の引用符はバックティックにする必要があることに注意してください。)
  • ファイルを作成する/etc/mail/mailertableマニュアルページ
  • マップファイルを作成します:sudo makemap hash /etc/mail/mailertable.db < /etc/mail/mailertable
  • 設定を再構築するmake -C /etc/mail
  • sendmailを再起動します:service sendmail restart

注記:非常にこれらのファイルを編集/再構築するには、WebMin を使用することをお勧めします。これがなければ、mailertable ファイルが無視されている理由を解明しようとして気が狂っていたでしょう。

答え1

sendmail ファイルに短いエントリを追加することで、MX 検索を回避できます/etc/mail/mailertable

ファイルの内容はおそらく次のような 1 行になります。

bresnan.net       esmtp:[69.145.248.18]

ファイルを保存し、sendmail を再起動します (手動で行う必要がある場合は、sendmail.cf を再構築します)。

関連情報