设置安全的IMAP电子邮件服务器的最简单方法是?[关闭]


17

我想摆脱Google作为电子邮件提供商的角色,并在专用服务器上设置完整的电子邮件解决方案。问题:我希望安装过程尽可能简单,以便在出现问题时再次进行所有设置不会很麻烦。

先决条件

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

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

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

我到目前为止找到的信息

  • 一个法国人的文章描述了在长详细介绍了如何建立一个完整的,安全的电子邮件解决方案。它很长,更难维护,更难于备份和还原等。此外,是否需要DNS缓存?
  • Gentoo Wiki(Complete_Virtual_Mail_Server/SSL_Certificates第页)提到了CAcert证书的使用,但是并不清楚(所有这些SubjectAltName子域是否必要?),也没有使用Postfix(我已经读过Courier更加困难)。
  • 有关自托管的各种教程,各有不同,很少描述它们的工作及其原因(设置具有远程访问权限的自托管电子邮件似乎很复杂,所以为什么只提供命令列表而不说明“虚拟对象”?) 。

我希望我已经提出了正确的事情,而且事情不要太愚蠢。


1
知道如何重新表达并重新提出这个问题吗?
Diti 2014年

Answers:


19
  • 不,不需要在服务器上设置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作为邮件名称。此时,您已经可以作为发送和接收邮件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的自动生成的Postfix main.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中的文件。

#政策
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,这没有任何意义。
receive_delimiter = +
  #告诉后缀在第一个'+'处拆分地址的本地部分,
  #所谓的“ plus-addressing”:发送到diti + foo @的邮件将被传递
  #到diti @邮箱。

对于Dovecot,Debian仅使用默认的示例配置,它们足够好,并描述了每个选项。

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

4.默认情况下,Postfix以mbox格式将邮件发送到/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 SASL'saslauthd',其他可能的类型是“ cyrus”
  #守护程序。我选择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 =是
    #...以及允许用户登录。
#-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,拒绝
    #默认的receive_restrictions检查IP地址和
    #$ mydestination。对于“提交”端口,允许所有内容
    #当用户登录时,但拒绝所有匿名邮件。
  -o milter_macro_daemon_name =发起
    #如果您以后决定设置DKIM代理等,这将允许
    #区分用户提交的邮件和收到的传入邮件。
    #这是默认配置的一部分,因此也包含在此处。

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

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

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

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

每次编辑此文件时,请使用postaliasnewaliases更新哈希数据库/etc/aliases.db

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

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


1
这是伟大的!这确实是有关电子邮件自托管的最简单的教程。使我最惊讶的部分是,在第1点,我确实已经可以从服务器发送电子邮件或接收电子邮件。无论如何,我也会编辑您的消息以澄清一些要点!但是,我无法从外部设置电子邮件(我的意思是Thunderbird)。我mail.diti.me同时为IMAP和SMTP 使用(=服务器的IP地址),我的域已经有MX记录。在设置服务器期间我做错了什么,还是只是雷鸟问题?
2013年

@Diti:看起来所有相关端口(tcp / 25除外)都在服务器上进行了防火墙保护
user1686

应该是什么输出ps auxw | grep "dovecot"?我将我的一个朋友的复杂设置与之比较,而他有dovecot-authimap-login而我没有。端口是否可能实际上是打开的(我不记得用防火墙记得自己),但是没有设置守护程序以从外部侦听那些端口或其他内容?当我openssl s_client -connect mail.diti.me:993在服务器上运行时,它可以工作(并说“ Dovecot ready。”),但是外面没有任何作用。也许我应该尝试安装防火墙并明确允许那些端口?
Diti

@Diti:达夫科特的架构V1和V2之间发生了很大变化,所以你会看到不同的进程-在v2中,就会有dovecotdovecot/anvildovecot/log,等。此外,某些过程仅在有人连接时或仅在验证身份验证详细信息时才开始。
user1686 2013年

1
@Diti:不,默认情况下,两个守护程序都在所有接口和所有地址上侦听。但是并不会拒绝连接-而是,服务器会悄悄地放弃所有连接尝试(请参阅我链接到的nmap扫描),这肯定是某处防火墙的标志。尝试使用iptables -n -v -L来检查是否有任何丢弃数据包的规则。
user1686 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.