拒绝使用我的虚拟域名之一作为发件人地址的传入电子邮件,而不是我的合法用户将是很好的。
我知道,我可以使用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)映射时,它总是被认为是“已知的”。
还有另外一种不带联合的单独查询方法:
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一项(两者都更好):