OpenSMTPD 7.9.0p0 介绍与选型指南

OpenSMTPD 7.9.0p0 认知与选型:OpenBSD 项目出品的极简安全 MTA(RFC 5321 服务端实现),含 ISC 许可、特权分离架构、新语法 listen/action/match 配置模型、功能特性与官方溯源数据,附 Postfix/Exim/Haraka/Maddy 量化选型对比

OpenSMTPD邮件服务器OpenSMTPD2026/10/21

OpenSMTPD 7.9.0p0 介绍与选型指南

目标:讲清 OpenSMTPD 是什么、能做什么、架构与配置模型长什么样,并与 Postfix、Exim、Haraka、Maddy 等同类 MTA 做量化选型对比,帮助读者判断「什么时候该选 OpenSMTPD」。本文为认知篇,全部数据来自官方站点、官方仓库与发行版包仓库的联网溯源(查询日期 2026-10-21),命令与版本数据均标注来源。

一、环境信息

本文是联网溯源的认知篇,不依赖本地实验环境。溯源对象与来源如下:

项目内容
软件名称OpenSMTPD(OpenBSD SMTP 守护进程的可移植版)
最新稳定版7.9.0p0(GitHub portable 仓库 releases,发布于 2026-09-13)
官网公告版本7.8 系(官网公告 7.8.0 于 2025-10-30 发布、7.8.0p1 于 2026-03-27 发布)
Ubuntu 22.04 (jammy) 包版本opensmtpd 6.8.0p2-4build1(jammy/universe,apt-cache 实查)
许可证ISC License(官网明示「freely usable and re-usable by everyone under an ISC license」)
官方站点https://www.opensmtpd.org/
源码仓库https://github.com/OpenSMTPD/OpenSMTPD/ (其他系统的 portable 版)
主创人员Gilles Chehade、Eric Faurot(官网明示),隶属 OpenBSD Project

💡 说明:OpenSMTPD 有两条发布线——OpenBSD 基础系统内置版随 OpenBSD 系统发布(源码在 OpenBSD CVS 的 src/usr.sbin/smtpd),其他系统(Linux 等)使用 GitHub 上的 portable 版。portable 版发布以 OpenBSD 版本为基线(如 7.9.0p0 对应「OpenBSD 7.9 errata」),版本号中的 p 表示 portable 补丁级(point release)。

二、软件概述

2.1 项目定位

OpenSMTPD 是 RFC 5321 定义的服务端 SMTP 协议的一个自由实现,允许普通机器之间通过 SMTP 协议交换邮件。官网原话是「A FREE implementation of the server-side SMTP protocol as defined by RFC 5321, with some additional standard extensions」。

项目的诞生动机在官网与项目宣言中写得很直白:始于对当时其他 SMTP 实现的不满(「Started out of dissatisfaction with other implementations」),目标是做一个「易于正确配置、默认即安全」的邮件守护进程,与 OpenBSD「默认安全(secure by default)」的整体哲学一脉相承。

关键定位要点:

  • 纯 MTA(Mail Transfer Agent):只负责 SMTP 收发与投递(本地 Maildir/mbox、转发到上游),不提供 IMAP/POP3 收信、不提供 Webmail 管理界面——这两块需要 Dovecot 等独立组件配合。
  • 配置极简:一份 smtpd.conf(默认 /etc/smtpd.conf)即可描述全部行为,核心语法只有 listen / action / match 三类关键语句,6.4.0 起(2018 年)启用的新语法非常接近自然语言。
  • 默认安全:特权分离(privilege separation)、非特权进程 chroot、默认只监听本机回环、默认拒绝向 root 投递邮件等行为都是开箱即用,无需额外加固。

2.2 版本发布节奏(实查 GitHub releases.atom,2026-10-21)

