Skip to content

Exim: Mailauslieferung über IPv4 erzwingen

Man munkelt, dass insbesondere Google eingehende E-Mails unterschiedlich streng filtert, je nachdem, ob sie per IPv6 oder per IPv4 eingeliefert werden.

Google selbst deutet das in seinen Bulk Senders Guidelines durch den Abschnitt Additional guidelines for IPv6 an, und ich hatte verschiedentlich den Eindruck, dass E-Mail, die ich an Adressaten bei Google (GMail, Hosting, …) versende, dort jedenfalls nicht in der Inbox landet. Für Mails an GoogleGroups - die u.a. Mailinglisten mit einem Webinterface und Webarchiv darstellen - kann ich das sogar positiv belegen: versende ich E-Mails über IPv6 nach dort, werden sie zwar lt. Logfile angenommen, dann aber offensichtlich ausgefiltert. Jedenfalls erscheinen sie nie in der GoogleGroup, auch nach mehreren Versuchen und mehreren Tagen nicht. Versende ich dieselbe Mail aber über IPv4, trifft sie binnen Sekunden ein.

Ein solches Vorgehen mag sinnvoll erscheinen (immerhin kann ein Spammer IPv6-Adressen - im Gegensatz zum knappen IPv4-Adressarum - vermutlich wochenlang wechseln wie andere Leute ihre Unterhosen, so dass RBLs da wenig helfen), aber es macht die Sache für denjenigen, der Mail an Google loswerden will, nicht einfacher.

Die Lösung mag in einer Änderung der Konfiguration liegen; so soll es helfen, passende SPF-Einträge hinzuzufügen und die Mails mit DKIM zu signieren, aber damit muss ich mich zunächst näher beschäftigen, und ob das dann auch wirklich hilft, weiß ich dann noch immer nicht. Was das Problem aber definitiv - jedenfalls derzeit - löst, ist die Mailauslieferung über IPv4.

Exim bietet dafür verschiedene Lösungsmöglichkeiten:

  • Man kann IPv6 komplett abdrehen, indem man im Hauptteil der Konfiguration ein beherztes disable_ipv6 = true einfügt. Das will man aber vermutlich nicht.

  • Man kann Exim vorgeben, dass er für bestimmte Domains nur A-Records, also IPv4-DNS-Einträge, berücksichtigen soll, indem man im Hauptteil der Konfiguration die Option dns_ipv4_lookup mit einer entsprechenden Domainliste versogt, bspw. dns_ipv4_lookup = google.com : gmail.com : googlemail.com : googlegroups.com. Das wäre eine Möglichkeit; ich bin mir aber nicht sicher, ob sich dabei nicht Seiteneffekte ergeben, d.h. die Folgen nicht nur auf die Mailauslieferung beschränkt sind.

Eigentlich will ich ja nur, dass MX-Einträge ignoriert werden, die auf einen Host zeigen, der eine IPv6-Adresse hat, bzw. bei Hosts mit mehreren A- und AAAA-Records die letzteren ignoriert werden. Und glücklicherweise geht auch das.

Es genügt, einen neuen Router zu erstellen (und zwar vor dem Router, der normalerweise für die Auslieferung externer Mail zuständig ist, defaultmäßig dnslookup):

# This router routes remote addresses using ipv4 hosts only

ipv4_only:
  driver = dnslookup
  domains = +ipv4_forced_domains
  transport = remote_smtp
  ignore_target_hosts = <; 0::0/0

Dort kann man entweder die betreffenden Domains fest verdrahten, oder man löst es (wie hier) über eine Domainliste namens ipv4_forced_domains, die dann im Hauptteil der Konfiguration noch entsprechend definiert werden muss:

domainlist ipv4_forced_domains = /etc/exim4/domains-send-ipv4

In der Datei /etc/exim4/domains-send-ipv4 finden sich dann alle Domains, an deren MXe nur per IPv4 ausgeliefert werden soll, jeweils eine pro Zeile.

Ein Test bestätigt den Erfolg. Vorher:

# exim -bt postmaster@google.com
postmaster@google.com
  router = dnslookup, transport = remote_smtp
  host aspmx.l.google.com      [2a00:1450:400c:c06::1b] MX=10
  host aspmx.l.google.com      [64.233.184.26]          MX=10
  host alt1.aspmx.l.google.com [2a00:1450:4010:c07::1a] MX=20
  host alt1.aspmx.l.google.com [64.233.164.26]          MX=20
  host alt2.aspmx.l.google.com [2404:6800:4003:c02::1b] MX=30
  host alt2.aspmx.l.google.com [74.125.68.26]           MX=30
  host alt3.aspmx.l.google.com [2404:6800:4008:c02::1a] MX=40
  host alt3.aspmx.l.google.com [74.125.23.26]           MX=40
  host alt4.aspmx.l.google.com [2607:f8b0:400e:c00::1b] MX=50
  host alt4.aspmx.l.google.com [173.194.202.26]         MX=50

Nachher:

# exim -bt postmaster@google.com
postmaster@google.com
  router = ipv4_only, transport = remote_smtp
  host aspmx.l.google.com      [64.233.184.26]  MX=10
  host alt1.aspmx.l.google.com [64.233.164.26]  MX=20
  host alt2.aspmx.l.google.com [74.125.68.26]   MX=30
  host alt3.aspmx.l.google.com [74.125.23.26]   MX=40
  host alt4.aspmx.l.google.com [173.194.202.26] MX=50

Voilà.

Die Idee ist natürlich nicht von mir, sondern aus dem Exim-Wiki: How to force IPv4 connections for specific domains if IPv6 is enabled Ich habe sie allerdings etwas angepasst und vereinfacht.

Abschließend die Frage: Hat schon jemand Erfahrungen damit gemacht, SPF-Einträge und vor allem DKIM-Signaturen für eine Vielzahl potentieller Absenderdomains zu pflegen (und - bzgl. DKIM - mit Exim zu konfigurieren)? Ich stelle mir das nicht so ganz einfach vor.

Trackbacks

Keine Trackbacks

Kommentare

Ansicht der Kommentare: Linear | Verschachtelt

gregoa am :

gregoa

ich versend an google auch nur via ipv4, mittels dns_ipv4_lookup (keine bekannten nebenwirkungen). - SPF records helfen meiner erfahrung nach nichts, die mails wurden nach wie vor mit einem link auf die allgemeinen FAQ abgelehnt.

Kommentar schreiben

HTML-Tags werden in ihre Entities umgewandelt.
Markdown-Formatierung erlaubt
Standard-Text Smilies wie :-) und ;-) werden zu Bildern konvertiert.
BBCode-Formatierung erlaubt
Gravatar, Favatar, Pavatar, Twitter, Identica, Identicon/Ycon Autoren-Bilder werden unterstützt.
Formular-Optionen
tweetbackcheck