Debian 8下Postfix+Dovecot+Roundcube搭建邮件服务器指南

由于网上搜到的邮件配置大多是基于CentOS的,或者自编译的,很少有基于Debian的。
所以作者不得不自己探索如何在Debian下搭建。
本文只是作者初次尝试,对邮件服务器皮毛不懂,而且极其不安全!!请读者慎用。

科普文:http://linux.vbird.org/linux_server/0380mail.php
进阶型科普文:http://www.iredmail.org/docs/install.iredmail.on.debian.ubuntu.html#important-things-you-must-know-after-installation
这是买证书后的措施:http://www.iredmail.org/docs/use.a.bought.ssl.certificate.html
简单一点儿,明白这些:Postfix (SMTP server),Dovecot (POP3/IMAP server),Roundcubemail (Web Client)

强烈推荐iRedmail,一个集成安装的脚本,不过貌似它不支持我的Debian8

在域名侧配置

A记录配置

+ ------------------- + ------------- + ---------- +
| Host                | Points To     | TTL        |
+ ------------------- + ------------- + ---------- +
| mydomain.com        | X.X.X.X       | 12 Hours   |
| mail.mydomain.com   | X.X.X.X       | 12 Hours   |
+ ------------------- + ------------- + ---------- +

MX记录配置 (只影响收信)

+----------+--------------+------------------------+--------+
| Priority |     Host     |       Points To        |  TTL   |
+----------+--------------+------------------------+--------+
|   0      | mydomain.com | mail.mydomain.com      | 1 Hour |
|   5      | mydomain.com | other1.otherserver.net | 1 Hour |
|   10     | mydomain.com | other2.otherserver.net | 1 Hour |
+----------+--------------+------------------------+--------+

下面两条是默认的MX记录,如果没有可无视,优先级改到5或10比你设的大就行(越小优先级越高)

SPF记录配置 (以TXT记录形式,只影响垃圾邮件,最后再尝试好了)

+--------------+----------------------------------+--------+
| Host         | TXT Value                        | TTL    |
+--------------+----------------------------------+--------+
| mydomain.com | "v=spf1 mx mx:mydomain.com -all" | 1 Hour |
+--------------+----------------------------------+--------+

在主机侧配置

Reverse PTR配置 (只影响发信)
X.X.X.X mydomain.com
Reverse PTR除了影响mailserver外,对SSL验证也有影响,为了保证https加密正常,还是用主域名吧

在VPS侧配置

本人的配置,保证个人使用正常,不对公众开放,非企业邮箱配置。

安装只是开始

#安装Postfix
$ sudo apt-get install postfix

安装时候选择internet site,然后稍微配置下/etc/postfix/main.cf
设置mydestination,把两个域名mydomain.com与mail.mydomain.com都加进来,
看到有篇文章说把MX记录里默认的other1.otherserver.net与other2.otherserver.net也加进来,我也加了。
注意保持myhostname与mynetworks为默认不变,因为牵扯到该死的Peer Certificate,还有用户认证机制

#安装Dovecot (默认已装好)
$ sudo apt-get install dovecot-core dovecot-imapd dovecot-pop3d dovecot-lmtpd

安装RoundCube
这个不在默认的源里,backports里有,不过我还是选择自主下载
相对于子目录,我更偏向于使用子域名mail.mydomain.com。
去官网下一个新的complete版,解压到/var/www/mail.mydomain.com/
在apache2里新建一个站点,简单配置(安全由.htaccess保证)

$ sudo emacs /etc/apache2/sites-available/mail.conf
<VirtualHost *:80>
        ServerName mail.mydomain.com

        ServerAdmin webmaster@mydomain.com
        DocumentRoot /var/www/mail.mydomain.com/

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
#启用站点,一定在/etc/apache2/sites-available目录下执行
$ sudo a2ensite mail.conf

访问mail.mydomain.com/INSTALL,然后参照INSTALL里的安装方法安装即可。
注意,SMTP发信还是用默认的mail吧,PHP5.6以上的Peer认证问题很难根本解决的。

默认配置其实挺好的

Debian默认的解决方案是这样的:在你的内网里无视证书,不开放外网访问权限。
所以证书的签名基本都是基于hostname的,和域名没什么关系,
如果你想用mail.mydomain.com作为外部邮箱工具的收/发信服务器,不好意思,默认配置不支持
因为我的想法是所有针对邮箱的使用,都必须经过网页端的RoundcubeMail,所以默认的配置即可。

如果需要认证,应该要装SASL,然而我买不起证书,所以不认证算了。
如果自己签证书,那证书问题就如滔滔江水,连绵不绝。
Mozilla的Let’s encrypt项目声称将来会支持IMAP,将来看看情况吧,买证书什么的已经过时了

然而,即使这样,网页登录时使用http协议且需要输入的用户名是主机的用户名,这实在是太糟了。
(注意刚才的配置没有涉及虚拟账户,登入的用户密码和VPS登录的用户名密码一致,好不安全!)
因为SSL啊TLS啊证书啊私钥啊这类东西太复杂了,这个问题会在另开一篇单独阐述

疑难杂症

1.解决文件夹移动失败的问题,新的Dovecot已经内置配置,不用再用autocreate插件
修改/etc/dovecot/conf.d/15-mailboxes.conf
把需要的几个文件夹的auto从默认的no改成subscribe(光create是不够的,必须sunscribe才能同步)

namespace inbox {
  mailbox Drafts {
    auto = subscribe
    special_use = \Drafts
  }
  mailbox Junk {
    auto = subscribe
    special_use = \Junk
  }
  mailbox Trash {
    auto = subscribe
    special_use = \Trash
  }
  mailbox Sent {
    auto = subscribe
    special_use = \Sent
  }
  mailbox "Sent Messages" {
    special_use = \Sent
  }
}
#记得重启
$ sudo dovecot reload

2.解决删除的权限问题
随着一次次的尝试删除,已删除邮件里会一封一封增多,但收件箱里却一封也没少。
检查一下dovecot的log:/var/log/mail.err,会发现是一个权限问题
把主用户(jhpx)加入mail组

  #添加至mail组但不删除原有组
$ sudo usermod -a -G mail jhpx
  #检查
$ groups jhpx

因为邮箱服务器的坑太多,有些我也不是很懂,欢迎留言讨论。