版本发布时间(UTC)说明
7.9.0p02026-09-13当前最新稳定版,含 OpenBSD 7.9 errata 002 与 015
7.8.0p12026-04-087.8 系补丁版(官网公告 2026-03-27)
7.8.0p02025-11-047.8 系首版(官网公告 2025-10-30)
7.7.0p02025-05-137.7 系
7.6.0p1 / 7.6.0p02024-10-247.6 系
7.5.0p02024-04-107.5 系
7.4.0p1 / 7.4.0p02023-10-25 / 2023-11-167.4 系

从上表可以读出两个事实:一是发布节奏约为「每年一个主版本、跟随 OpenBSD 半年发布周期」,二是补丁版(p1)通常在主版后数月内跟进,修复安全与正确性问题。Ubuntu 22.04 的仓库版本 6.8.0p2(2021 年代)明显落后于上游,这是发行版打包滞后,不代表上游停更——选型时应把「仓库旧版」与「上游新版」都纳入评估(详见本文第七章兼容矩阵)。

2.3 许可证与治理

OpenSMTPD 采用 ISC 许可证——与 OpenBSD 项目整体许可一致,功能上等价于简化版 BSD/MIT 许可,允许任意使用、修改与再发行,只要求保留版权声明。没有商标约束与专利条款,对商用、二进制再发行都极友好。项目治理上属于 OpenBSD Project 的一部分,由项目核心开发者(Gilles Chehade、Eric Faurot)主导,安全修复走 OpenBSD errata 通道,再同步到 portable 仓库。

三、核心架构

3.1 特权分离进程模型

OpenSMTPD 最核心的架构特征是 privilege separation(特权分离):一个 smtpd 父进程派出多个职能单一、权限最小的子进程协作完成收信流程。这是从 OpenSSH 的设计哲学移植到邮件领域的实践,目的只有一个——任何一个环节被攻破,攻击者拿到的也只是无特权沙箱,而不是整个邮件系统。

各职能进程(可在调试日志与 ps 中观察到,命名以实测观察到的 portable 版为准):

进程职能权限特征
smtpd(父进程)监督与仲裁,绑定特权端口 25root,但仅做协调
pony express(7.9 中亦称 dispatcher)SMTP 会话引擎与投递执行非特权 + chroot
queue队列持久化(/var/spool/smtpd)_smtpq 用户
scheduler投递调度与重试策略非特权 + chroot /var/empty
lookup表(table)查询解析非特权 + chroot /var/empty
control控制通道(smtpctl 命令接入)非特权 + chroot /var/empty
ca / cryptoTLS 证书私钥操作与加解密私钥隔离,主进程不接触明文私钥

💡 技术拓展:特权分离是 Unix 守护进程安全设计的经典模式,同类实践对比——

实践原理代表实现
特权分离多进程每个职能一个最小权限进程,攻击面隔离OpenSSH、OpenSMTPD
单进程降权主体逻辑运行在非特权用户下Postfix(master+子进程组)、Nginx
chroot 沙箱进程文件系统视图限定在子树内OpenSMTPD(全进程组合使用)
capability 裁剪仅保留必要内核 capabilitysystemd 服务沙箱化

OpenSMTPD 属于「分离最彻底」的一档:不仅多进程降权,还叠加 chroot,且私钥单独交给 ca 进程持有。本文选型语境下采用 OpenSMTPD 自身的特权分离模型。

3.2 配置模型:listen / action / match

OpenSMTPD 6.4.0(2018 年)引入的新语法把配置从「过程式指令流」改成了「声明式三段式」,一份配置读起来像是在描述业务规则:

# 1) 监听:从哪里收信
listen on 0.0.0.0 port 25
listen on 0.0.0.0 port 587 tls-require auth <creds>

# 2) 动作:收下之后做什么
action "local" maildir alias <aliases>
action "relay" relay

# 3) 规则:什么样的信匹配到哪个动作
match from any for domain "example.org" action "local"
match auth from any for any action "relay"

