设置安全 IMAP 电子邮件服务器的最简单方法是什么?

设置安全 IMAP 电子邮件服务器的最简单方法是什么?

我想摆脱 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.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/privateDebian 会将它们保存在那里。

确保两个文件都归该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),您可以取消注释其中的smtpsmaster.cf- 如果这样做,请保持设置与submission端口设置类似。

8.最后,通过编辑 为您的帐户设置别名/etc/aliasespostmaster别名基本上是必需的;如果您的邮件服务器出现问题,它是联系点。指向root和其他类似的别名也很好。

基本格式在别名(5)中记录:

postmaster: root
admin:      root
root:       diti
kra:        diti

每次编辑此文件时,使用postaliasnewaliases更新散列数据库。/etc/aliases.db

diti现在,就 Postfix 和 Dovecot 而言,您仍然有一个帐户,但发送到的邮件kra@...也会转发到那里。一些邮件客户端(例如 Thunderbird)支持单个邮件服务器的多个“身份”或“角色”,因此您可以在不同的“发件人:”地址之间进行选择。

就是这样。我稍后可能会回来提供有关 procmail、虚拟域、SPF 和/或 DKIM 的说明。

相关内容