西西软件园多重安全检测下载网站、值得信赖的软件下载站!
软件
软件
文章
搜索

首页 → 业内动态 → 业内资讯 → 自建邮件服务器怎么搞?Postfix收发、DNS认证和反垃圾一次讲清

自建邮件服务器怎么搞?Postfix收发、DNS认证和反垃圾一次讲清

相关软件相关文章发表评论 来源:本站整理时间:2026/11/2 11:07:13字体大小:A-A+

作者:xiix点击:0次评论:0次标签: 邮件服务器 Postfix DNS认证 DKIM 反垃圾邮件

  • 类型:服务器区大小:25.4M语言:中文 评分:9.5
  • 标签:
立即下载

做站的人大概都有过这么个念头:与其每年给企业邮箱交几百块续费,不如自己在云服务器上搭一台邮件服务器,发系统通知、发订单提醒、发密码重置链接,数据全在自己手里,想加什么功能就加。想法很美好,真上手才发现,这大概是服务器运维里投入产出比最不划算的一件事邮件服务器难的不是搭起来,是让它发出去的邮件不进垃圾箱。

打算自建邮件服务器,或者正在折腾服务器的朋友,这两家可以重点看看:狗云DOGYUN(高性价比云服务器,多机房可选)、RackNerd(全球VPS,特价常推),自建邮件建议选支持免费快照、能随时重装系统的机器,出问题回滚比什么都重要。下面就把整个流程按动手顺序捋一遍。

自建邮件服务器架构:MTA发信、IMAP收信与反垃圾模块的分工关系

一、先想清楚:你到底是发信为主,还是收发都要

很多人在这一步想歪了。自建邮件服务器其实分成两个完全独立的能力:

发信(SMTP 提交)你的网站给用户发通知、验证码、订单提醒。这部分只需要 Postfix 这类 MTA(邮件传输代理),配上 SPF、DKIM 认证和反向解析(PTR/rDNS)就能跑起来。这是最常见的需求,也是本文重点。

收信(IMAP/POP3)用户给你发邮件、你在网页版后台上查看邮件。这部分需要 Dovecot 或 Courier 之类的 IMAP/POP3 服务,还要额外配 TLS 证书、防暴力破解和垃圾过滤,工程量直接翻倍。

如果你的需求只是「网站能稳定发通知邮件」,那就只做发信,收信继续用别的方案。这不是偷懒,是把 80% 的需求用 20% 的工作量解决掉。真需要收发一体,再往下看收信那部分。

二、装 Postfix:一次搞定的最小配置

以 Ubuntu/Debian 为例,一条 apt 命令就能装上 Postfix。安装过程中会让你选配置类型,选 Internet Site,然后填上你的邮件域名,比如 example.com。

装完之后主配置在 /etc/postfix/main.cf。新手最容易踩的坑是改完不生效Postfix 配置里每个字段前面可能已经有值了,直接追加会导致后面的配置被覆盖。稳妥的做法是每次改完执行 postfix check 检查语法,再 systemctl reload postfix 重载。直接重启虽然也行,但正在发送队列里的邮件会被打断。

几个必须改的关键项:

myhostname = mail.example.com
服务器主机名。要和后面配的 PTR 记录完全一致,很多云厂商默认给你的是随机名,必须改成自己的。

mydestination =
如果你不打算用这台机器收信(只发信),这里应该清空。留着默认的 $myhostname, localhost.$mydomain 倒也没大错,但配合后面的 inet_interfaces 收紧监听范围更干净。

smtpd_relay_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination
这条限制谁可以拿你的服务器转发邮件。别偷懒改,一旦放开,你的服务器马上会被当成公共中继站用来发垃圾邮件,然后 IP 直接进黑名单,这事我见过太多次了。

inet_interfaces = all
监听所有网卡。发信场景需要它,inet_protocols = ipv4 可以先把 IPv6 关掉,等 IPv6 配好了再打开,免得排查问题时多一个变量。

改完记得在防火墙里放开 25 端口(出站和入站都要)。这里有个现实问题:很多云厂商默认封 25 端口,需要提工单申请解封,而且通常只对部分机房开放。AWS 的情况大家都清楚,其他厂商政策各不相同,动手前最好先问清楚,不然装完了才发现发不出去。

