設定安全 IMAP 電子郵件伺服器最簡單的方法是什麼?

設定安全 IMAP 電子郵件伺服器最簡單的方法是什麼?

我想擺脫谷歌作為電子郵件提供者,並在我的專用伺服器上設定完整的電子郵件解決方案。問題:我希望設定盡可能簡單,這樣如果出現問題,重新設定所有內容就不會很痛苦。

先決條件

  • 計算機上只有一個使用者帳戶。
    • (姓名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.meglaux.diti.me。我不確定您是否需要包含網域本身(即diti.me)。


以下假設網域已將 MX 記錄配置為指向此伺服器。我通常會盡量保持我的配置相當清晰,因為幾個月後我總是想知道「這到底是做什麼用的」。

1.首先,安裝postfixdovecot-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

每次編輯此文件時,請使用postaliasnewaliases更新雜湊資料庫。/etc/aliases.db

diti現在,就 Postfix 和 Dovecot 而言,您仍然有一個帳戶,但發送到的郵件kra@...也會轉寄到那裡。某些郵件用戶端(例如 Thunderbird)支援單一郵件伺服器的多個“身分”或“角色”,因此您可以在不同的“寄件者:”位址之間進行選擇。

就是這樣。稍後我可能會返回有關 procmail、虛擬域、SPF 和/或 DKIM 的說明。

相關內容