Sendmail

配置 sendmail 以偵聽備用埠

  • March 15, 2022

我已設置sendmail為偵聽埠 1234 而不是 25,只需更改為sendmail.mc

DAEMON_OPTIONS(`Port=1234, Name=MTA')

這通常有效,但有一個例外。背景是我有一個relay監聽25埠(relay必須有MX記錄,所以一定是25埠)。中繼通過 sendmail 發送郵件,因此 sendmail 監聽localhost:1234. 也就是說,sendmail 只負責發送郵件,不負責接收。netstat/etc 確認中繼正在監聽 25,而 sendmail 正在監聽 1234。

這適用於這兩個測試案例:

  1. 我可以通過 telnet 發送電子郵件到 sendmail ( telnet localhost 1234)
  2. s-nail我可以通過適當的配置更改發送電子郵件( set mta=smtp://localhost:1234)

但是,如果我直接執行 sendmail ,則此設置不起作用:

sendmail -d8.20 -vt < test-email.txt

在這種情況下,sendmail 嘗試通過連接到本地埠 25 來發送郵件,因此它實際上與本地中繼通信,而不是遠端 SMTP 伺服器。調試輸出顯示:

me@example.com... Connecting to [127.0.0.1] via relay...
220 mydomain.org ESMTP mydomain relay

這讓我很困惑——知道這裡發生了什麼嗎?

編輯

取得一些進展。我在 Sendmail 8.15.2,Ubuntu 20.04 上。這個問題並不重要,除了 sendmail 用每 20 分鐘執行一次的 cron 作業刷新它的 MSP 隊列,所以我得到很多 syslog 失敗條目,以及無法送達的電子郵件的大隊列,因為 sendmail 找不到自己。

問題似乎如下。當您使用 sendmail 發送郵件(或管理隊列)時,它(通常)是一個兩步過程。您執行 sendmail,它讀取submit.cf(而不是 sendmail.cf),並充當 MSA,將郵件送出給某物。那個東西通常是本地的 sendmail 守護程序,它會sendmail.cf在它啟動時讀取。

sendmail.cf告訴 sendmail 它需要監聽localhost:1234傳入的郵件。這意味著它submit.cf必須包含一個配置,告訴 sendmail 程序將外發郵件路由到localhost:1234.

相關submit.mc配置可能是FEATURE msp,預設為

FEATURE(`msp', `[127.0.0.1]', `25')

所以答案大概就是把 25 改成 1234 這麼簡單。不過,沒那麼容易。只需更改它、重新生成文件並重新啟動 sendmail,就沒有什麼區別。事實上,使用其中一個或兩個重新生成submit.cf完全m4為零make差異,或者為您提供一個cf帶有註釋掉的功能的文件。某處有一些魔法可以讓您更改功能,但我不知道是什麼。答案可能在/usr/share/sendmail/cf/feature/msp.m4,但我看不到。

從命令行執行 sendmail,它使用不同的配置文件。

編輯文件“submit.mc”

添加行:

define(`RELAY_MAILER_ARGS', `TCP $h 1234')dnl

行前:

FEATURE(`msp', `[127.0.0.1]')dnl

然後將“submit.mc”編譯為“submit.cf”。

引用自:https://serverfault.com/questions/1096134