Dies ist die archivierte Version des Blogs vom 05.01.2017. Aktuelle Beiträge findest du unter thomas-leister.de
 

Catch-All Aliase erlauben es, alle eingehenden E-Mails auf eine bestimmte Domain an ein oder mehrere einzelne Postfächer weiter zu leiten. Man kann sich das vorstellen wie einen Trichter: Egal an welches Postfach einer Domain eine E-Mail verschickt wird – sie landet letztendlich immer bei einer bestimmten definierten Adresse.

Das kann man sich zunutze machen, wenn man beispielsweise E-Mails an nicht (mehr?) existierende Postfächer abfangen und an ein einzelnes Sammelpostfach weiterleiten will.

Nach meiner Mailserver-Anleitung mit MySQL Backend würde ein Alias-Datensatz für so einen „Trichter“ z.B. so aussehen:

source: "@domain.com"
destination: "sammlung@meinkonto.de"

Das Problem hierbei ist: Es werden auch E-Mails umgeleitet, für die schon ein reales Postfach existiert. Das will man in vielen Fällen nicht. Es sollen nur E-Mails abgefangen werden, für die kein echtes Postfach existiert, auf das man via IMAP zugreifen kann. E-Mails an existierende Postfächer sollen vom Catch-All nicht betroffen sein.

Leider überprüft Postfix bei einem Catch-All nicht ob es ein passendes Postfach gibt, sodass zu einem Trick gegriffen werden muss:

Aliase haben die höchste Priorität. Beim Eingang einer Mail wird zuerst geprüft, ob ein passender Alias angewendet werden kann. Wenn ja, wird die E-Mail entsprechend weitergeleitet, wenn nein, wird nach einem passenden Postfach gesucht. Und genau hier liegt ja das Problem: Eigentlich würde man sich ja gerade eine umgekehrte Priorität wünschen.

Das Problem kann man umgehen, indem man zwar einen Catch-All Alias einrichtet, aber für jedes real existierende Postfach ebenfalls einen Alias auf sich selbst einrichtet. Das bedeutet: Für jedes Postfach auf dem Server wird zusätzlich ein solcher Alias erstellt:

(Update: Siehe auch einfachere Methode weiter unten!)

source: "user1@domain.tld"
destination: "user1@domain.tld"

Erhält der Nutzer user1 eine E-Mail, werden wieder zuerst die Aliase überprüft. Und ja, es gibt sogar zwei Aliase die auf diese Adresse passen: Einmal der Catch-All von „domain.tld“ – aber auch der Alias von „user1@domain.tld“ auf sich selbst. In diesem Fall gewinnt jedoch die genauere source-Definition: “ xyz@domain.tld“ hat immer Vorrang vor „@domain.tld“ hat. Da eine Alias-Überprüfung aber immer nur 1 mal stattfindet, landet die E-Mail nach der Alias-Umleitung im korrekten Postfach des Users.

Auf diese Weise kann erreicht werden, dass E-Mails an existierende Adressen ihr Ziel ordnungsgemäß erreichen und alle anderen E-Mails an die definierte Sammeladresse des Catch-Alls gehen.

Update (einfachere Methode)

Joshua Gleitze hat in den Kommentaren eine einfachere, weniger aufwendige Methode vorgeschlagen. Dabei werden die passenden Aliase zur Abfragelaufzeit dynamisch (und virtuell) erstellt, sodass man nicht mehr von Hand für jeden der Nutzer einen Alias auf sich selbst anlegen muss.

Der Catch-All Alias bleibt der selbe: Von „@domain.tld“ auf „sammlung@meinkonto.de“. Doch die Datenbankabfrage für Aliase (in /etc/postfix/virtual/mysql-aliases.conf) wird so geändert:

query = SELECT destination FROM aliases WHERE source='%s' UNION SELECT CONCAT(username, '@', domain) AS destination FROM users WHERE CONCAT(username, '@', domain)='%s'

Danke @ Joshua für diesen Vorschlag!


Post published on 27. November 2014 | Last updated on 21. Januar 2015
Tags:             

Diesen Blog unterstützen

Wenn Dir der Beitrag gefallen hat, freue ich mich über einen kleinen Obolus :-) Bitcoin QR Code

PayPal-Seite: https://www.paypal.me/ThomasLeister
Meine Bitcoin-Adresse: 15z8 QkNi dHsx q9WW d8nx W9XU hsdf Qe5B 4s

Siehe auch: Unterstützung

Informationen zum Autor

Thomas Leister

Geb. 1995, Kurzhaar-Metaller, Geek und Blogger. Nutzt seit Anfang 2013 ausschließlich Linux auf Desktop und Servern. Student der Automobilinformatik an der Hochschule für angewandte Wissenschaften in Landshut.

