⚠️本篇属于过程回忆,我的搭建过程并不完全按照文章路线来,期间解决dovect和certbot导致我的整个搭建过程比较混乱,本篇文章是事后总结出的一条比较可靠的搭建路线,如果照着文章搭建有概率碰到奇怪的小问题,毕竟我也没有验证^_^
一个合格的hacker一定有一个自己的邮箱地址和服务
我的搭建环境为AWS送的一年EC2,系统Debian(一年后到期再说吧= =
域名为porkbun买的.space,并套上cf监控域名访问情况(如果有小可爱在渗透就可以看到)
采购阶段
首先是域名,这个没啥好说的,想在哪里买域名都可以
不过有个比较想骂人的地方是在porkbun买的时候碰到身边七年老用户都没见过的逆天支付bug
成功付款后域名并未到账= = 当时急得不行,发邮件反馈等了一天,最后官方给我平台自己的等值货币
但是……
处理很人性化,后来朋友说应该是striple接口的问题而不是porkbun的问题,所以大家要想用porkbun还是可以放心用,要是碰到我这样的情况也别慌,发邮件反馈,一天内就会回复(应该不是每个人都有我这样的bug触发圣体……
然后是vps,EC2领取教程网上一搜一把,我就不多介绍了
搭建阶段
1 - 安装postfix和dovecot并进行基本配置
AWS选择debian系统,进去后先安装postfix和devocot。前者用于发件,后者用于收件
sudo apt update && sudo apt upgrade -y
sudo apt install postfix dovecot-core dovecot-imapd mailutils -y
这里我没有安装pop3,如果需要pop3可以再加一句apt install dovecot-pop3d -y
顺便简单介绍一下pop3和imap的区别
- POP3: POP3通过将邮件从服务器下载到本地设备(如电脑或手机)来工作。下载后,邮件通常会从服务器上删除(除非手动设置保留副本)。它更像是一种“取走邮件”的方式,适合离线阅读。
- IMAP: IMAP允许你在服务器上直接管理和查看邮件,而无需将它们下载到本地设备。本地设备只是显示服务器上的邮件内容,所有操作(如删除、移动文件夹)都会同步到服务器。
接着配置postfix
vim /etc/postfix/main.cf
myhostname = yourdomainname.com
mydomain = yourdomainname.com
myorigin = /etc/mailname
mydestination = $myhostname, localhost.$mydomain, localhost
inet_interfaces = all
inet_protocols = all
home_mailbox = Maildir/
然后配置dovecot,首先配置主文件
vim /etc/dovecot/dovecot.conf
#确保存在这句即可。如果要pop3可以在后面添加一个pop3,空格分隔
protocols = imap
接着配置存储文件
vim /etc/dovecot/conf.d/10-mail.conf
#将下面这句配置修改为这样
mail_location = maildir:/home/你想要的邮箱用户名(后面用akaRed代替)/Maildir
接着配置认证配置
vim /etc/dovecot/conf.d/10-auth.conf
#确保这两项即可
disable_plaintext_auth = no
auth_mechanisms = plain login
然后重启这两个服务
sudo systemctl restart postfix
sudo systemctl restart dovecot
2 - 创建邮箱用户
添加系统用户作为邮箱账户
sudo adduser --shell /bin/bash akaRed
按步骤设置完密码。接着创建目录
sudo maildirmake.dovecot /home/akaRed/Maildir
sudo chown -R akaRed:akaRed /home/akaRed/Maildir
3 - 将域名套用到 Cloudflare 并设置 DNS
如果你没有在cloudflare上绑定过域名可以看这个教程
https://blog.csdn.net/yzixin/article/details/133189358
接着点进你的域名DNS记录管理页面,然后添加下面这几条记录
A 记录:
- 类型:A
- 名称:@(代表根域名)
- 值:你的 VPS IP
- TTL:自动
- 代理状态:关闭(DNS Only)(邮件服务需要直接指向服务器 IP,不能通过 Cloudflare 代理)。
MX 记录:
- 类型:MX
- 名称:@
- 值:yourdomainname.com
- 优先级:10
- TTL:自动
- 代理状态:关闭(DNS Only)
TXT 记录(SPF):
- 类型:TXT
- 名称:@
- 值:v=spf1 a mx ~all
- TTL:自动
4 - 设置TLS
cf虽然提供TLS,但是由于我们没有开启代理选项,所以仍需在 VPS 上配置证书。这里我用certbot来实现
由于我的VPS情况是80端口跑着不能暂停的服务,所以需要用DNS-01验证。
首先安装certbot
sudo apt install certbot -y
sudo certbot certonly --standalone -d yourdomainname.com
证书储存在/etc/letsencrypt/live/yourdomainname.com/
然后来到cloudflare,跟着截图走
上图的select要选上你绑进来的域名。点击继续后就可以复制一段令牌。接着我们要在vps保存这段令牌
sudo mkdir -p /etc/letsencrypt
sudo vim /etc/letsencrypt/cloudflare.ini
#输入这段内容
dns_cloudflare_api_token = 你的API令牌
然后设置权限
sudo chmod 600 /etc/letsencrypt/cloudflare.ini
然后用certbot进行认证
sudo certbot certonly --dns-cloudflare --dns-cloudflare-credentials /etc/letsencrypt/cloudflare.ini -d yourdomainname.com
Certbot 会:
- 提示输入邮箱(填入一个你的真实邮箱,用来接收证书过期提示。例如114514@qq.com)。
- 询问是否分享给 EFF(建议选 N)。
- 自动在 Cloudflare 添加 TXT 记录进行验证。
验证完成后,证书会存储在 /etc/letsencrypt/live/youdomainname.com/
。这里为了确保证书路径对postfix拥有权限,建议执行下面的命令
sudo chmod 644 /etc/letsencrypt/archive/yourdomainname.com/fullchain1.pem
sudo chmod 640 /etc/letsencrypt/archive/yourdomainname.com/privkey1.pem
sudo chown root:postfix /etc/letsencrypt/archive/yourdomainname.com/fullchain1.pem
sudo chown root:postfix /etc/letsencrypt/archive/yourdomainname.com/privkey1.pem
5 - 为postfix和dovecot配置TLS
先配postfix
vim /etc/postfix/main.cf
smtpd_tls_cert_file = /etc/letsencrypt/live/yourdomainname.com/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/yourdomainname.com/privkey.pem
smtpd_use_tls = yes
smtp_tls_security_level = may
smtpd_tls_security_level = may
其中
- smtpd_tls_cert_file:指向证书链文件。
- smtpd_tls_key_file:指向私钥文件。
- smtpd_use_tls = yes:启用 TLS。
- smtp_tls_security_level = may:允许客户端选择是否使用 TLS。
接着重启
systemctl restart postfix
没有报错即可。接着配置dovecot
vim /etc/dovecot/conf.d/10-ssl.conf
ssl = yes
ssl_cert = </etc/letsencrypt/live/yourdomainname.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/yourdomainname.com/privkey.pem
注意:< 是必需的,表示从文件读取内容
接着重启
systemctl restart dovecot
没报错即可。
6 - 配置rDNS(可选)
配置这一步的目的是为了提高你邮箱地址的可信度。减少被认为是垃圾邮件的可能
每家vps配置有所区别,这里我就以EC2为例子
进到EC2控制台,进入弹性ip
点击分配,按默认走即可
之后勾上分配的ip,点操作,选择关联
关联上再回到这个页面,选择更新反向DNS。在反向 DNS 域名一栏填写你的域名即可
7 - 配置SASL
目的是为了启用587端口,后面才能配合我的设备的邮件软件使用
首先编辑Postfix的master.cf文件
vim /etc/postfix/master.cf
#找到或添加 Submission 服务
submission inet n - y - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_sasl_type=dovecot
-o smtpd_sasl_path=private/auth
-o smtpd_sasl_security_options=noanonymous
-o smtpd_relay_restrictions=permit_sasl_authenticated,reject
- submission:启用 587 端口。
- smtpd_tls_security_level=encrypt:强制使用 TLS。
- smtpd_sasl_auth_enable=yes:启用 SASL 认证。
- smtpd_sasl_path=private/auth:与 Dovecot 认证对接。
接着配置dovecot的
vim /etc/dovecot/conf.d/10-master.conf
#找到 service auth 部分
service auth {
unix_listener /var/spool/postfix/private/auth {
mode = 0660
user = postfix
group = postfix
}
}
重启他俩,然后用netstat -tunlp
看到587端口正在监听就说明启动正常。接着用openssl验证一下
openssl s_client -connect yourdomainname.com:587 -starttls smtp
如果返回 250-AUTH
和证书信息,说明 587 端口正常工作。
8 - 端口开放、证书自动续签设置
确保下面这些端口开放
sudo ufw allow 25
sudo ufw allow 587
sudo ufw allow 465
sudo ufw allow 143
sudo ufw allow 993
接着为certbot配置自动续签
sudo certbot renew --dry-run
使用阶段
这里我以macos自带的邮件为例
点击右上角的邮件、添加账户、添加其他账户
电子邮件地址填akaRed@yourdomain.com
,其他的根据实际情况填写。密码就是你在添加系统用户时填写的密码
添加完成后点击右上角邮件、设置,进入到你刚添加的账户,点击服务器设置。
主机名填写你的域名,将两个自动管理链接设置
取消,认证方式全选密码。IMAP端口为993,SMTP端口为587,将使用TLS勾选上。接着等待连接就可以愉快的使用啦
小problem
如果你遇到邮件发不出去的情况,大概率是因为你的邮件地址不被一些大邮件商认可。比如腾讯、Google。你可以在你的vps里输入sudo mailq
查看邮件发送队列,如果出现类似connection timeout
的字样就说明你的邮件地址不被认可和接收,而不是你的vps真的连不上腾讯或者Google(这种情况也常出现在学校邮箱收不到境外邮件一个道理)。
解决办法也很简单,就是收购腾讯
一般只有你的域名是.com
或者.cn
这样的才有可能被认可。所以更换域名应该是个可行的解决方案