总结
我怎样才能欺骗我自己的 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 行。:-(
而且这这就是我们进行测试的原因,女士们,先生们。