要約
自分の 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 のうちの 1 つを追加すると、この特定のスパムがブロックされることがわかりました。
そこで、別の DNSBL を追加し、この電子メールを Sendmail に再送信してテストしたいのですが、そこに問題があります。正しい IP アドレスから送信されていないため、DNSBL はそれを悪いものとして認識しません。
通常使用するコマンドは次のとおりです。
formail -s /usr/sbin/sendmail -oi -t < testmail.mbox
車輪の再発明を試みる前に、まずここで質問してみようと思いました。考えられるアイデア:
- 送信元 IP を偽装するための sendmail の CLI オプションはありますか?
- キューに入れられたメッセージ ファイルを作成し、それを直接キューに入れることは可能でしょうか?
- 自分のマシンに別の IP アドレスを設定し、それを使って自分自身に送信するというのはどうでしょうか?
- OpenVPN または SSH トンネルは簡単な解決策でしょうか?
- おそらく、共有ライブラリをロードしてシステムコールを傍受することも可能だろう。リブフェイクタイム?
- 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 行すべてをコメント アウトしていました。:-(
そしてこれそれが私たちがテストをする理由です、皆様。