12 thoughts on “Postfix: Catch-All für nicht existierende Postfächer [Update]

  • Hallo Thomas,

    hier wird beschrieben wie man ohne die Adresse zweimal pflegen zu müssen einen Catch-all Account anlegt:
    https://workaround.org/ispmail/wheezy/connecting-postfix-to-the-database

    In Kürze:
    Du kannst für virtual_alias_maps= zwei *.cf Dateien anlegen, so dass er in beiden Tabellen (user & alias) sucht und dann das gefundene Ziel mit der höchsten Priorität (am besten passend) ausführt.

  • „Das kann man sich zunutze machen, wenn man beispielsweise E-Mails an nicht (mehr?) existierende Postfächer abfangen und an ein einzelnes Sammelpostfach weiterleiten will.“

    Oder wenn man sich jeweils mit „$Dienst@$Domain.tld“ Registriert.

    Bei Twitter z.B.: twitter@domain.tld
    Bei Facebook z.B: facebook@domain.tld

    So sieht man auch immer wer(!) Spam Mails sendet und kann später falls man z.B. Facebook nicht mehr braucht die „facebook@domian.tld“ ins leere führen lassen.

    Finde ich praktisch. :-)

  • Wie es weissertiger2 schon schrob: CatchAll ist perfekt für die Anmeldung bei fremden Webseiten. Wird eine fremde Datenbank gehackt, sieht man sofort, bei wem die Daten geklaut wurden.

  • So ein CatchAll lässt sich in deinem Setup recht einfach bauen, ohne für jeden User einen Alias auf sich selbst anlegen zu müssen.
    Für den User, der den Catchall empfängt, trägt man als Alias wie hier gezeigt

    source: "@domain.com"
    destination: "sammlung@meinkonto.de"

    ein.

    In der Datei /etc/postfix/virtual/mysql-aliases.conf ändert man dann die query-Zeile so:

    query = SELECT destination FROM aliases WHERE source='%s' UNION SELECT CONCAT(username, '@', domain) AS destination FROM users WHERE CONCAT(username, '@', domain)='%s'

    Das macht nichts anderes, als den Alias auf sich selbst virtuell einzufügen, wenn es den User gibt.

  • Joshua Gleitze Lösung funktioniert bestens. In meinen Augen macht es Sinn, diese Variante gleich oben zu übernehmen und die Beschreibung entsprechend anzupassen.

  • Wirklich hilfreiche Tutorials – haben mir bei der Servereinrichtung sehr gut geholfen! Eine kleine Anmerkung hätte ich noch: In deiner Mailserver-Anleitung (https://legacy.thomas-leister.de/internet/mailserver-ubuntu-server-dovecot-postfix-mysql/) legst du die config als mysql-aliases.cf an. In der Anleitung oben schreibst du mysql-aliases.conf. Evtl. magst du das noch anpassen.

  • Hallo Thomas,
    hallo zusammen,
    ich kann mich nur anschliessen, Deine HowTos sind klasse.
    Da meine mySQL und Postfix Kenntnisse nicht so gut sind, hänge ich fest.

    In Deiner Grundkonfiguration läuft das Zusammenspiel Postfix, Dovecot und
    MySQL fehlerfrei. Meine Erweiterung mit den Aliasen funktioniert leider nicht.

    Folgendes Szenario:
    Ich möchte alle Emails von dem ersten Mailserver (domain 1), die nicht
    zugeordnet werden können, an den zweiten Mailserver (Postfix, domain 2) weiterleiten.
    Das funktioniert schon, jedoch werden diese dann rejected.

    Ich habe die catch-all Anleitung benutzt und eine abgewandelte Variante probiert,
    leider erfolglos.

    Ich habe versucht, einem Benutzer auf Postfix (domain 2) per Alias der ersten
    Domäne zuzuweisen:name

    >>> insert into aliases (source, destination) values (‚alias1@domain_1.de‘, ‚benutzer@domain_2.de‘);

    Das funtioniert nicht und sie werden abgelehnt. Zurückzuführen ist das auf einem
    der nicht kompatiblen query Einträge in /etc/postfix/virtual/mysql-aliases.cf,
    mysql-aliases.cf und/oder mysql-domains.cf, denke ich.

    >>> Aug 24 11:00:58 postfixserver postfix/smtpd[11959]: NOQUEUE: reject:
    RCPT from Mailserver1.domain.local[192.168.x.x]: 454 4.7.1 : Relay access denied;
    from= to= proto=ESMTP helo=

    Wer,bitte, kann mir den richtigen mySQL String nennen, damit die Domain_1-Emails,
    die an Postfix (domain_2) weitergeleitet werden auch den richtigen Postfächern zu-
    geordnet werden? Muss „Transport“ ebenfalls angepasst werden und die domain_1 dort eingetragen werden?

    Oder bin ich falsch abgebogen und funktioniert das gar nicht, Aliase mit Domain_1 an
    domain_2 user zu zuweisen? Ich bitte um Eure Hilfe!

    Viele Grüße,
    non

  • Edit:

    >>> Aug 24 11:00:58 postfixserver postfix/smtpd[11959]: NOQUEUE: reject: RCPT from Mailserver1.domain.local[192.168.x.x]: 454 4.7.1 : Relay access denied; from= to= proto=ESMTP helo=

  • Habe soeben mithilfe deiner Tutorials und etwas Hilfe in einem Hilfeforum erfolgreich Postfix&Dovecot auf einem RPi aufgesetzt. Danke dafür!

    Da du immer auf der Suche nach freier Software bist: Ich empfehle Blender (3D Software).

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.