拒绝使用您自己的域作为发件人的传入电子邮件

Zul*_*kis 7 email smtp postfix

拒绝使用我的虚拟域之一作为发件人地址但不是我的合法用户的传入电子邮件会很好。

我知道我可以拒绝使用现有别名/帐户名的传入电子邮件,smtpd_sender_restrictions=reject_sender_login_mismatch但是这仍然允许攻击者在我的虚拟域之一中使用不存在的电子邮件地址。(这在垃圾邮件检测方面受到青睐)。

拒绝使用我的虚拟域之一且未经身份验证的传入邮件的最佳方法是什么?

由于邮件列表和转发问题,SPF 和 DKIM 已设置但配置为 SoftFail。我不是在寻找 SPF 或 DKIM,而是寻找作为上述域的 MX 的后缀服务器的解决方案。

Zul*_*kis 10

我找到了两种可能的方法,但也许有更好的方法。

第一种方法:

smtpd_sender_restrictions =
    reject_sender_login_mismatch,
    permit_sasl_authenticated,
    permit
Run Code Online (Sandbox Code Playgroud)

现在我修改了 mysmtpd_sender_login_maps以返回admin域表中是否存在域的条目。这样,即使电子邮件地址不作为邮箱/别名存在,也会返回记录,但不会在外部域是发件人地址时返回。

table = domain
query = SELECT username AS allowedUser FROM mailbox WHERE username="%s" AND deleted_at IS NULL \
UNION SELECT goto FROM alias WHERE address="%s" AND active = 1 \
UNION select 'admin' from domain where domain = '%d'
Run Code Online (Sandbox Code Playgroud)

方法二:

这种方法使用一种check_sender_access查找,如果域是虚拟域而用户不是,则该查找返回拒绝操作sasl_authenticated

smtpd_sender_restrictions =
    reject_sender_login_mismatch,
    permit_sasl_authenticated,
    check_sender_access proxy:mysql:$config_directory/mysql_reject_virtual_domains.cf,
    permit
Run Code Online (Sandbox Code Playgroud)

mysql_reject_virtual_domains.cf

table = domain
query = select 'Reject 530 SMTP authentication is required' from domain where domain = '%d'
Run Code Online (Sandbox Code Playgroud)

第三种方法(感谢masegaloeh):

smtpd_sender_restrictions =
    reject_sender_login_mismatch,
    permit_sasl_authenticated
    reject_unlisted_sender,
    permit
Run Code Online (Sandbox Code Playgroud)

我不知道reject_unlisted_sender生成了多少cpu-load/SQL 查询,因为它会检查很多东西:


请求 Postfix SMTP 服务器拒绝来自未知发件人地址的邮件,即使没有reject_unlisted_sender指定明确的访问限制。这可以减缓来自蠕虫或病毒的伪造邮件的爆发。

当地址与 virtual(5) 别名或 canonical(5) 映射匹配时,它总是被认为是“已知的”。

  • 发件人域与 $mydestination、$inet_interfaces 或 $proxy_interfaces 匹配,但发件人未在 $local_recipient_maps 中列出,并且 $local_recipient_maps 不为空。
  • 发件人域与 $virtual_alias_domains 匹配,但发件人未在 $virtual_alias_maps 中列出。
  • 发件人域与 $virtual_mailbox_domains 匹配,但发件人未在 $virtual_mailbox_maps 中列出,并且 $virtual_mailbox_maps 不为空。
  • 发件人域匹配 $relay_domains 但发件人未在 $relay_recipient_maps 中列出,并且 $relay_recipient_maps 不为空。