机房里的邮件服务器机柜,服务器指示灯与冷光数据线

三、SPF、DKIM、DMARC:三件套必须一起上

这是自建邮件服务器最核心、也是决定成败的一环。这三个东西解决的是同一个问题的不同侧面:向收件方证明「这封邮件确实是我发的,不是冒充的」。少配一个,邮件进垃圾箱的概率会成倍上升。

SPF(Sender Policy Framework)声明「哪些服务器可以用我的域名发信」。它在 DNS 里以 TXT 记录的形式存在:

example.com. 3600 IN TXT "v=spf1 ip4:1.2.3.4 -all"

逐段解释一下:ip4:1.2.3.4 声明允许用这台 IP 发信,可以写多条;-all 是最严格的策略,表示除了列出来的,其他一律拒绝。新手建议直接用 -all,别用 ~all~all(soft fail)虽然宽松,但软失败标记本身就会让部分收件方提高警惕分。

SPF 也有一个众所周知的坑:查询次数限制是 10 次 DNS 查询。如果你的 SPF 记录里用 include: 引用了多个第三方服务(企业邮箱、云发信、客服系统),很容易撞上限。解决办法是把 SPF 记录拆成两条 TXT 记录(多条 TXT 是允许的,总查询次数共享 10 次),或者精简 include。

DKIM(DomainKeys Identified Mail)给每封邮件做数字签名,收件方用你域名下的公钥验签。这是最强的身份证明手段,因为发信方的 IP 换了也不影响验证。

生成密钥对用 OpenDKIM:

dkim-genkey -b 2048 -h rsa-sha256 -d example.com -s mail -v

会得到一对密钥:mail.private 是私钥,要放在服务器上且权限设成 600;mail.public.txt 里是公钥和 TXT 记录模板,把它加到 DNS:

mail._domainkey.example.com. 3600 IN TXT "v=DKIM1; k=rsa; p=MIIBIjAN..."

然后在 Postfix 里接上 opendkim,配置 opendkim.conf 指定 KeyTable 和 SignatureFile,Postfix 的 main.cf 里加上 milter_protocol = 6 和 milter_default_action = tempfail(注意用 milter 不是 smtpd_milters,写错了不报错但也不生效,很多人在这卡半天)。

DMARC 是收件方的反馈机制,告诉收件方「如果这封邮件认证失败,你该怎么办」。DNS 里加一条:

_dmarc.example.com. 3600 IN TXT "v=DMARC1; p=none; rua=mailto:dmarc@example.com"

p=none 是只监控不拦截,同时把报告发到你的邮箱。跑一两周看看报告,确认 SPF 和 DKIM 都对齐了,再考虑改成 p=quarantine 或 p=reject。一上来就设 reject 是常见的翻车操作第三方系统(比如某个用你域名发信的客服工具)还没配好 SPF,你的整个域名就被你自己拒收了。

DNS中SPF、DKIM、DMARC与MX邮件交换服务器的层次关系示意

四、反向解析(PTR):被忽略但极其关键的一步

邮件服务器的世界是反过来的。网页服务器拼的是 IP 能不能连通,邮件服务器拼的是 IP 能不能反查到主机名。收件方拿到你的发信 IP,会去做一次 PTR 查询,看看能不能反查到主机名,再拿这个主机名去验证 SPF。如果查不到,或者反查出来的主机名跟你在 SPF 里声明的对不上,直接判负分。

具体做法:去你的云厂商控制台,把这台服务器的 IP 的 PTR 记录改成 mail.example.com,然后在域名 DNS 里加一条 A 记录把 mail.example.com 指向这个 IP。两边必须完全一致,错一个字母都不行。

顺带还要在 main.cf 里设置 myorigin = example.com,确保发信时 From 头用的是你的域名而不是主机名,很多新手发的邮件显示 root@mail.example.com,这也是被扣分的原因之一。

五、反垃圾:别只靠 RBL 黑名单

自己发信是被动的,收信(如果做的话)才是垃圾邮件的主战场。几个必做的配置:

RBL(DNS 黑名单)。Postfix 里设置 smtpd_recipient_restrictions,查询几个免费的黑名单服务。不过要清楚,公共 RBL 对自建邮件服务器误杀率偏高,而且很多商业邮件服务根本不在这些列表里,依赖它意义有限。

SpamAssassin。装上后跑一遍规则库,配合 header_checks 给可疑邮件加 X-Spam-Status 头,超过阈值直接拒收或者丢进隔离区。

灰名单(Greylisting)。原理很简单:陌生发件人的第一封邮件先拒掉并退信,等对方重试时再放行。正常邮件客户端都会重试,垃圾邮件脚本通常不会。配合 postgrey 使用,几乎零误杀。

如果只是发信不做收信,这些都可以先不管。

六、收信部分:Dovecot 与暴力破解防护

决定要做收发一体的话,Dovecot 是主流选择。它要做的事包括:

配置 IMAP(143/993 端口)和 POP3(110/995), Dovecot 支持 IMAPS/POP3S 的 TLS 加密监听,建议只开加密端口、把明文端口限制在本地。证书用 certbot 申请 Let's Encrypt 就好,记得配自动续期。

然后是暴力破解防护这是收信服务器被入侵最常见的途径。至少做三件事:开启 fail2ban 封禁反复登录失败的 IP;配置 auth_failed_delay 让失败的认证有延迟;给用户设复杂密码并强制定期修改。另外 Dovecot 的 mail_ 目录权限必须是 700,不然用户之间能互相看邮件,这是很低级但很常见的漏洞。

办公桌上的笔记本电脑邮件客户端与家用邮件服务器设备

七、上线前必查的清单

搭完之后按这几条逐项验证,不要凭感觉:

一、发信测试。用 swaks --to 目标邮箱 --from 发件人 发一封测试信,登上目标邮箱看进哪个文件夹。QQ 邮箱和企业邮箱的判定标准不一样,两个都要测。

二、认证检查。把发信 IP 放到 mail-tester.com 上跑一遍,那上面的评分会告诉你 SPF、DKIM、PTR 到底哪一项没过,比自己猜快得多。

三、查黑名单。用 dig +short example.com 加上 zen.spamhaus.org 反查你的 IP,看看有没有被列入。发现自己上了黑名单,先别急着申诉,先找出发信行为里的问题比如短时间发信太频繁、或者开了开放中继。

四、观察队列。Postfix 的 postqueue -p 能看到积压情况。如果邮件一直卡在队列里,日志里翻 /var/log/mail.log,常见原因是被对方限速、或者你的主机名和 IP 的反向解析不一致。

五、准备好回滚。邮件服务出问题的影响面比想象中大(注册验证码发不出去就是全站崩)。上机器前先打快照,出问题直接重置,比现场排查快得多。

邮件服务器部署在云服务器上的等距示意图:云主机、队列、备份与监控模块

八、写在最后

回到开头那句话:自建邮件服务器的难点从来不是「装上 Postfix」,而是让发出去的信被信任。把顺序理一下就很清楚了先做反向解析 PTR,这是所有认证的地基;再配 SPF + DKIM,这两件套必须都有;然后上 DMARC 先用 p=none 观察;最后才是反垃圾和收信侧的防护。

如果你的需求只是发几封通知邮件,说实话,用云厂商的邮件服务或者专业的事务性邮件服务,成本远低于你维护一台邮件服务器的时间。但如果你出于数据合规、域名信誉长期经营、或者确实需要完全控制的需要坚持自建,那上面这套是绕不开的功课。

另外提一句,选机器的时候优先看能不能打快照、能不能换IP、机房位置靠不靠你的用户,而不是只看配置高低。邮件服务器被拉黑之后能不能换IP、能不能干净重启,比多两个核实用得多。

    相关评论

    阅读本文后您有什么感想? 已有人给出评价!

    • 8 喜欢喜欢
    • 3 顶顶
    • 1 难过难过
    • 5 囧囧
    • 3 围观围观
    • 2 无聊无聊

    发表评论

    昵称:
    表情: 高兴 可 汗 我不要 害羞 好 下下下 送花 屎 亲亲