三大语句族的职责边界清晰:listen 只管「收」,action 只管「怎么处理」,match 只负责「路由判断」。这相比 Sendmail 的 sendmail.mc 宏语言、Exim 的 ACL 手册式写法,学习曲线显著更平缓。

3.3 表(table)与过滤(filter)扩展机制

  • 表(table):把域名、用户、凭据等查找数据抽象成「键值表」,支持三种后端——static { }(内联)、file:(平面文件,改完 smtpctl update table 热加载)、db:(makemap 编译的数据库),凭据表配合 smtpctl encrypt 生成 bcrypt 散列。
  • 过滤器(filter):7.x 引入的内建过滤 DSL,可在 SMTP 各阶段(connect/helo/mail/rcpt/data/commit)按条件(rdns、fcrdns、src、helo、auth、mail-from、rcpt-to)做 disconnect / reject / junk / rewrite 决策,亦可外挂进程式过滤器(proc filter)。垃圾邮件防线(RDNS/FcrDNS 校验、灰名单等)由此在 MTA 层完成。

四、功能特性

以下特性均在官方手册(man smtpd.conf / smtpd,opensmtpd.org/manual.html)与 portable 仓库中可溯源,标注查询日期 2026-10-21:

  1. 完整 SMTP 服务端:RFC 5321 及常见扩展——8BITMIME、ENHANCEDSTATUSCODES、SIZE、DSN、PIPELINING、STARTTLS、AUTH(PLAIN/LOGIN);支持在 25 端口做普通收信、587/465 做 Submission(tls-require 强制加密 + 表认证)。
  2. 投递(MDA)多样化:maildir、mbox、lmtp(转发给 Dovecot 等)、外接 MDA 命令(mda 动作);配合 alias 别名表与虚拟域(virtual 表)支持多域名投递。
  3. 中继(MTA)能力:relay 动作支持 via smtp://、smtp+tls://、smtp+notls://、lmtp:// 等上游指定,auth 上游认证、helo 指定 EHLO 名、src 指定源地址、backup mx 备份 MX 模式、tls no-verify 等。
  4. 队列与调度:持久化队列在 /var/spool/smtpd,信封(envelope)与消息分离存储;smtpctl 支持查看/暂停/恢复/重排/删除队列(show queue、pause mda、resume mda、schedule、remove),支持离线注入(offline queue,/var/spool/smtpd/offline,供 sendmail 兼容层投递本地提交)。
  5. sendmail 兼容层:安装后提供 sendmail、newaliases 等 /usr/sbin 符号链接(指向 smtpctl),本机程序(cron、PHP mail() 等)无需改造即可继续投信。
  6. 加密与身份:PKI 证书声明(pki 域名 cert/key)、tls-require 强制 TLS、每监听口独立证书;出站 TLS 主动升级。
  7. 监控与调试:smtpctl show stats 计数器、smtpctl monitor 实时 TUI、smtpd -dv 前台调试、smtpd -n 配置语法检查、分级 trace 开关。
  8. 跨平台:OpenBSD 原生 + portable 版支持 Linux(Debian/Ubuntu 官方仓库打包)、FreeBSD 等其他 BSD、macOS。

明确不做的事(选型时须知晓):

  • 不提供 IMAP/POP3/网页邮箱——收件人读信需 Dovecot/Cyrus 等;
  • 不内置 DKIM 签名(7.x 需配合 filter dkimsign 外挂或 rspamd 等前置);
  • 不内置反垃圾内容过滤(RSpamD/SpamAssassin 走 milter/proc-filter 集成);
  • 无 Web 管理界面(管理全靠 smtpd.conf + smtpctl)。

五、快速开始(最小可用示例)

以下示例来自官方手册与发行版默认配置(opensmtpd.org/manual.html、Ubuntu jammy opensmtpd 包默认 /etc/smtpd.conf,查询日期 2026-10-21),展示 OpenSMTPD 配置的典型形态。安装步骤的完整实测流程见《Ubuntu 22.04 安装 OpenSMTPD 指南》。

