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

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

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

什么是拒绝使用我的虚拟域之一,没有被authentication的传入邮件的最好方法呢?

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

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

第一种方法:

 smtpd_sender_restrictions = reject_sender_login_mismatch, permit_sasl_authenticated, permit 

现在我修改了我的smtpd_sender_login_maps来返回admin一个条目,如果该域存在于域的表中。 这样,即使邮件地址不存在maibox /别名,但是当外部地址是发件人地址时,也会返回logging。

 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' 

第二种方法:

此方法使用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 

mysql_reject_virtual_domains.cf

 table = domain query = select 'Reject 530 SMTP authentication is required' from domain where domain = '%d' 

第三种方法(感谢masegaloeh ):

 smtpd_sender_restrictions = reject_sender_login_mismatch, permit_sasl_authenticated reject_unlisted_sender, permit 

我不知道有多lesscpu加载/ SQL查询reject_unlisted_sender生成,因为它检查了很多事情:


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

当一个地址匹配一个虚拟(5)别名或一个规范(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不为空。

还有另外一种不带联合的单独查询方法:

 virtual_sender_mailbox_maps.cf query = SELECT '%s' AS email FROM domains WHERE name='%d' AND active=TRUE main.cf smtpd_sender_login_maps = ${proxysql}virtual_sender_mailbox_maps.cf smtpd_sender_restrictions = reject_sender_login_mismatch, permit_sasl_authenticated, permit 

正确的方法是为您的域设置SPF,并在MTA中启用SPF。 那么你不仅可以保护你自己的域名,还可以保护所有其他启用了SPF的域名。

您应该尝试实施以下至less一项(两者都更好):

  • SPF:项目概述
  • DomainKeys Identified Mail(DKIM)