我的邮箱运行的是centos的postfix2.6,
总是收到如下垃圾邮件:
Delivered-To: [email protected]
Received: from outlook.com (unknown [118.219.111.157])
by mail.ourcompany.com (Postfix) with SMTP id 47DC91E3C
for <[email protected]>; Fri, 1 Sep 2017 22:19:42 (UTC)
Received: from outlook.com (unknown (1.0.0.0])
by outlook.com with SMTP id 5067aad2-a74f-47a7-8929-79dbc3db9aed;
for <[email protected]>;Fri, 01 Sep 2017 22:19:38
Message-ID: <[email protected]>
From: "=?utf-8?money?=" <[email protected]>
很明显[email protected]
是假的,而且118.219.111.157
是未知的,
如何利用postfix本身来拒收这种垃圾邮件?
答案1
看一眼Postfix SMTP 中继和访问控制 README
你可以这样做smtpd_recipient_restrictions
. 有几种检测方法可以识别假冒无效域名以及发件人和收件人地址中的主机名以及HELO
主机名:
smtpd_recipient_restrictions =
. . .
reject_invalid_hostname,
reject_non_fqdn_sender,
reject_unknown_sender_domain,
reject_non_fqdn_recipient,
reject_unknown_recipient_domain,
. . .
为了阻止未经授权使用现有域名, 您可以使用发件人策略框架(SPF)。发送服务器不一定与PTR
域匹配,域也不一定有IP 地址记录,因为 IP 地址A
用于接收邮件而不是发送邮件。例如,ISP 可以在同一个 MTA 上处理数百个域。SPF 通过列出域的允许、中立和禁止发送 MTA 来解决此问题。这就是为什么您应该执行测试来判断 MTA 是否被允许。MX
MX
SPF 需要外部策略服务。测试添加如下smtpd_recipient_restrictions
:
check_policy_service unix:private/policy-spf,
HowtoForge 有一篇关于如何在 Postfix 中实现 SPF,继续此操作。
您使用了[email protected]
以下示例。outlook.com
具有 SPF 记录,并且 IP 地址118.219.111.157
属于 即~all
。SOFTFAIL
您可以决定对 s 采取多大的积极态度SOFTFAIL
,因为 SPF 本身定义了仅-
应直接拒绝 。
另一方面,IP 地址欺骗发件人域可能已在某些 DNS RBL 上被列入黑名单,您可以决定使用以下方法添加一些黑名单reject_rbl_client
。这个特定的 IP 似乎只在 Servicesnet 中被列入黑名单:
Servicesnet,即韩国网络阻止列表,列出了韩国的 IP 地址范围,以及已被确定为垃圾邮件发送者的旧 ARIN 范围。
但是,如果你不应该收到来自韩国的邮件,你可以使用这个列表。在我的个人邮件服务器上,所有中国 IP 都被拒绝550 Thank you for supporting Free Tibet.
,因为我只收到来自中国的垃圾邮件。(这甚至不是我列表中最粗鲁的例子check_sender_access
。)
答案2
有没有 postfix 函数可以检查[电子邮件保护]是118.219.111.157吗?如果不是,我认为我们找不到完美的解决方案。
这正是 SPF 记录所做的。
答案3
您还可以在服务器上配置 DMARC,除了 SPF,它还会创建如下标头:
Authentication-Results: name; dmarc=fail (p=reject dis=none) header.from=the_real_domain_that_some_phishing_mail_tries_to_imitate
当域的策略为拒绝时,您可以使用 Postfix 配置文件 main.cf 中 pcre 的 header_checks 参数检查此标头,以拒绝带有此类标头的邮件。
例子 :
header_checks pcre:/etc/postfix/header_checks
然后在文件 /etc/postfix/header_checks 中:
/^Authentication-Results: [^;]+; dmarc=fail \(p=reject/ DISCARD optional text to store into the log like blocked
或者如果你想要退回给发件人
/^Authentication-Results: [^;]+; dmarc=fail \(p=reject/ REJECT optional text to send with rejection
我个人不会这么做,因为根据 DMARC,仍有一些 ESP 发送不受信任的邮件,但这些邮件仍然是合法的。我更喜欢使用 spamassassin 规则,保留邮件但将其直接存储到 JUNK 中。
spamassassin 规则示例:
header CUST_DMARC_FAIL_REJECT Authentication-Results =~ /dmarc=fail \(p=reject/
score CUST_DMARC_FAIL_REJECT 20.0