長話短說
如何欺騙我自己的 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 是否有用於偽造來源 IP 的 CLI 選項?
- 也許製作一個排隊訊息檔案並將其直接放入隊列中?
- 也許在我的機器上設定另一個IP位址,然後用它發送給我自己?
- OpenVPN 或 SSH 隧道可以快速解決問題嗎?
- 可能可以載入共享庫來攔截系統調用,à la庫假時間?
- 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 行。 :-(
啊啊啊這女士們先生們,這就是我們進行測試的原因。