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

Dit*_*iti 17 email debian imap smtp postfix

我想摆脱作为电子邮件提供商的 Google,并在我的专用服务器上设置完整的电子邮件解决方案。问题:我希望设置尽可能简单,这样如果出现问题,重新设置一切就不会很痛苦。

先决条件

  • 机器上只有一个用户帐户。
    • (姓名diti;主电子邮件kra@diti.me;其他别名被重定向,但电子邮件客户端可以管理不同的别名并做出相应的反应)
  • 最好不要使用 MySQL。
    • (在数据备份和恢复的情况下以及为简单起见,最好不要在获得功能强大的电子邮件服务器之前安装和保护 MySQL)
  • 可以从外部访问电子邮件(IMAP 和 SMTP)。
  • 用于 IMAP 和 SMTP 身份验证的 SSL/TLS 加密(我使用的是CAcert证书,这有关系吗?)。

我相信简单性、IMAP/SMTP 访问和安全身份验证是每个渴望离开 Google/任何其他人的人都想要的“基本”功能。如果我弄错了并且有更简单的解决方案(例如,类似 ownCloud 的解决方案,包含所有内容),我会很高兴听到。

我认为 Postfix 和 Dovecot 的组合将是可行的方法。顺便说一下,我正在运行 Debian。

到目前为止我找到的信息

  • 一个法国人的文章描述了在长详细介绍了如何建立一个完整的,安全的电子邮件解决方案。时间长,维护难度大,备份还原难度大等等。另外,DNS缓存有必要吗?
  • Gentoo wiki(Complete_Virtual_Mail_Server/SSL_Certificates页面)提到了 CAcert 证书的使用,但不清楚(所有这些SubjectAltName子域都需要吗?),也没有使用 Postfix(我读过 Courier 更难)。
  • 关于自托管的各种教程,各不相同,很少描述他们在做什么以及为什么(带有远程访问的自托管电子邮件设置起来很复杂,那么为什么只提供一个命令列表而不解释“傻瓜”?) .

我希望我问的是正确的事情,而且他们不会太傻。

use*_*686 19

  • 不,不需要在服务器上设置 DNS 缓存。服务器应该使用附近某处的缓存 DNS 解析器,但大多数托管公司已经为整个数据中心运行了自己的解析器,并将服务器配置为默认使用它们。

  • 默认情况下,Postfix 和 Dovecot 都使用本地帐户。如果您有一个名为 的 Linux 帐户diti,您可以使用它登录 Dovecot,并且您可以设置 Postfix 以验证针对 Dovecot 的 SMTP 登录

  • 如果您可以将所有邮件发送到同一个帐户,则可以设置普通别名(如 , /etc/aliases)以将邮件重定向到该帐户kra@postmaster@diti帐户。

  • 所有这些主题替代名称都不是必需的。您唯一需要的是您将实际使用的域名,例如mail.diti.meglaux.diti.me。我不确定您是否需要包含域本身(即diti.me)。


以下假设域已配置为指向此服务器的 MX 记录。我通常会尽量保持我的配置合理清晰,因为几个月后我总是想知道“这到底是为了什么”。

1.首先,安装postfixdovecot-imapd包。当提示有关 Postfix 配置时,选择“Internet 站点”选项并输入diti.me邮件名称。此时,您已经可以使用 发送和接收邮件diti@diti.me,甚至可能连接到 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也有点乱,所以我只发布一个清理过的最小版本:

# 服务器信息
mydomain = 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.conf 中的文件。

# 政策
mynetworks = [::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 在第一个“+”处拆分地址的本地部分,
  # 所谓的“plus-addressing”:发送到diti+foo@的邮件将被投递
  # 到 diti@ 邮箱。

对于 Dovecot,Debian 只使用默认的示例配置,它们已经足够好,每个选项都有描述。

每当您更改配置时,请使用postfix reload和/或重新加载守护程序doveadm reload

4.默认情况下,后缀将邮件传递到/var/mail/$USERMBOX格式,这是很简单的(你可以很容易地使用文本编辑器查看),但有很多问题,尤其是与IMAP,因为整个文件已被改写,只要你移动消息,甚至将其标记为“已读”或“未读”。

将两个守护进程更改为使用 Maildir。(还有其他格式,但它们往往特定于 MTA 或 MDA 或 IMAP 服务器或其他任何格式;Maildir 得到广泛支持。)

在 中/etc/postfix/main.cf,将以下内容添加到“交付”部分:

home_mailbox = 邮件/

配置 Dovecot 以使用相同的路径,在/etc/dovecot/conf.d/10-mail.conf

mail_location = maildir:~/Mail

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 = dovecot
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 打开,因为它通常更安全。

/etc/postfix/master.cf使用 SASL 身份验证在 中启用“提交”端口。默认master.cf已经有必要的行,只需要取消注释,尽管其中一些仍然应该被排除在外。

提交 inet n - - - - smtpd
  -o syslog_name=后缀/提交
  -o smtpd_tls_security_level=加密
    # “提交”端口将需要 TLS,而不是使其成为可选
  -o smtpd_sasl_auth_enable=yes
    # ...以及允许用户登录。
# -o smtpd_reject_unlisted_recipient=no
# -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,reject
    # 默认的recipient_restrictions 检查IP地址和
    # $mydestination. 对于“提交”端口,允许所有内容
    # 作为用户登录,但拒绝所有匿名邮件。
  -o milter_macro_daemon_name=起源
    # 如果您稍后决定设置 DKIM 代理等,这将允许
    # 用于区分用户提交的邮件和收到的传入邮件。
    # 它是默认配置的一部分,因此也包含在这里。

如果您有一个需要旧式“隐式 SSL”端口 (tcp/465) 的邮件客户端,您可以取消注释中的smtpsmaster.cf- 如果您这样做,请保持与submission端口类似的设置。

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

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

postmaster: root
admin:      root
root:       diti
kra:        diti
Run Code Online (Sandbox Code Playgroud)

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

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

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