在Ubuntu 24.04的OpenSMTPD 7.4.0p1-1build4中如何指定合法发件人域名
在Ubuntu 24.04的OpenSMTPD 7.4.0p1-1build4中如何指定合法发件人域名
老哥,我懂你的困扰——现在的配置虽说能拦住非授权域名的邮件,但错误提示完全不对头,明明是发件人域名不合法,却提示收件人无效。这是因为最后那条match from any reject是兜底规则,不管啥情况没匹配上就直接拒,没区分原因。咱们来调整配置,既能精准指定合法发件域名,还能给出正确的错误提示:
方法一:用表管理合法域名(推荐,方便后续维护)
- 先创建一个存放合法发件域名的文件,比如
/etc/smtpd/allowed_senders,把你已验证的域名都加进去:
MyDomain.com AnotherValidDomain.com # 替换成你的其他合法域名
- 修改你的
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
相关产品推荐
相关产品推荐

