smtpd
概述
OpenSMTPD 是 OpenBSD 默认的邮件传输代理(MTA),以 smtpd(8) 守护进程形式实现,设计上安全、简洁,适用于多种场景,包括本地投递、中继、经过身份验证的提交以及为虚拟域接收邮件。
本章介绍如何配置 smtpd(8) 以应对常见和高级场景,包括 TLS、过滤以及通过 opensmtpd-extras 支持的附加模块。
功能特性
默认安全,采用权限分离与合理的默认设置
投递至系统用户的本地邮箱
通过身份验证的提交或 smarthost 中继
完整的 IPv6 与 TLS 支持
过滤与地址重写
虚拟用户/虚拟域支持
与
filter-*插件及 extras 软件包集成
启用 smtpd
要在系统启动时启用并启动 smtpd 服务:
# rcctl enable smtpd
# rcctl start smtpd守护进程将从 /etc/mail/smtpd.conf 读取配置。
基本配置
启用本地投递与外发邮件的最简 smtpd.conf(5) 文件如下:
此配置:
仅监听环回接口
定义一个本地邮箱投递动作和一个出站中继动作
允许本地用户向其他本地用户发信
通过 DNS 将本地用户的外发邮件中继到其他系统
应用更改:
接收来自互联网的邮件
接收外部邮件:
此示例:
定义监听器使用的证书与密钥
在外部接口上启用 TLS 监听
接收发往
example.org域的互联网邮件投递到收件人主目录下的
~/Maildir
使用 TLS 时,须将有效证书放置在 /etc/mail/certs/ 下:
确保权限正确:
然后在 smtpd.conf 中通过 pki 块定义证书:
通过 Smarthost 发送外发邮件
通过远程邮件服务器(如 ISP 或上游中继)中继所有外发邮件:
在 /etc/mail/secrets 中定义身份验证凭据:
保护该文件:
虚拟域与虚拟用户
接收发往未映射到系统用户的域的邮件,可使用虚拟别名:
定义虚拟映射表
创建 /etc/mail/virtuals:
将其转换为可用表:
更新 smtpd.conf
邮件过滤
filter 块可对入站邮件进行简单而有效的过滤。示例包括:
灰名单
启用基本灰名单:
阻止特定发件人或地址
创建表:
内容如下:
然后:
通过 opensmtpd-extras 过滤
安装附加插件:
此软件包包含:
filter-rspamd:与 Rspamd 集成filter-clamav:与 ClamAV 集成filter-dkimsign:用 DKIM 为外发邮件签名filter-dnsbl:DNS 黑名单检查
DKIM 签名示例:
本地投递选项
OpenSMTPD 可投递到 mbox(传统邮箱格式)或 maildir(每封邮件一个文件格式)。在 action 中设置方式,并在 match 规则中选用:
确保主目录中包含相应的 Maildir/ 或 mbox。
管理命令
使用 smtpctl(8) 管理邮件系统:
显示已处理邮件数、已处理会话数等统计信息。
列出邮件队列。
立即尝试发送所有排队邮件。
从队列中移除指定邮件。
启用详细日志以便调试。
日志与排错
日志写入 /var/log/maillog。跟踪日志以获取实时更新:
获取更多诊断信息:
以调试模式运行 smtpd,输出详细信息。
关键配置文件一览
/etc/mail/smtpd.conf
smtpd 主配置文件
/etc/mail/secrets
中继主机的身份验证凭据
/etc/mail/virtuals
虚拟用户映射(若使用)
/etc/mail/certs/
TLS 证书与密钥存放处
/etc/mail/aliases
本地用户别名(通过 newaliases)
对 smtpd.conf 或相关表的任何更改都需重新加载:
最后更新于