FreeBSD 中的 Sendmail 使用外部 SMTP 發送而無需身份驗證
如果這聽起來令人困惑,我很抱歉。
我的兄弟讓我為他製作一個網路伺服器,因為他想自己託管自己的網站,不再使用託管服務。問題在於 ISP。除了動態 IP 方案外,它們還阻止埠 25 上的傳出 TCP 連接,而是提供不需要身份驗證的外部伺服器。
對於 Web 伺服器設置,我選擇了 FreeBSD,因為我更喜歡監獄而不是虛擬機或直接在主機上執行服務。它使備份和安全管理變得更加容易(至少對我而言)。
目前我已完全禁用 sendmail,但我希望再次啟用它,以便使用者在必要時使用恢復密碼功能。我的問題是,如何將 sendmail 配置為使用外部 SMTP 而無需使用者或密碼驗證?
預先感謝您的幫助!
您的文章的兩條評論都在正確的軌道上。這是一個更成熟的回應。
(TL;底部的 DR)
以 root 身份,首先製作
/etc/mail
目錄的安全副本:# cd /etc # cp -Rp mail mail.safety
出於本範例的目的,我將假設您沒有對您的電子郵件配置進行自定義,事實上,我們將從“清零”您現有的 sendmail 文件開始,以確保我們從一個乾淨的開始. 如果您確實有自定義,不用擔心,我們首先備份這些文件。您可以稍後重新應用您的自定義設置。
首先進入
*.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).mc
和freebsd.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.cf
和submit.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