使用 postfix 和 dovecot 快速搭建邮件服务器
在正式进行安装邮件服务器之前,我们需要对邮件服务器概念有一些基础的了解。
1. 邮件服务器类型
邮件传输代理(MTA): 这是邮件系统中的核心组件,负责邮件的传输。常见的 MTA 包括 Postfix、Exim 等,它们通过 SMTP 协议将邮件从发件人传递到收件人的邮箱服务器。
邮件投递代理(MDA): MDA 负责将邮件从 MTA 接收后投递到用户的邮箱。Dovecot、Cyrus 等是常见的 MDA。
邮件访问代理(MUA):也称为邮件客户端,是用户用来接收、发送和管理邮件的应用程序,如 Outlook、Thunderbird 等。
今天我们要安装和配置的是MTA和MDA,有了这两个组件我们就可以发送和接收邮件,至于MUA我们可以使用任何熟悉的MUA例如Outlook, Foxmail, Thunderbird等。
2. 配置 DNS 解析
配置 A 记录:
mail.example.com -> 1.2.3.4(服务器的 ip 地址)
配置 CNAME 记录:
smtp.example.com -> mail.example.com
pop.example.com -> mail.example.com
imap.example.com -> mail.example.com
配置 MX 记录:
mail.example.com -> example.com
配置 SPF 记录:
example.com -> “v=spf1 a mx -all”
配置 DMARC 记录:
_dmarc.example.com -> “v=DMARC1; p=none; rua=mailto:dmarc-reports@example.com“
DMARC 记录不是必须的,但是对邮件传输遇到的问题非常有帮助。启动服务后需要创建一个账户dmarc-reports@example.com专门用来接收 DMARC 报告。
反向解析 PTR 记录
PTR记录需要找VPS提供商设置
1 | nslookup -qt=ptr xx.xx.xx.xx |
3. 准备工作
修改主机名:
1 |
|
找VPS提供商开通25端口
4. 安装 postfix
1 |
|
4.1. postfix 基本配置
Postfix 的配置文件位于 /etc/postfix 文件夹。先看 main.cf 文件,有几个重要的配置。如果事先设置了正确的 hostname,那么这些配置已经自动设置好了。
myhostname
1 |
|
myhostname 让 Postfix 知道自己主机的名字。
mydomain
1 |
|
myorigin
1 | myorigin = $mydomain |
myorigin 的值可以与 mydomain 相同。
在通过 Postfix 发送邮件的时候,如果 From 字段不完整,例如 From: user,Postfix 会根据 myorigin 的值将地址补全为 From: user@example.com。
mynetworks
1 |
|
mynetworks 指定了本地网络的 IP 段,默认只包含主机自己。
inet_interfaces
1 |
|
inet_protocols
1 |
|
mydestination
mydestination 指定了 Postfix 在收到这些域名地址作为目标地址的邮件时,作为接收方收下邮件。
如果收到的邮件既不符合转发规则,又不符合接收规则,则会拒绝收信。
由于我希望这台服务器能接受主域名 example.com 的邮件,所以将这个配置修改为:
1 | mydestination = example.com, mail.example.com, localhost.example.com, localhost |
home_mailbox
1 |
|
4.2. 修改 postfix 默认端口
有的时候 SMTP 的默认 25 端口被 vps 提供商禁用,不能用会导致无法使用邮箱功能,解决办法修改默认端口。
1、修改 postfix 的配置文件
vim /etc/postfix/master.cf
第一行直接注销:
1 | #smtp inet n – n – - smtpd |
或者改成:
1 | smtp2 inet n – n – - smtpd |
2、修改/etc/services 文件,增加 smtp2 监听端口,本文以 2525 端口为例
vim /etc/services
找到:
1 | smtp 25/tcp mail |
其后添加:
1 | smtp2 2525/tcp mail2 |
4.3. 启动 postfix
立即启动 postfix 并设置为开机自启动
1 |
|
4.4. 创建邮件账号
下面我们创建两个测试账号,用于测试发送邮件过程,也即测试 postfix 是否能正常工作。
1 |
|
4.5. 测试 postfix 是否能够正常发送邮件
1 |
|
此处的 localhost 也可以修改为服务器的 ip 或域名,即远程连接 postfix, 此时需要防火墙放行 2525 端口
使用 telnet 连接邮件服务器的 2525 端口。
mail from 指令 输入发件人
rcpt to 指令输入收件人
data 指令输入内容
Subject 输入标题
. 指令结束邮件编写
quit 指令退出
如果有任何异常,可以参考日志,参考问题排查章节进行问题排查。
5. 安装 dovecot
dovecot 用于接收邮件,作为 MDA 邮件投递代理。dovecot 支持 imap, pop3 等多种协议。
1 |
|
5.1. dovecot 基本配置
修改配置文件:/etc/dovecot/dovecot.conf
1 |
|
编辑配置文件
修改配置文件:/etc/dovecot/conf.d/10-auth.conf
1 |
|
修改配置文件:/etc/dovecot/conf.d/10-mail.conf
1 |
|
修改配置文件:/etc/dovecot/conf.d/10-ssl.conf
1 | # 先暂时设置为no, 等申请了证书再来配置ssl验证 |
5.2. 启动 dovecot
重启 dovecot:
1 |
|
设置为开机自启动
1 |
|
5.3. 开启防火墙
1 |
|
5.4. 测试 dovecot 是否能够正常接收邮件
1 |
|
可以看到 u2@example.com 邮箱收到了一封邮件。
至此一台简单的邮件发送和接收服务器创建成功,我们可以使用各种图形化的邮件客户端,例如 thunderbird, foxmail 等邮箱客户端连接服务器。
后续我们会使用 ssl 加固邮件服务器,关注鹏叔的技术博客空间,给您带来更多技术分享。
6. 进阶设置
6.1. postfix 配置 ssl
修改配置文件 /etc/postfix/main.cf
修改或增加下列配置
1 | smtpd_tls_security_level = may |
增加下列配置(可选)
1 |
|
修改配置文件 /etc/postfix/master.cf
开启 smtps 服务
1 |
|
重启 postfix
防火墙放行 465(smtps)端口
6.1.1. 测试 smtps
1 |
|
6.2. dovecot 配置 ssl
这里使用 acme.sh 生成私钥和证书
1 |
|
证书生成后,将公钥和私钥分别拷贝到
1 | /etc/pki/dovecot/private/dovecot.pem |
然后修改 10-ssl.conf
将 ssl = no 修改为 ssl = yes
重启 dovecot
防火墙放行 995 (pop3s) 端口
6.3. 测试 pop3s
1 |
|
7. 问题排查
Question 1:postfix 和 dovecot 的日志在哪里?
出现问题可以查看日志。
查看日志的办法有如下几种:
使用 journalctl 查看
1 |
|
查看日志文件
1 |
|
查看 postfix queue
1 |
|
问题 1: 邮件显示已经发出,但是收件箱显示没有邮件,如何排查?
分析:
通过查看 postfix 日志,邮件已经成功发送。
1 |
|
根据日志,邮件发送到 maildir, 进入 u4 主目录 /home/u4/Maildir/new, 确实能看到相应的邮件,但是在 thunderbird 客户端收件箱始终没有邮件。
最后发现 是 dovecot 的 mail_location 没有设置正确,将其指向正确的 mail location 即可。如下:
1 |
|
Postfix 的 home_mailbox(/etc/postfix/main.cf)配置需要与 devocot 的 mail_location(位于/etc/dovecot/conf.d/10-mail.conf)相匹配,否则会出现以上情况。
home_mailbox 默认不配置,默认 mailbox 位于/var/mail/user,如果配置为 home_mailbox = Maildir/,则 mailbox 位于 ~/user/Maildir
问题 2: 发往 google 的邮件被退信,如何处理?
1 |
|
PTR 记录没有设置正确,邮件被退回。
使用如下命令测试,发现通过 ip 查询到的域名和,通过域名查询到的 ip 不一直。
1 |
|
解决办法,设置正确的 ptr 记录即可。
问题 3: 不能外发邮件,也无法收取邮件,日志显示连接超时 (connect to xxx Connection timed out)
问题排查:
1 |
|
8. 参考文档
使用 postfix 和 dovecot 快速搭建邮件服务器