You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Ubuntu 24.04的OpenSMTPD 7.4.0p1-1build4中如何指定合法发件人域名

在Ubuntu 24.04的OpenSMTPD 7.4.0p1-1build4中如何指定合法发件人域名

老哥,我懂你的困扰——现在的配置虽说能拦住非授权域名的邮件,但错误提示完全不对头,明明是发件人域名不合法,却提示收件人无效。这是因为最后那条match from any reject是兜底规则,不管啥情况没匹配上就直接拒,没区分原因。咱们来调整配置,既能精准指定合法发件域名,还能给出正确的错误提示:

方法一:用表管理合法域名(推荐,方便后续维护)

  1. 先创建一个存放合法发件域名的文件,比如/etc/smtpd/allowed_senders,把你已验证的域名都加进去:
MyDomain.com
AnotherValidDomain.com  # 替换成你的其他合法域名
  1. 修改你的smtpd.conf,先定义这个表,再调整匹配规则:
table relay_secrets file:/etc/smtpd/relay_secrets
table allowed_senders file:/etc/smtpd/allowed_senders  # 新增这行

listen on localhost port 25 mask-src hostname MyDomain.com
listen on socket mask-src

action "relay_ses" relay host smtp+tls://ses@email-smtp.us-east-1.amazonaws.com:587 auth <relay_secrets>

# 先拦截非法发件域名,明确返回发件人错误
match from mail-from "@*" for any sender-domain not in <allowed_senders> reject text "Invalid sender domain: only authorized domains are allowed"

# 处理合法域名的邮件转发
match from mail-from "@*" for any sender-domain in <allowed_senders> action "relay_ses"

方法二:直接在规则里指定域名(适合域名少的情况)

如果你的合法域名不多,也可以不用表,直接写在规则里:

table relay_secrets file:/etc/smtpd/relay_secrets

listen on localhost port 25 mask-src hostname MyDomain.com
listen on socket mask-src

action "relay_ses" relay host smtp+tls://ses@email-smtp.us-east-1.amazonaws.com:587 auth <relay_secrets>

# 只允许指定域名的发件人转发
match from mail-from "@MyDomain.com,@AnotherValidDomain.com" for any action "relay_ses"

# 拦截其他所有发件,明确提示发件人错误
match from any reject text "Invalid sender domain: only authorized domains are allowed"

测试效果

调整完配置后,重启OpenSMTPD服务:

sudo systemctl restart opensmtpd

再测试的话:

  • 发件人是root@MyDomain.com的邮件会正常转发到SES,送到MyEmail@gmail.com
  • 发件人是root@Wrongdomain.com的邮件会被直接拦截,返回的错误提示会是Invalid sender domain,而不是之前的收件人错误,完全符合你的需求。

备注:内容来源于stack exchange,提问作者renegm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 09:09:39