![拒绝使用您自己的域作为发件人的来电邮件](https://linux22.com/image/657577/%E6%8B%92%E7%BB%9D%E4%BD%BF%E7%94%A8%E6%82%A8%E8%87%AA%E5%B7%B1%E7%9A%84%E5%9F%9F%E4%BD%9C%E4%B8%BA%E5%8F%91%E4%BB%B6%E4%BA%BA%E7%9A%84%E6%9D%A5%E7%94%B5%E9%82%AE%E4%BB%B6.png)
拒绝那些使用我的一个虚拟域作为发件人地址但不是我的合法用户的来电邮件就好了。
我知道我可以使用 拒绝使用现有别名/帐户名的来电电子邮件smtpd_sender_restrictions=reject_sender_login_mismatch
,但这仍然允许攻击者在我的某个虚拟域中使用不存在的电子邮件地址。(这在垃圾邮件检测方面是有利的)。
拒绝使用我的虚拟域之一且未经身份验证的传入邮件的最佳方法是什么?
已设置 SPF 和 DKIM,但由于邮件列表和转发存在问题,因此配置为 SoftFail。我并不是在寻找 SPF 或 DKIM,而是在寻找上述域的 MX 后缀服务器的解决方案。
答案1
我发现了两种可能的方法,但也许还有更好的方法。
第一种方法:
smtpd_sender_restrictions =
reject_sender_login_mismatch,
permit_sasl_authenticated,
permit
现在我修改了我的,如果域存在于域表中,则smtpd_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'
第二种方法:
这种方法使用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'
第三种方法(感谢马塞加洛):
smtpd_sender_restrictions =
reject_sender_login_mismatch,
permit_sasl_authenticated
reject_unlisted_sender,
permit
我不知道有多少 CPU 负载/SQL 查询拒绝未列出的发件人生成,因为它检查很多东西:
要求 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 不为空。
答案2
正确的做法是为您的域名设置 SPF,并在 MTA 中启用 SPF。这样,您不仅可以保护自己的域名伪造,还可以保护所有启用了 SPF 的其他域名。
答案3
您应该尝试实现以下至少一项(两项都实现更好):
答案4
这里描述的设置对我来说效果最好:
https://superuser.com/a/1148938/66217
配置端口587用于认证提交。
创建包含以下内容的 /etc/postfix/access:
mydomain.com REJECT
- 添加。
check_sender_access hash:/etc/postfix/access
smtpd_sender_restrictions