Ich muss eine Mailserverkonfiguration für eine Testumgebung einrichten, die alle E-Mails (also von allen Benutzern und allen Domänen, auch nicht lokalen) akzeptiert und in einem einzigen lokalen Catchall-Postfach ablegt.
Was ich habe, ist SLES 11 mit Sendmail (8.14), wo ich versucht habe, /etc/mail/virtusertable so zu ändern, dass es aussieht wie
@ catchall
oder wie
@* catchall
aber ohne Erfolg - Ziel-Mail-Adressen (zB"[email geschützt]") werden nicht umgeschrieben inSammelbegriff@, daher wird die Zustellung an den entsprechenden MX versucht:
# sendmail -bt
ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
Enter <ruleset> <address>
> 3,0 [email protected]
canonify input: santa @ northpole . org
Canonify2 input: santa < @ northpole . org >
Canonify2 returns: santa < @ northpole . org . >
canonify returns: santa < @ northpole . org . >
parse input: santa < @ northpole . org . >
Parse0 input: santa < @ northpole . org . >
Parse0 returns: santa < @ northpole . org . >
ParseLocal input: santa < @ northpole . org . >
ParseLocal returns: santa < @ northpole . org . >
Parse1 input: santa < @ northpole . org . >
MailerToTriple input: < > santa < @ northpole . org . >
MailerToTriple returns: santa < @ northpole . org . >
Parse1 returns: $# esmtp $@ northpole . org . $: santa < @ northpole . org . >
parse returns: $# esmtp $@ northpole . org . $: santa < @ northpole . org . >
Es scheint, als würden Platzhalter im Quelldomänenteil der Nachschlagetabelle nicht unterstützt.
Wie würde ich dies mit Sendmail implementieren?
Bearbeiten:GemäßAndrzejs KommentareIch habe versucht, einen Mailertable-Eintrag von
. local:catch-all-outgoing
sowie
.. local:catch-all-outgoing
und erhielt sendmail -bv
in beiden Fällen die gleiche Ausgabe:
# sendmail -d60.5 -bv [email protected]
map_lookup(dequote, root, %0=root) => NOT FOUND (0)
map_lookup(host, example.net, %0=example.net) => example.net. (0)
[email protected]... deliverable: mailer esmtp, host example.net., user [email protected]
(ja, root, da sendmail
es als Nicht-Root nicht lauffähig scheint)
Bearbeiten:Es stellte sich heraus, dass die Funktion „Mailertable“ in der Makrodatei nicht aktiviert war und sendmail.cf daher nicht die entsprechenden Umschreibregeln enthielt, damit die Funktion funktionierte.
Antwort1
Was Sie hier erwartet: /etc/mail/virtusertable
Ich glaube, es ist nur auf eingehende E-Mails beschränkt, nicht auf ausgehende.
Sie können die Standardroute in Mailertable oder SMART_HOST verwenden, um alle nicht lokalen Nachrichten an ein lokales Postfach/einen lokalen Alias zuzustellen.
mailertable entry:
. local:catch-all-outgoing
aliases:
catch-all-outgoing: some-local-account
Jeder LHS-Eintrag, der nicht mit einem Punkt beginnt, stimmt mit dem angegebenen vollständigen Hostnamen überein. LHS-Einträge, die mit einem Punkt beginnen, stimmen mit allem überein, was mit diesem Domänennamen endet (einschließlich des führenden Punkts). Das heißt, man kann sie sich so vorstellen, als ob sie ein führendes „.+“-Regular-Ausdrucksmuster für eine nicht leere Zeichenfolge hätten.
Die rechte Seite sollte immer ein „Mailer:Host“-Paar sein. Der Mailer ist der Konfigurationsname eines Mailers (also eine M-Zeile in der Datei sendmail.cf). Der „Host“ ist der Hostname, der an diesen Mailer übergeben wird.
(Referenz:sendmail readme, Abschnitt „VERWENDUNG VON MAILERTABLES“)
Also so etwas wie:
. local:catch-all-outgoing
(nur ein einziger Punkt gemäßAdrzejs Kommentar) in /etc/mail/mailertable sollte dazu führen, dass jede Domain.tld auf die lokale Mailer-Konfiguration umgeleitet wird, die in sendmail.cf definiert ist. Dabei erfasst der Alias den Hostnamen catch-all-outgoing
und macht ihn zu einer lokalen E-Mail-Adresse.
Damit die Mailertable funktioniert, muss sie in der Konfiguration aktiviert werden. Hinzufügen
FEATURE(`mailertable',`hash -o /etc/mail/mailertable.db')dnl
zur M4-Makrodatei, die Ihre Konfiguration generiert, sollte dies erledigen.
Auch aus den Hilfedateien der Sendmail-Site:
MAILERTABELLE:
Fügen Sie eine „Mailer-Tabelle“ hinzu, mit der das Routing für bestimmte Domänen überschrieben werden kann(die nicht in Klasse {w} sind, also lokale Hostnamen). Das Argument des FEATURE kann die Schlüsseldefinition sein. Wenn keine angegeben ist, wird die folgende Definition verwendet:
Hash /etc/mail/mailertable
Schlüssel in dieser Datenbank sind vollständig qualifizierte Domänennamen oder Teildomänen, denen ein Punkt vorangestellt ist, beispielsweise „vangogh.CS.Berkeley.EDU“ oder „.CS.Berkeley.EDU“.Als Sonderfall des Letzteren stimmt „.“ mit jeder Domäne überein, die nicht von anderen Schlüsseln abgedeckt wird.Die Werte müssen folgende Form haben: Mailer:Domain
wobei „Mailer“ der interne Mailername und „Domäne“ der Ort ist, an den die Nachricht gesendet werden soll. Diese Zuordnungen werden nicht in den Nachrichtenkopf übernommen.Als Sonderfall wird die Form: local:user an den angegebenen Benutzer mit dem lokalen Mailer weitergeleitet,
Antwort2
Sendmail: Catchall für lokale und nicht lokale Adressen
SMART_HOST
Sie können nicht lokale Domänen und MAIl_HUB
lokale E-Mail-Domänen definieren .
sendmail.mc:
define(`SMART_HOST',`local:some_existing_user')dnl
define(`MAIL_HUB',`local:some_existing_user')dnl
dnl optional part to list local users/mailboxes excluded from the redirect
dnl in /etc/mail/direct-users file (one user per line)
LOCAL_CONFIG
FL/etc/mail/direct-users
divert(0)
PS
Verwenden Sie echo '$=w' | sendmail -bt
diese Option, um eine Liste lokaler E-Mail-Domänen abzurufen. Sendmail füllt diese standardmäßig automatisch aus.
Mailertable kann verwendet werden, um einige externe Domänen von der Umleitung auszuschließen
example.net %0