0x00 背景
自己做的做的产品fp.nevermoe.com注册时需要发送邮件,所以需要做一个邮件服务器。
0x01 步骤
首先明确两点,smtp服务是发送邮件的,pop3和imap服务是接受邮件的。
然后我是参考这篇文章做的,完完全全一样的步骤即可成功。
不过需要注意两点:
-
GoDaddy默认的MX记录是smtp.secureserver.net之类的值,要将该记录改成自己的域名才能正常收发邮件。
-
使用如Thunderbird之类的客户端登陆账户的时候是无法登陆root账户的,只能登陆其他账户,比如在刚刚那篇教程里创建的bobby账号。
-
取/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
即可生效。
-
另外,为了防止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拒收所做的努力:
- 在godaddy添加dmarc记录。
- /etc/postfix/main.cf里的myhostname需要设置成nevermoe.com,与域名一致。/etc/hosts和/etc/hostname也同样设置。
- 设置reverse dns记录(ptr),这里需要到你的服务器IP提供商去设置,而不是DNS服务商。
0x04 过滤spam
创建/etc/postfix/body_checks
文件:
/^.*My bitc.*in address*$/ REJECT SUCK MY DICK BABE
注意,这里spam的发件人把bitcoin
的o
换做一个相似的字母(homograph attack),所以我用了.*
来进行匹配。
将该文件路径追加到/etc/postfix/main.cf
body_checks = regexp:/etc/postfix/body_checks