Open Relay durch IPv4-only Konfiguration
Ok. Also jetzt ist es offiziell: Ich habe die “bloß-kein-IPv6” Konfiguration gemacht und daher bin ich zur SPAM-Schleuder geworden, obwohl man eine IPv6-IP besitzt und von außen erreichbar ist.
Nachzuvollziehen / Nachahmung für Interessierte:
- IPv6 deaktivieren wollen, wie hier https://docs.mailcow.email/de/post_installation/firststeps-disable_ipv6/ beschrieben
- Ich habe - der Vollständigkeithalber - docker v28.0.1
- Wenn man den docker-stack startet gibt es aber docker-proxy Prozesse, die von docker erstellt werden.
- Leider leiten diese auch den IPv6-Verkehr (den es nicht geben sollte) an die IPv4-Adresse weiter.
- Weil das NAT-ing dann nicht funktioniert, kommt die Anfrage nicht mit der ursprünglichen IPv6-Adresse bei Postfix an, sondern mit der Server-Adresse 172.22.1.1.
- Und Mails an diese Adresse werden evtl. angenommen, wenn im “From” Feld eine Adresse der Domäne (z.B. example.com) steht.
- Dass die Adresse im local-part nicht existieren muss (z.B. asdfasdf@example.com) reichte bei mir dennoch aus, um die E-Mail zu versenden.
- So wurde ich zur Spamschleuder. Selbst testen kann man das durch Verbindung mit der IPv6-Adresse des Servers.
Fehlerhafte konfiguration erkennen:
$ ip6tables -L
zeigt nichts an - dann ist die IPv6-Firewall nicht da
$ ps x | grep docker-proxy
sieht dann so aus:
106531 ? Sl 0:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 25 -container-ip 172.22.1.253 -container-port 25 -use-listen-fd
106538 ? Sl 0:00 /usr/bin/docker-proxy -proto tcp -host-ip :: -host-port 25 -container-ip 172.22.1.253 -container-port 25 -use-listen-fd
So kommt die ungewollte IPv6 -> IPv4 Übersetzung zustande.
Bot-Netze senden dann über IPv6 Anfragen, die im From-header eine random@meine-domain.de haben und auch im FROM-Feld und in TO-Feld eine beliebige Adresse als SPAM-Opfer. Beispiel folgt.
In meiner Konfiguration (evtl, weil ich eine catch-all Adresse hatte, aber es funktionierte auch ohne diese) wurden diese Mails angenommen und gerelayed.
Workarounds:
- Man kann dann nachträglich den docker-proxy mit “kill” abschießen und sieht, dass dann die Verbindungen abbrechen.
- Man kann in der mailcow.conf die Variablen “SMTP_PORT=0.0.0.0:25” etc. setzen, um so eine IPv4-Adressenbindung zu erzwingen
- Man kann (schlechteste Idee) in postfix/extra.cf
mynetworks = 127.0.0.0/8, !172.22.1.1, 172.22.1.0/24
setzen, man bemerke, dass auch hier die lokale IPv6 jetzt fehlt.
Lösung
Last but not least eine Beispiel-SPAM-Mail:
message_size: 46833 1406 10 0 46833 2
message_arrival_time: Mon May 26 16:54:16 2025
create_time: Mon May 26 16:54:16 2025
named_attribute: log_ident=B3C01A17578
named_attribute: rewrite_context=remote
sender: mgnxn@MEINEDOMAIN.DE
named_attribute: log_client_name=unknown
named_attribute: log_client_address=172.22.1.1
named_attribute: log_client_port=34538
named_attribute: log_message_origin=unknown[172.22.1.1]
named_attribute: log_helo_name=usa-studyabroad.net
named_attribute: log_protocol_name=ESMTP
named_attribute: client_name=unknown
named_attribute: reverse_client_name=unknown
named_attribute: client_address=172.22.1.1
named_attribute: client_port=34538
named_attribute: server_address=172.22.1.253
named_attribute: server_port=25
named_attribute: helo_name=usa-studyabroad.net
named_attribute: protocol_name=ESMTP
named_attribute: client_address_type=2
warning_message_time: Mon May 26 20:54:16 2025
named_attribute: dsn_orig_rcpt=rfc822;2356946096@qq.com
original_recipient: 2356946096@qq.com
recipient: 2356946096@qq.com
named_attribute: dsn_orig_rcpt=rfc822;277304392@qq.com
original_recipient: 277304392@qq.com
recipient: 277304392@qq.com
named_attribute: dsn_orig_rcpt=rfc822;389098992@qq.com
original_recipient: 389098992@qq.com
recipient: 389098992@qq.com
named_attribute: dsn_orig_rcpt=rfc822;3186959677@qq.com
original_recipient: 3186959677@qq.com
recipient: 3186959677@qq.com
named_attribute: dsn_orig_rcpt=rfc822;944313670@qq.com
original_recipient: 944313670@qq.com
recipient: 944313670@qq.com
named_attribute: dsn_orig_rcpt=rfc822;1584361833@qq.com
original_recipient: 1584361833@qq.com
recipient: 1584361833@qq.com
named_attribute: dsn_orig_rcpt=rfc822;1260069192@qq.com
original_recipient: 1260069192@qq.com
recipient: 1260069192@qq.com
named_attribute: dsn_orig_rcpt=rfc822;3556751840@qq.com
original_recipient: 3556751840@qq.com
recipient: 3556751840@qq.com
named_attribute: dsn_orig_rcpt=rfc822;1306469931@qq.com
original_recipient: 1306469931@qq.com
recipient: 1306469931@qq.com
named_attribute: dsn_orig_rcpt=rfc822;1611208482@qq.com
original_recipient: 1611208482@qq.com
recipient: 1611208482@qq.com
*** MESSAGE CONTENTS hold/B3C01A17578 ***
Received: from usa-studyabroad.net (unknown [172.22.1.1])
by server.MEINEDOMAIN.de (Postcow) with ESMTP id B3C01A17578;
Mon, 26 May 2025 16:54:16 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=MEINEDOMAIN.de; s=dkim;
t=1748271259; h=from:subject:date:message-id:content-type;
...
Authentication-Results: server.MEINEDOMAIN.de;
none
X-Priority: 3
Message-ID: <tencent_5DFF8FA7DC5A6EDD63C64E3A@MEINEDOMAIN.de>
From: 喜欢看小电影的臭哥哥入Q来细品哦5f2zd61<6tvs7g0@69829.cn>
Date: Mon, 26 May 2025 14:54:15 +0000
X-Mailer: QQMail 2.x
Subject: =?utf-8?B?6KOZ8J+RieOAkDg5NTAxOTE5MuOAkfCfkYjlrZAxNDo1NDox?=
=?utf-8?B?NQ==?=
X-QQ-MIME: TCMime 1.0 by Tencent
X-QQ-Mailer: QQMail 2.x
Content-Type: multipart/mixed;
boundary="2b78af36b36427c0e3358d30000e2351"
X-Last-TLS-Session-Version: None
X-Spam-Flag: YES
X-Spamd-Result: default: False [10.85 / 60.00];
URIBL_GREY(2.50)[sendgrid.net:url];
MISSING_TO(2.00)[];
MISSING_MIME_VERSION(2.00)[];
MIME_HEADER_CTYPE_ONLY(2.00)[];
SUSPICIOUS_URL_IN_SUSPICIOUS_MESSAGE(1.00)[];
R_NO_SPACE_IN_FROM(1.00)[];
MIME_HTML_ONLY(0.20)[];
BAD_WORDS(0.10)[];
MIME_GOOD(-0.10)[multipart/mixed];
MIME_BASE64_TEXT(0.10)[];
MANY_INVISIBLE_PARTS(0.05)[1];
REDIRECTOR_URL(0.00)[sendgrid.net];
MIME_TRACE(0.00)[0:+,1:~,2:~,3:~,4:~];
ARC_NA(0.00)[];
BCC(0.00)[];
DKIM_SIGNED(0.00)[MEINEDOMAIN.de:s=dkim];
FREEMAIL_ENVRCPT(0.00)[qq.com];
FROM_NEQ_ENVFROM(0.00)[6tvs7g0@69829.cn,mgnxn@MEINEDOMAIN.de];
FROM_HAS_DN(0.00)[];
RCVD_COUNT_ZERO(0.00)[0];
HAS_X_PRIO_THREE(0.00)[3];
CLAM_VIRUS_FAIL(0.00)[failed to scan and retransmits exceed];
OLETOOLS(0.00)[-----M--];
HAS_ATTACHMENT(0.00)[]
X-Rspamd-Queue-Id: B3C01A17578
X-Spam: Yes
...