在向 Sendmail 添加新的 DNSBL 后,如何重新提交电子邮件以查看它是否会被拒绝?

在向 Sendmail 添加新的 DNSBL 后,如何重新提交电子邮件以查看它是否会被拒绝?

总结

我怎样才能欺骗我自己的 sendmail,让它认为电子邮件来自特定的 IP 地址,以便它因 DNSBL 匹配而拒绝该消息?

细节:

我运行自己的邮件服务器,大多数垃圾邮件都被我添加到 /etc/mail/sendmail.mc 的 DNS 黑名单 (DNSBL) 阻止,如下所示:

dnl FEATURE(`dnsbl',`dnsbl.sorbs.net',`"554 Rejected " $&{client_addr} " found in dnsbl.sorbs.net"')dnl
dnl FEATURE(`dnsbl',`b.barracudacentral.org',`"554 Rejected " $&{client_addr} " found in b.barracudacentral.org"')dnl

今天收到了一些垃圾邮件(通过了所有测试),经过检查MX 工具箱DNSBL 信息可以看到,添加几个 DNSBL 中的一个就可以阻止这个特定的垃圾邮件。

因此,我添加了另一个 DNSBL,现在我想通过将此电子邮件重新提交给 Sendmail 来测试它,但问题就在这里:它不是来自正确的 IP 地址,并且 DNSBL 不会将其视为坏的。

这是我通常使用的命令:

formail -s /usr/sbin/sendmail -oi -t < testmail.mbox

在我尝试重新发明轮子之前,我想先在这里问一下。可能的想法:

  • sendmail 是否有一个 CLI 选项可以伪造源 IP?
  • 也许制作一个排队消息文件并将其直接放入队列中?
  • 也许在我的计算机上设置另一个 IP 地址,然后用它发送给我自己?
  • OpenVPN 或 SSH 隧道可以快速解决问题吗?
  • 可能会加载共享库来拦截系统调用,例如LibFakeTime
  • Dtrace 看起来很强大,它可以像这样改变 getsockopt(2) 调用吗?

谢谢!

答案1

经过一番思考后,解决方案变得很简单:

ssh my-mail-server

# Add 1.2.3.4 as an alias (eth1:0) to interface eth1:
sudo ifconfig eth1:0 1.2.3.4 netmask 255.255.255.255

# Use 1.2.3.4 as the source ip, connect to port 25 on the local host:
nc -s 1.2.3.4 0.0.0.0 25

HELO 1.2.3.4
MAIL FROM: [email protected]
RCPT TO: [email protected]
DATA
Subject: is this really from 1.2.3.4?

Test from 1.2.3.4
.
QUIT
^C

# Deleting 1.2.3.4 from eth1:
sudo ifconfig eth1:0 0.0.0.0

瞧,最终的标题是:

Return-Path: <[email protected]>
Received: from 1.2.3.4 ([1.2.3.4] (may be forged))
    by earth.com (8.15.2/8.15.2) with SMTP id 1731SlYY013775
    for <[email protected]>; Mon, 2 Aug 2021 18:29:14 -0700
Authentication-Results:the-force.com; dkim=permerror (bad message/signature format)
Date: Mon, 2 Aug 2021 18:28:47 -0700
From: <[email protected]>
Message-Id: <[email protected]>
Subject: Test subject

它还显示 IP 地址未被阻止(DNSBL 不起作用?),因此从这个意义上说,测试是成功的。:-/

更新:哎呀!sendmail.mc 中的行应改为如下形式:

FEATURE(`dnsbl',`dnsbl.sorbs.net',`"554 Rejected " $&{client_addr} " found in dnsbl.sorbs.net"')dnl
FEATURE(`dnsbl',`b.barracudacentral.org',`"554 Rejected " $&{client_addr} " found in b.barracudacentral.org"')dnl

换句话说,前面的“dnl”注释掉了所有 DNSBL 行。:-(

而且这就是我们进行测试的原因,女士们,先生们。

相关内容