发行版默认的 /etc/smtpd.conf(Ubuntu 22.04 opensmtpd 6.8.0p2 包自带):

table aliases file:/etc/aliases

listen on localhost

action "local" maildir alias <aliases>
action "relay" relay

match for local action "local"
match from local for any action "relay"

这份 6 行配置的含义:aliases 别名表从 /etc/aliases 加载;监听本机回环的 25 端口;收给本地用户的信投递到用户家目录的 Maildir 并展开别名;本机发出的对外信件直接做 DNS MX 中继。改动后用 smtpd -n 做语法检查,再 systemctl restart opensmtpd 生效。

典型提交与投递链路(本机视角):

echo "hello" | sendmail root        # sendmail 兼容层提交
smtpctl show queue                  # 观察队列

本地用户读信位置:maildir 动作投递到 /home/<user>/Maildir/(new/cur/tmp 结构)。

六、适用场景与限制

6.1 适合的场景

  1. OpenBSD / 极简主义 Linux 服务器:官方原生支持、配置文件一屏读完、默认即安全,是 OpenBSD 世界的标准答案。
  2. 小到中型站点的 MX/SMTP 网关:收信转投 Dovecot,出站走 relay,filter DSL 覆盖 RDNS/黑名单/限速等边缘防御。
  3. 中继/转发节点:relay via + 表认证实现 MSA/智能主机、备份 MX(relay backup mx)、域间路由。
  4. 嵌入式与资源受限环境:C 语言实现、内存占用小(服务常驻仅十余 MB 量级)、无解释器依赖。
  5. sendmail 替换:只需 sendmail 命令行为兼容的场合(cron 告警、应用 mail() 调用)。

6.2 不适合的场景与限制

  1. 需要一站式全家桶:想要 IMAP + Webmail + DKIM + 反垃圾一体化的,直接选 Mailcow、iRedMail、docker-mailserver 这类整合套件更省事(站内对比见第七章)。
  2. 需要内容级反垃圾/病毒扫描原生支持:OpenSMTPD 需要外挂(rspamd 等经 proc filter 集成),不如 Postfix 的 milter 生态成熟直给。
  3. 高度复杂路由策略:数百条路由规则、复杂重写策略的场景,Exim 的表达力更强。
  4. Windows 环境:无 Windows 版本。
  5. 发行版仓库版本陈旧:Ubuntu 22.04 仓库仍是 6.8.0p2(2021 年代打包),如需 7.x 新特性要走源码编译或更新发行版。

七、同类选型对比

7.1 候选对象

同为 MTA/邮件服务器赛道的常见开源候选:Postfix(老牌通用 MTA)、Exim(英国剑桥出品、表达力极强的 MTA)、Haraka(Node.js 事件驱动的 SMTP 服务器)、Maddy(Go 单二进制一体化邮件服务器)、以及 OpenSMTPD 本身。本平台已有该赛道多篇实测专栏,可交叉参考:

7.2 量化对比表

数据来源与口径(查询日期 2026-10-21):GitHub 星数为 shields.io 实时徽章读取(仅对 GitHub 托管项目有效);Postfix 与 Exim 不以 GitHub 为主仓库,其事实项取自官方站点 postfix.org / exim.org;许可证取自各项目官方声明;OpenSMTPD 版本节奏取自 GitHub releases.atom(2.2 节同源)。

