Smtp

FreeBSD 中的 Sendmail 使用外部 SMTP 發送而無需身份驗證

  • February 15, 2019

如果這聽起來令人困惑,我很抱歉。

我的兄弟讓我為他製作一個網路伺服器,因為他想自己託管自己的網站,不再使用託管服務。問題在於 ISP。除了動態 IP 方案外,它們還阻止埠 25 上的傳出 TCP 連接,而是提供不需要身份驗證的外部伺服器。

對於 Web 伺服器設置,我選擇了 FreeBSD,因為我更喜歡監獄而不是虛擬機或直接在主機上執行服務。它使備份和安全管理變得更加容易(至少對我而言)。

目前我已完全禁用 sendmail,但我希望再次啟用它,以便使用者在必要時使用恢復密碼功能。我的問題是,如何將 sendmail 配置為使用外部 SMTP 而無需使用者或密碼驗證?

預先感謝您的幫助!

您的文章的兩條評論都在正確的軌道上。這是一個更成熟的回應。

(TL;底部的 DR)

以 root 身份,首先製作/etc/mail目錄的安全副本:

# cd /etc
# cp -Rp mail mail.safety

出於本範例的目的,我將假設您沒有對您的電子郵件配置進行自定義,事實上,我們將從“清零”您現有的 sendmail 文件開始,以確保我們從一個乾淨的開始. 如果您確實有自定義,不用擔心,我們首先備份這些文件。您可以稍後重新應用您的自定義設置。

首先進入mail目錄並刪除現有*.cf文件:

# cd mail
# rm *.cf

在 FreeBSD 系統上,除了隨作業系統分發的庫存和文件之外,還有一個$(hostname).mc文件和一個 文件是很常見的。這是具有簡單主機名的系統上的輸出:$(hostname).submit.mc``freebsd.mc``freebsd.submit.mc``ls``test

# ls *.mc
freebsd.mc         freebsd.submit.mc     test.mc         test.submit.mc

您可能會看到類似的文件,但引用的是您自己機器的主機名。這背後的原因是這些freebsd*.mc文件代表了 sendmail 配置的基本起點。這些$(hostname)*.mc文件(可能)是特定於您的系統的自定義文件。雖然作業系統升級可能會覆蓋freebsd*.mc文件,但它不會觸及您的主機特定文件,因此您精心定制的配置不會被作業系統升級覆蓋。該交易的一部分是您應該將您的更改限制在$(hostname)*.mc文件中並且freebsd*.mc保持參考文件不變。

在本教程的其餘部分中,我將使用該字元串test來表示您應該將機器的主機名作為文件名一部分的位置。

所以有了這個背景,讓我們繼續。

刪除您的$(hostname)*.mc文件,以便Makefile從已知良好的文件中複製您的配置freebsd*.mc

# rm -v $(hostname)*.mc
test.mc
test.submit.mc

現在我們已經刪除了舊的配置文件,讓我們執行make基於作業系統提供的freebsd.mc和文件創建新的配置文件:freebsd.submit.mc

# make
cp -f freebsd.mc test.mc
/usr/bin/m4 -D_CF_DIR_=/usr/share/sendmail/cf/   /usr/share/sendmail/cf/m4/cf.m4 test.mc > test.cf
cp -f freebsd.submit.mc test.submit.mc
/usr/bin/m4 -D_CF_DIR_=/usr/share/sendmail/cf/   /usr/share/sendmail/cf/m4/cf.m4 test.submit.mc > test.submit.cf

這實際上比我們需要的多一點,但沒關係。重要的是Makefile複製freebsd.mc$(hostname).mcfreebsd.submit.mc$(hostname).submit.mc

現在,讓我們檢查$(hostname).mc文件。在第 89 行或附近(我正在為 FreeBSD 12 查看的文件)是SMART_HOST前面作者提到的指令:

# grep SMART_HOST $(hostname).mc
dnl define(`SMART_HOST', `your.isp.mail.server')

行首的“dnl”表示該行已被註釋掉。DNL 可以被認為代表“丟棄(或忽略)直到換行”。

編輯您的.mc文件:

# vi $(hostname).mc

並將該行更改為:

define(`SMART_HOST', `smtp.example.com')

smtp.example.com您的 ISP 告訴您使用的伺服器的 DNS 名稱在哪裡。一定要刪除“dnl”。保存文件並退出。

現在執行make以重新生成您的 $(hostname)*.cf 文件:

# make
/usr/bin/m4 -D_CF_DIR_=/usr/share/sendmail/cf/   /usr/share/sendmail/cf/m4/cf.m4 test.mc > test.cf
/usr/bin/m4 -D_CF_DIR_=/usr/share/sendmail/cf/   /usr/share/sendmail/cf/m4/cf.m4 test.submit.mc > test.submit.cf

執行make install以將您的$(hostname)*.cf文件複製到 sendmail 期望的標準名稱(sendmail.cfsubmit.cf):

# make install
install -m 444 test.cf /etc/mail/sendmail.cf
install -m 444 test.submit.cf /etc/mail/submit.cf

重新啟動發送郵件:

# make restart

最後,檢查/var/log/maillog以確保沒有錯誤。


TL;博士

# cd /etc
# cp -Rp mail mail.safety
# cd mail
# rm *.cf
# rm -v $(hostname)*.mc
# make
# vi $(hostname).mc

將行更改為SMART_HOST

define(`SMART_HOST', `smtp.example.com')

並繼續:

# make
# make install
# make restart

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