Kurz zusammengefasst
Wie kann ich mein eigenes Sendmail täuschen, sodass es denkt, eine E-Mail käme von einer bestimmten IP-Adresse, sodass es die Nachricht aufgrund einer DNSBL-Übereinstimmung ablehnt?
Einzelheiten:
Ich betreibe meinen eigenen Mailserver und der meiste Spam wird durch die DNS-Blacklists (DNSBL) blockiert, die ich wie folgt zu /etc/mail/sendmail.mc hinzugefügt habe:
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
Heute ist Spam reingekommen (der alle Tests bestanden hat) und nach der ÜberprüfungMX-WerkzeugkastenUndDNSBL-Informationenkonnte sehen, dass das Hinzufügen einer von mehreren DNSBLs diesen bestimmten Spam blockiert hätte.
Also habe ich einen weiteren DNSBL hinzugefügt und möchte ihn nun testen, indem ich diese E-Mail erneut an Sendmail sende. Aber genau darin besteht das Problem: Sie kommt nicht von der richtigen IP-Adresse und der DNSBL erkennt sie nicht als fehlerhaft an.
Hier ist der Befehl, den ich normalerweise verwendet hätte:
formail -s /usr/sbin/sendmail -oi -t < testmail.mbox
Bevor ich versuche, das Rad neu zu erfinden, dachte ich, ich frage erst einmal hier nach. Mögliche Ideen:
- Gibt es eine CLI-Option für Sendmail, um die Quell-IP vorzutäuschen?
- Vielleicht eine Datei mit Warteschlangennachrichten erstellen und diese direkt in die Warteschlange stellen?
- Vielleicht eine andere IP-Adresse auf meinem Rechner einrichten und mir damit selbst senden?
- Wäre ein OpenVPN- oder SSH-Tunnel eine schnelle Lösung?
- Möglicherweise könnte eine gemeinsam genutzte Bibliothek geladen werden, um Systemaufrufe abzufangen, à laLibFakeTime?
- Dtrace sieht leistungsstark aus. Kann es getsockopt(2)-Aufrufe auf diese Weise ändern?
Danke!
Antwort1
Nachdem ich eine Nacht darüber geschlafen hatte, stellte sich heraus, dass die Lösung trivial war:
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
Voilà, der resultierende Header:
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
Außerdem stellte sich heraus, dass die IP-Adresse nicht blockiert war (DNSBL funktioniert nicht?). Insofern war der Test also erfolgreich. :-/
Update: D'oh! Die Zeilen in sendmail.mc sollten stattdessen so lauten:
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
Mit anderen Worten, das „dnl“ auf der Vorderseite hat alle DNSBL-Zeilen auskommentiert. :-(
UuuundDasist der Grund, warum wir testen, meine Damen und Herren.