维度OpenSMTPD 7.9.0p0Postfix 3.xExim 4.9xHaraka 3.xMaddy 0.9.6
实现语言CCCNode.js (JavaScript)Go
许可证ISCIPL(IBM Public License)/ EPL 过渡GPLMITMIT
出品方/维护者OpenBSD Project(Gilles Chehade、Eric Faurot)Wietse Venema(社区维护)University of Cambridge / Exim 社区社区(Nodemailer 生态)foxcpp(个人主导,社区贡献)
GitHub 星数(shields.io,2026-10-21)586—(主仓库不在 GitHub)—(主仓库不在 GitHub)5.6k6.1k
版本节奏随 OpenBSD 半年周期,年均一个主版持续小步发版持续发版 + 定期安全版按需发版按需发版
配置复杂度低(声明式三段式,入门小时级)中(main.cf 参数多但默认可用)高(ACL/router/transport 手册级学习成本)中(JS 插件式)低(TOML,单文件)
默认安全设计特权分离 + 全进程 chroot + 私钥隔离分层多进程 + 降权需自行加固项较多事件驱动沙箱有限单进程,常规降权
IMAP/收信集成无(配 Dovecot/LMTP)无(配 Dovecot/LMTP)无无(纯 SMTP)内置 IMAP
DKIM 签名外挂 filter外挂(milter/opus.opendkim)原生支持插件内置
Web 管理无无(第三方面板)无无(有管理插件)无
适用规模小型/中转/嵌入式小到超大型、全场景通用中大型、复杂路由高并发消息网关/营销投递个人/小型自托管

7.3 选型解读

关键差异与取舍逻辑如下:

  1. 要「默认安全 + 配置最省心」的纯 MTA:OpenSMTPD 与 Maddy 是两个最低学习成本选项。OpenSMTPD 胜在 OpenBSD 出品的特权分离设计与 sendmail 兼容层,Maddy 胜在单二进制自带 IMAP。如果收信端本来就要部署 Dovecot,OpenSMTPD + Dovecot 的组合分工最清晰。
  2. 要「生态与人才储备」:Postfix 仍是企业 Linux 的事实默认(RHEL/Ubuntu 默认 MTA),milter 生态(rspamd/OpenDKIM)开箱即用,运维招聘匹配度最高。OpenSMTPD 在 Linux 生态属「小众但干净」的选择。
  3. 要「复杂路由与策略表达力」:Exim 的 ACL/rewrite 体系无可替代,但学习成本也最高。
  4. 要「Node.js 生态的收信网关」:Haraka 是异步 I/O + 插件体系,适合营销/事务邮件投递平台做前端接入层( Postal 即此类架构)。
  5. 个人自托管一体化:Maddy(单二进制)或 Mailcow/iRedMail/docker-mailserver(容器化全家桶)更合适,OpenSMTPD 需要 DIY 组装收信侧。

一句话结论:OpenSMTPD 适合把「SMTP 收发」这一件事做到极简与极安全的团队;一旦诉求扩展到「邮件全家桶」或「复杂策略路由」,就该转向整合套件或 Postfix/Exim。

八、参考链接

  1. OpenSMTPD 官方站点(项目介绍、版本公告):https://www.opensmtpd.org/
  2. 项目目标宣言:https://www.opensmtpd.org/goals.html
  3. 官方手册页索引:https://www.opensmtpd.org/manual.html
  4. portable 版源码与发布历史:https://github.com/OpenSMTPD/OpenSMTPD/releases
  5. smtpd.conf 手册(OpenBSD 版):https://man.openbsd.org/smtpd.conf
  6. OpenSMTPD 7.9.0p0 发布说明:https://github.com/OpenSMTPD/OpenSMTPD/releases/tag/7.9.0p0
  7. Ubuntu jammy opensmtpd 包信息:https://packages.ubuntu.com/jammy/opensmtpd
  8. 站内交叉参考:《Maddy 0.9.6 介绍与选型指南》、《Mailcow 2026-09a 介绍与选型指南》、《docker-mailserver 16.0.1 介绍与选型指南》、《iRedMail 1.8.8 介绍与选型指南》、《Postal 3.3.7 介绍与选型指南》、本专栏《Ubuntu 22.04 安装 OpenSMTPD 指南》与《OpenSMTPD 7.9 配置参数详解》。