假设 Postfix 邮件服务正在为域提供服务@mycompany.com
。本地网络是 192.168.10.0/24。来自 Internet 的攻击者发送一封电子邮件,假装它来自@mycompany.com
:
Received: from mycompany.com (unknown [37.139.129.8])
by mycompany.com (Postfix) with ESMTP id 967DB396B598
for <[email protected]>; Mon, 14 Aug 2023 19:36:39 +0200 (CEST)
From: [email protected]
To: [email protected]
是否有任何选项可以拒绝From: *@mycompany.com
来自mynetworks
(192.168.10.0/24)的电子邮件?我会考虑添加
/^From: .*@mycompany\.com/ REJECT Invalid sender address
但这/etc/postfix/header_checks
将阻止所有此类电子邮件,无论源 IP 是什么,而其目的是允许来自的客户端mynetworks
。
欢迎任何进一步的想法或建议。
答案1
这样做的必要性表明您没有实施现有的电子邮件欺骗控制来保护您的域名免受全球滥用,并且您smtpd
对入站和出站邮件使用同一个实例。
正确的解决方案包括:
- 部署 DKIM 和 SPF。
- 使用 部署 DMARC 策略
p=reject
。 - 在主机上配置 OpenDMARC 以拒绝入站的伪造邮件。
- 使用单独的
smtpd
实例作为提交(smtps
)用于出站邮件。
如果你从#4开始,那么你已经可以使用header_checks
正如您所建议的,但是在完成#1、#2 和#3 之后,这将变得没有必要。
保护信封发件人通过允许来自受信任 IP 地址的邮件,然后拒绝其余的发件人域,可以防止欺骗。
hash:
使用(Berkeley DB)的解决方案表类型:
smtpd_recipient_restrictions =
. . .
permit_mynetworks,
check_sender_access hash:/etc/postfix/access/sender_access,
permit
并且在/etc/postfix/access/sender_access
:
example.com 550 YOU ARE NOT ME.
这需要postmap /etc/postfix/access/sender_access
修改后运行!
另一个解决方案需要Postfix PCRE 支持但是更加灵活,因为它可以将整个 TLD 列入黑名单。
smtpd_recipient_restrictions =
. . .
permit_mynetworks,
check_sender_access pcre:/etc/postfix/access/sender_access,
permit
并且在/etc/postfix/access/sender_access
:
/example\.com$/ 550 YOU ARE NOT ME.
/\.loan$/ 550 .loan? no thanks, we have money.