我希望用內部安裝來取代我們目前使用的外部 smtp 提供者。它應該處理以下情況:
某些地址應轉寄至 Gmail 地址;我們希望繼續使用 gmail 作為我們的主要電子郵件介面。
其他地址應可用作 pop/imap 郵箱。
其他地址將以程式方式處理:它們將啟動各種任務、進行記錄等。這些地址應該啟動處理電子郵件地址的進程,或者應該以易於處理的格式儲存。
它還應該可以相當容易地配置網域金鑰、spf 以及允許電子郵件送達所需的任何其他內容。
我很久以前就用過sendmail。看來 postfix 和 exim 是目前推薦的選項。我的主要問題是:將地址轉發到 gmail 以及編程訪問的最佳選擇和設定是什麼? procmail 仍然是可行的方法還是現在有更好的選擇?
我們使用的是 linux/ubuntu 伺服器。
答案1
Postfix 很穩定,支援良好且易於配置。你所描述的所有內容都是相當常規的。
- 轉送:使用 virtual_alias 映射
- POP/IMAP 信箱:本地投遞,使用 Dovecot 之類的工具作為 POP/IMAP 伺服器
- 編程的東西:如果你的意思是你將郵件提供給腳本,那是從/etc/aliases 完成的。為了“易於處理”,你有 mbox 和 Maildir 格式,它們都是標準的東西。
- 網域金鑰/SPF:SPF 在 DNS 中完成。 Domain-keys 很容易設定為 milter 或 SMTP 代理程式。
答案2
對於程式化的東西,你必須知道程式/腳本將以什麼 UID 運行。
例如,對於 postfix,從 /etc/aliases(或任何其他 root 擁有的別名檔案)執行的腳本將以「nobody」使用者身分執行。
postfix 能夠擁有多個別名文件,並且(這是好的部分)從別名文件運行的程序將以擁有該文件的用戶身份運行(root 除外- 如前所述,root 擁有的別名文件將以無人身份運行)。
如果您需要以 root 身份從郵件運行腳本,那麼最簡單的方法(如果您安裝了 sudo)是配置 sudo 以允許“沒有人”以 root 身份運行它而無需密碼,並從運行的包裝器腳本運行它與sudo 一起使用。
注意:每當從郵件觸發腳本時,您必須記住資料(即郵件)來自不受信任的來源(互聯網)....因此使用正文或標頭中的資料作為極其不安全的腳本執行的命令的參數。這與在 CGI 腳本中信任用戶提供的數據基本上是同一個問題 - 只是不要這樣做。例如,如果使用者提供的資料類似於“... innocouslydatahere ...; rm -rf /”,那麼考慮一下寫得不好的腳本會做什麼。您可能認為檢查分號等明顯的東西並將其刪除是很容易的,但是您還需要檢查很多不明顯的東西,並且您只是為自己做好了準備失敗,因為您不太可能想到或抓住它們。透過不信任用戶提供的數據來完全消除安全風險要安全得多。
無論腳本以什麼 UID 運行,這一點都很重要,但當/如果它以 root 身份運行時,這一點尤其重要。
最後,為了回答您的一個直接問題,procmail 仍然是一個有用的工具,可以滿足您的需求。 maildrop 和其他類似程式也是如此。將 procmail 等視為解析正文和標頭的專用工具,以決定要做什麼,因此您不必在腳本中包含所有解析程式碼。編寫腳本來完成其工作,並使用 procmail 決定何時執行腳本。例如,您可以建立一個名為「mailjobs」的新用戶,該用戶有自己的主目錄和 .procmailrc 檔案。然後建立將郵件轉送給該使用者的別名。然後,mailjobs 的 .procmailrc 將檢查 X-Original-To 標頭來決定要執行哪個腳本。
答案3
exim 和 postfix 都能夠滿足您的需要,最好的建議是選擇您最容易使用和/或最熟悉的一個。
至於處理轉發到 gmail 和腳本的最佳方法是使用全域別名文件(通常保存在 /etc/aliases 或 /etc/mail/aliases 中)。