
我想擺脫谷歌作為電子郵件提供者,並在我的專用伺服器上設定完整的電子郵件解決方案。問題:我希望設定盡可能簡單,這樣如果出現問題,重新設定所有內容就不會很痛苦。
先決條件
- 計算機上只有一個使用者帳戶。
- (姓名
diti
;主要電子郵件[email protected]
;其他別名被重新導向,但電子郵件用戶端可以管理不同的別名並做出相應的反應)
- (姓名
- 最好不要使用MySQL。
- (在資料備份和復原的情況下以及為了簡單起見,最好在獲得功能正常的電子郵件伺服器之前不安裝和保護 MySQL)
- 可以從外部存取電子郵件(IMAP 和 SMTP)。
- 用於 IMAP 和 SMTP 驗證的 SSL/TLS 加密(我正在使用CA憑證證書,重要嗎?
我相信簡單性、IMAP/SMTP 存取權和安全性身份驗證是每個渴望離開 Google/無論其他什麼人都想要的「基本」功能。如果我錯了並且有一個更簡單的解決方案(例如,類似 ownCloud 的解決方案,包含所有內容),我會很高興聽到。
我認為 Postfix 和 Dovecot 的組合將是最佳選擇。順便說一句,我正在運行 Debian。
目前我找到的信息
- A法語文章描述於非常詳細介紹如何設定完整、安全的電子郵件解決方案。時間長、維護困難、備份恢復困難等。
- Gentoo wiki(
Complete_Virtual_Mail_Server/SSL_Certificates
頁)提到了 CAcert 憑證的使用,但既不清楚(所有這些SubjectAltName
子網域都是必要的嗎?),也沒有使用 Postfix(我讀到 Courier 更難)。 - 關於自架的各種教程,各不相同,很少描述他們在做什麼以及為什麼(具有遠端存取功能的自架電子郵件似乎設定起來很複雜,所以為什麼只提供命令清單而不解釋「傻瓜」?)。
我希望我問的是正確的事情,而且他們也不太傻。
答案1
不,不需要在伺服器上設定 DNS 快取。伺服器應該使用附近某處的快取 DNS 解析器,但大多數託管公司已經為整個資料中心運行自己的解析器,並將伺服器配置為預設使用它們。
預設情況下,Postfix 和 Dovecot 都使用本機帳戶進行所有操作。如果您有一個名為 的 Linux 帳戶
diti
,您可以使用它登入 Dovecot,並且可以將 Postfix 設定為針對 Dovecot 驗證 SMTP 登入。如果您願意將所有郵件傳送到相同帳戶,則可以設定普通別名(如
/etc/aliases
)以將郵件重新導向至該帳戶kra@
或重新導向postmaster@
至該diti
帳戶。所有這些 subjectAltNames 都不是必需的。您唯一需要的是您實際上要使用的域名使用,例如
mail.diti.me
或glaux.diti.me
。我不確定您是否需要包含網域本身(即diti.me
)。
以下假設網域已將 MX 記錄配置為指向此伺服器。我通常會盡量保持我的配置相當清晰,因為幾個月後我總是想知道「這到底是做什麼用的」。
1.首先,安裝postfix
和dovecot-imapd
軟體包。當提示有關 Postfix 設定時,選擇「Internet 網站」選項並輸入diti.me
郵件名稱。此時,您已經可以使用 傳送和接收郵件[email protected]
,甚至可能連線到 IMAP。
然而,它還沒有 SSL,也不允許從外部透過 SMTP 發送郵件,也沒有一個儲存郵件的合理位置(預設是 中的 mbox 文件/var/mail
,它不可靠且效能較差,尤其是使用 IMAP 時)。
2.如果您已有 SSL 證書,請將其放入/etc/ssl/private/diti.me.pem
,並將私鑰放入/etc/ssl/private/diti.me.key
。確切的位置實際上並不重要,重要的/etc/ssl/private
是 Debian 保存它們的位置。
確保這兩個檔案都屬於該群組並且可由該ssl-cert
群組讀取,以便 Postfix 和 Dovecot 可以存取它們。也可以使用 將兩個守護程序的帳戶新增至該群組gpasswd -a
。
3.Debian 自動產生的 Postfixmain.cf
也有點混亂,所以我將發布一個經過清理的最小版本:
# 伺服器資訊 我的網域 = diti.me 我的起源 = $我的域名 # 其他各種參數都使用這兩個變數作為預設值。 # SMTP 服務 smtpd_tls_security_level = 可以 smtpd_tls_cert_file = /etc/ssl/private/diti.me-mail.pem smtpd_tls_key_file = /etc/ssl/private/diti.me-mail.key # 這允許在所有傳入 SMTP 連線上使用 STARTTLS。 # 請注意,必須將 `postfix` 新增至 `ssl-cert` 群組才能使用 # 存取 /etc/ssl/private 中的檔案。 # 政策 mynetworks = [::1]/128, 127.0.0.0/8, [::ffff:127.0.0.0]/104 # 這列出了被視為「可信任」並且可以使用的 IP 位址 # 此伺服器向外部發送郵件(即向其他網域)。經過 # 預設情況下,只允許「localhost」。其他人僅郵寄至 $mydestination 中的 # 個網域將被接受。 mydestination = $mydomain, 本機 # 接受來自任何 IP 位址的郵件的網域清單。 # 送貨 alias_maps = 哈希:/etc/aliases # 這會保留系統範圍的別名。最好明確地設定它,因為 # 預設值有時會包括NIS,這是沒有意義的。 收件者分隔符號 = + # 告訴 postfix 在第一個「+」處分割位址的本地部分, # 所謂的「plus-addressing」:寄到diti+foo@的郵件將會被遞送 # 寄至diti@信箱。
對於 Dovecot,Debian 僅使用預設的範例配置,它們已經足夠好了,每個選項都有描述。
每當您變更配置時,請使用postfix reload
和/或重新載入守護程序doveadm reload
。
4.預設情況下,Postfix 將郵件投遞/var/mail/$USER
至信箱格式,這很簡單(您可以使用文字編輯器輕鬆查看它),但有很多問題,尤其是IMAP,因為每當您移動郵件甚至將郵件標記為“已讀”或“未讀”時,都必須重寫整個文件」。
將兩個守護程序更改為使用 Maildir。 (還有其他格式,但它們往往特定於 MTA 或 MDA 或 IMAP 伺服器或其他伺服器;Maildir 受到廣泛支援。)
在 中/etc/postfix/main.cf
,將以下內容新增至「交付」部分:
home_mailbox = 郵件/
配置 Dovecot 使用相同的路徑,在/etc/dovecot/conf.d/10-mail.conf
:
mail_location = maildir:~/郵件
5.在某些時候,您還需要告訴 Dovecot 使用 SSL。相關設定在/etc/dovecot/conf.d/10-ssl.conf
.事實上,Dovecot 的 Debian 軟體包已經使用 SSL,儘管具有基本無用的自簽名憑證。將其配置為使用您自己的憑證:
ssl = 是 ssl_cert = </etc/ssl/private/diti.me-mail.pem ssl_key = </etc/ssl/private/diti.me-mail.key
6.現在您可以向外部發送郵件並接收郵件。仍然需要配置 Postfix 以允許您發送從透過 SMTP 與您的郵件用戶端連線。
首先告訴 Postfix 使用 Dovecot 來驗證登入。以下說明大部分摘自Dovecot 的 wiki。
Dovecot/etc/dovecot/conf.d/10-master.conf
需要監聽 Postfix 可以存取的套接字;預設配置已經有一個註解掉的範例:
服務授權{ … unix_listener /var/spool/postfix/private/auth { 模式 = 0660 用戶=後綴 組=後綴 } … }
Postfix 需要/etc/postfix/main.cf
再使用它:
# 驗證 smtpd_sasl_type = 鴿舍 smtpd_sasl_path = 私有/身份驗證 # 另一種可能的類型是“cyrus”,對於 Cyrus SASL 'saslauthd' # 守護程式。我在這裡選擇 Dovecot,因為它作為 SASL 伺服器運行良好,並且 # 讓它處理兩個守護程序的身份驗證會更簡單。
7.請注意,上面的內容沒有smtpd_sasl_auth_enable
在任何地方設定。目前的約定是不是全域啟用 SMTP 驗證,但將 tcp/25 純粹保留為「伺服器到伺服器」SMTP 連接埠。同時,來自使用者的新訊息透過 tcp/587(「郵件提交」連接埠)上的 SMTP 接受,這需要身份驗證。一些 ISP 甚至因為垃圾郵件而阻止 tcp/25,但保持 tcp/587 開放,因為它通常更安全。
使用 SASL 驗證啟用 中的「提交」連接埠/etc/postfix/master.cf
。預設master.cf
已經有必要的行,只需取消註解即可,儘管一些其中仍應排除在外。
提交inet n - - - - smtpd -o syslog_name=後綴/提交 -o smtpd_tls_security_level=加密 # 「提交」連接埠將需要 TLS,而不是使其可選 -o smtpd_sasl_auth_enable=是 # ...以及允許使用者登入。 # -o smtpd_reject_unlisted_recipient=否 # -o smtpd_client_restrictions=$mua_client_restrictions # -o smtpd_helo_restrictions=$mua_helo_restrictions # -o smtpd_sender_restrictions=$mua_sender_restrictions # 這四個選項可以註解掉;如果啟用,他們會 # 希望你在'main.cf'中設定自訂限制規則,但是 # 預設的就可以了。 -o smtpd_recipient_restrictions=permit_sasl_authenticated,拒絕 # 預設的recipient_restrictions檢查IP位址和 # $我的目的地。對於“提交”端口,允許一切只要 # 當使用者登入時,但拒絕所有匿名郵件。 -o milter_macro_daemon_name=起源 # 如果您稍後決定設定 DKIM 代理程式等,這將允許 # 它用於區分使用者提交的郵件和收到的傳入郵件。 # 它是預設配置的一部分,因此也包含在這裡。
如果您的郵件用戶端需要舊式「隱式 SSL」連接埠 (tcp/465),則可以取消smtps
註解中的行- 如果這樣做,請保持與連接埠master.cf
類似的設定。submission
8.最後透過編輯 為您的帳戶設定別名/etc/aliases
。別名postmaster
基本上是必需的;如果您的郵件伺服器出現問題,可以透過它進行聯繫。指向root
和其他類似的別名也很好。
基本格式記錄在 aliases(5) 中:
postmaster: root
admin: root
root: diti
kra: diti
每次編輯此文件時,請使用postalias
或newaliases
更新雜湊資料庫。/etc/aliases.db
diti
現在,就 Postfix 和 Dovecot 而言,您仍然有一個帳戶,但發送到的郵件kra@...
也會轉寄到那裡。某些郵件用戶端(例如 Thunderbird)支援單一郵件伺服器的多個“身分”或“角色”,因此您可以在不同的“寄件者:”位址之間進行選擇。
就是這樣。稍後我可能會返回有關 procmail、虛擬域、SPF 和/或 DKIM 的說明。