![设置安全 IMAP 电子邮件服务器的最简单方法是什么?](https://linux22.com/image/1366251/%E8%AE%BE%E7%BD%AE%E5%AE%89%E5%85%A8%20IMAP%20%E7%94%B5%E5%AD%90%E9%82%AE%E4%BB%B6%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%9A%84%E6%9C%80%E7%AE%80%E5%8D%95%E6%96%B9%E6%B3%95%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F.png)
我想摆脱 Google 作为电子邮件提供商,并在我的专用服务器上设置完整的电子邮件解决方案。问题:我希望设置尽可能简单,这样如果出现问题,重新设置所有内容就不会很麻烦。
先决条件
- 机器上只有一个用户帐户。
- (名称
diti
;主要电子邮件[email protected]
;其他别名被重定向,但电子邮件客户端可以管理不同的别名并做出相应的反应)
- (名称
- 最好不要使用 MySQL。
- (为了数据备份和恢复,以及简单起见,在获得可运行的电子邮件服务器之前,最好不要安装和保护 MySQL)
- 可以从外部访问电子邮件(IMAP 和 SMTP)。
- IMAP 和 SMTP 身份验证的 SSL/TLS 加密(我正在使用证书颁发机构证书,这重要吗?
我认为简单、IMAP/SMTP 访问和安全身份验证是每个渴望离开 Google 或其他任何平台的人都想要的“基本”功能。如果我错了,并且有一个更简单的解决方案(例如,一个包含所有内容的类似 ownCloud 的解决方案),我会很高兴听到。
我认为 Postfix 和 Dovecot 的组合是可行的。顺便说一句,我正在运行 Debian。
我目前找到的信息
- A法文文章描述于非常详细说明如何设置完整、安全的电子邮件解决方案。它很长,维护起来很困难,备份和恢复起来也很困难,等等。此外,DNS 缓存是否必要?
- 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
帐户。所有这些 subjectAltName 都不是必需的。你唯一需要的是域名,你实际上要使用,例如
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 myorigin = $mydomain # 其他各种参数都使用这两个变量作为默认值。 # 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 中的文件。 # 政策 我的网络 = [::1]/128, 127.0.0.0/8, [::ffff:127.0.0.0]/104 # 这列出了被视为“可信”的 IP 地址,可以使用 # 此服务器向外部(即其他域)发送邮件。通过 # 默认,只允许“localhost”。其他所有人只能发送邮件至 $mydestination 中的 # 个域名将被接受。 mydestination = $mydomain,本地主机 # 接受来自任何 IP 地址的邮件的域列表。 # 送货 alias_maps = hash:/etc/aliases # 这将保留系统范围的别名。最好明确设置它,因为 # 默认值有时包括 NIS,这没有意义。 收件人分隔符 = + # 告诉 postfix 在第一个 '+' 处拆分地址的本地部分, # 所谓的“加地址”:发送到 diti+foo@ 的邮件将被投递 # 发送至 diti@ 邮箱。
对于 Dovecot,Debian 仅使用默认示例配置,它们已经足够好了,并且描述了每个选项。
每当您更改配置时,请使用postfix reload
和/或重新加载守护进程doveadm reload
。
4.默认情况下,Postfix 将邮件发送/var/mail/$USER
到框格式,它很简单(您可以使用文本编辑器轻松查看它)但也存在很多问题,尤其是使用 IMAP 时,因为每当您移动消息甚至将消息标记为“已读”或“未读”时都必须重写整个文件。
将两个守护进程都改为使用 Maildir。(还有其他格式,但它们往往特定于 MTA 或 MDA 或 IMAP 服务器或其他;Maildir 受到广泛支持。)
在 中/etc/postfix/main.cf
,将以下内容添加到“Delivery”部分:
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 的维基。
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=dovecot smtpd_sasl_path = private/auth # 另一种可能的类型是“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=postfix/提交 -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地址和 # $mydestination。对于“提交”端口,只要允许 # 因为用户已经登录,但拒绝所有匿名邮件。 -o milter_macro_daemon_name=起始 # 如果你稍后决定设置 DKIM 代理或类似的东西,这将允许 # 它用于区分用户提交的邮件和收到的邮件。 # 它是默认配置的一部分,因此也包含在这里。
如果您的邮件客户端需要旧式“隐式 SSL”端口(tcp/465),您可以取消注释其中的smtps
行master.cf
- 如果这样做,请保持设置与submission
端口设置类似。
8.最后,通过编辑 为您的帐户设置别名/etc/aliases
。postmaster
别名基本上是必需的;如果您的邮件服务器出现问题,它是联系点。指向root
和其他类似的别名也很好。
基本格式在别名(5)中记录:
postmaster: root
admin: root
root: diti
kra: diti
每次编辑此文件时,使用postalias
或newaliases
更新散列数据库。/etc/aliases.db
diti
现在,就 Postfix 和 Dovecot 而言,您仍然有一个帐户,但发送到的邮件kra@...
也会转发到那里。一些邮件客户端(例如 Thunderbird)支持单个邮件服务器的多个“身份”或“角色”,因此您可以在不同的“发件人:”地址之间进行选择。
就是这样。我稍后可能会回来提供有关 procmail、虚拟域、SPF 和/或 DKIM 的说明。