用Postfix和Dovecot搭建邮件服务器

0x00 背景

自己做的做的产品fp.nevermoe.com注册时需要发送邮件,所以需要做一个邮件服务器。

0x01 步骤

首先明确两点,smtp服务是发送邮件的,pop3和imap服务是接受邮件的。

然后我是参考这篇文章做的,完完全全一样的步骤即可成功。

不过需要注意两点:

  1. GoDaddy默认的MX记录是smtp.secureserver.net之类的值,要将该记录改成自己的域名才能正常收发邮件。

  2. 使用如Thunderbird之类的客户端登陆账户的时候是无法登陆root账户的,只能登陆其他账户,比如在刚刚那篇教程里创建的bobby账号。

  3. 取/etc/postfix/virtual中的一行作为例子:

    guest@nevermoe.com    mail_guest

    这表示将发送到guest@nevermoe.com全部转发给mail_guest这个用户(这个用户是在2中创建的用户名)。而在使用邮件客户端如Thunderbird时,填写的邮箱名为guest@nevermoe.com,用户名为mail_guest,而非guest。

    设置完成后运行

    postmap /etc/postfix/virtual 
    postfix reload

    即可生效。

  4. 另外,为了防止spam,一般ISP都会封smtp(25号端口),不过我们使用smtps(465号端口)即可,而且更加安全(submission的587号端口经测试也可以,但是这个似乎deprecated了)。

0x02 邮件协议的补充说明

主要参考了这三个说明:
https://blog.filippo.io/the-sad-state-of-smtp-encryption/
https://stackoverflow.com/a/666520/2892850
https://serverfault.com/a/149904/316840

简单来说,smtp的25端口既可以用来作client-server间通信用,也是server-server间通信用的必要端口,不能把这个端口给过滤了。比如说从gmail的邮件服务器发邮件给nevermoe.com的邮件服务器时,就是使用25号端口在通信,这个端口一般是无法改变的。虽然说25号端口默认的通信是明文,但是现在的邮件系统一般都支持设置成默认用STARTTLS进行加密通信,通信如下:

当然根据前面列出的第一篇文章,这样的加密也是不安全的,会有类似于sslstrip的风险。

而你设置邮件客户端(比如Outlook, Thunderbird)的时候,可以优先选择smtps(465,发送),和imaps(993,接收),pops(995,接收),这样你的客户端和服务端的通信是加密的。

25号端口被广泛用于spam邮件的中继(relay),可以disable open relay。用下面这个网站可以查看你的邮件服务器是否接受open relay:
http://www.mydnstools.info/smtprelay/nevermoe.com

新建spf记录:可以使用这个网站生成一个spf记录,https://www.unlocktheinbox.com/spfwizard/,然后把这个记录以TXT类型添加到godaddy dns中即可。

0x03

避免被gmail拒收所做的努力:

  1. 在godaddy添加dmarc记录。
  2. /etc/postfix/main.cf里的myhostname需要设置成nevermoe.com,与域名一致。/etc/hosts和/etc/hostname也同样设置。
  3. 设置reverse dns记录(ptr),这里需要到你的服务器IP提供商去设置,而不是DNS服务商。