我在 OpenBSD 上运行 OpenSMTPD,同时还运行 spamd、spampd 和 spamassassin、DKIMproxy 和 dovecot。我的设置是处理服务器上的本地电子邮件和我的域的(外部)电子邮件。我的设置似乎正在运行(仍处于测试阶段)。我很高兴能够使用一个 17 行(不包括注释和空格)的 opensmtpd.conf 文件来实现我的设置。但是,有几件事我不满意。我希望有人可以建议如何解决这些问题:
在构建设置时,我最初没有 spampd / spamassessin。在该配置中,只有一个“accept”命令接收电子邮件并发送到 dovecot。OpenSMTPD 服务器检查收件人地址是否存在,如果不存在则返回错误 550 并不允许提交电子邮件。这很好。
在我整合 spampd 和 spamassassin 之后,‘accept’ 命令会拾取传入的电子邮件并转发给 spampd(它运行 spamassassin)。在 spampd / spamassasin 处理之后,该邮件会被另一个 OpenSMTP accept 命令拾取并传送给 dovecot。虽然这种方法有效,但还是存在一些不良副作用,如果不加以解决,将导致漏洞:
1) spampd / spamassassin 将处理发往我域的所有邮件,以及发往该域中不存在的收件人的邮件。Spampd/spamassassion 并不是“轻松”的任务。这些因素共同增加了 DOS 攻击的可能性。
2) 首先接受所有发往我域的邮件。如果有未知收件人,则只有在 spampd / spamassassin 处理后才会检测到。一旦检测到未知收件人,邮件守护程序就会向发件人发送一封传递状态电子邮件,说明收件人未知。这样攻击者就可以使用我的服务器向任何有效收件人发送垃圾邮件,方法是向我的服务器发送电子邮件,发件人为任何有效的电子邮件地址,收件人为我域上的任何无效收件人。
问题:
- 有没有什么方法可以配置 OpenSMTPD,使其立即拒绝未知收件人(即作为初始提交给 OpenSMTPD 的一部分),即使合并了 spampd / spamassassin?
- 有什么方法可以让服务器不向不存在的收件人发送拒绝消息
亲切的问候,
答案1
在新的 opensmtpd 6.4+ 语法中,我也对此感到疑惑。目前我有一个包含我所有域的文件,并且我刚刚制定了一条规则,确保我只会收到来自我的域的电子邮件。这允许可能不存在的用户接收消息,从而导致退回消息。
table vdoms "/mail/db/vdomains"
...
match from any for domain <vdoms> action your_spam_filter_action
要限制您的用户,您需要有一个包含所有有效电子邮件地址的表格,然后将其用于rcpt-to
匹配器。这可能会重复您在其他别名/用户表格中已有的一些信息。
假设您有一张/etc/mail/addrs
表:
[email protected]
[email protected]
[email protected]
你smtpd.conf
需要
table addrs "/mail/db/addrs"
...
...
match from any for rcpt-to <addrs> action your_spam_filter_action
现在,opensmtp 将根据命令拒绝电子邮件,而不是接受它然后发送退回。RCPT TO: <[email protected]>