Postfix, virtuelle Aliase und catchall für undefinierte Adressen


8

In Postfix 2.10.2 habe ich ein Setup mit mehreren Domänen und mehreren virtuellen Aliasnamen, um lokalen Benutzern E-Mail-Adressen zuzuweisen. Es funktioniert gut, solange ich keinen Catchall hinzufüge.

Bevor ich virtuelle Aliase verwendete, hatte ich einen Catchall definiert mit

local_recipient_maps =
luser_relay = catchall

Da ich jedoch E-Mail-Adressen aus verschiedenen Domänen sortieren musste, musste ich virtuelle Aliase verwenden.

Jetzt sagt postfix.org , ich sollte es so machen, was ich getan habe:

/etc/postfix/main.cf:

virtual_alias_domains = example.com
virtual_alias_maps = hash:/etc/postfix/virtual

/ etc / postfix / virtual:

postmaster@example.com account1
info@example.com       account1
sales@example.com      account2
@example.com         catchall

In diesem Fall erfasst die Gesamtadresse jedoch alle meine E-Mails und nicht nur die E-Mails an nicht explizit definierte Adressen. Warum ist das so und wie ändere ich es?

Ich habe Postmap virtuell gemacht und auch Postfix neu gestartet. Das Protokoll enthält keine Fehler. Es protokolliert lediglich die Lieferung an die Gesamtadresse. Und es gibt eine Warnung "Domain example.com nicht in BEIDEN mydestination und virtual_alias_domains auflisten", aber das habe ich nicht getan! Ich habe nicht einmal eine Mydestinationsrichtlinie. (Es gibt eine in der Konfiguration unten, aber ich habe sie hinzugefügt, nachdem NickW dies vorgeschlagen hatte.)

Hier ist meine komplette Konf:

alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
append_dot_mydomain = no
biff = no
broken_sasl_auth_clients = yes
config_directory = /etc/postfix
home_mailbox = Maildir/
inet_interfaces = all
inet_protocols = all
mailbox_command = /usr/lib/dovecot/deliver -c /etc/dovecot/dovecot.conf -m "${EXTENSION}"
mailbox_size_limit = 0
mydestination = $myhostname
myhostname = mydomain.com
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
myorigin = /etc/mailname
readme_directory = no
recipient_delimiter = +
relayhost =
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtp_use_tls = yes
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
smtpd_recipient_restrictions = reject_unknown_sender_domain, reject_unknown_recipient_domain, reject_unauth_pipelining, permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
smtpd_sasl_auth_enable = yes
smtpd_sasl_authenticated_header = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_path = private/dovecot-auth
smtpd_sasl_security_options = noanonymous
smtpd_sasl_type = dovecot
smtpd_sender_restrictions = reject_unknown_sender_domain
smtpd_tls_auth_only = yes
smtpd_tls_cert_file = /etc/dovecot/dovecot.pem
smtpd_tls_key_file = /etc/dovecot/private/dovecot.pem
smtpd_tls_mandatory_ciphers = medium
smtpd_tls_mandatory_protocols = SSLv3, TLSv1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_use_tls = yes
tls_random_source = dev:/dev/urandom
virtual_alias_domains = $myhostname, myotherdomain.com
virtual_alias_maps = hash:/etc/postfix/virtual

Antworten:


4

Wenn Sie die Option zum Abrufen aller E-Mail-Adressen in den virtuellen Alias ​​aufnehmen, funktioniert dies.

in main.cf:

 virtual_alias_maps = hash:/etc/postfix/virtual

in virtual:

user1@example.com           user1@example.com
user2@example.com           user2@example.com
...
catchall@example.com        catchall@example.com
@example.com                catchall@example.com

Diese Lösung ist am einfachsten zu implementieren und funktioniert wie erwartet. Vielen Dank!
EdwardTeach

1
Hinweis: das Finale sin virtual_alias_maps.
FMCorz

3

Also habe ich es herausgefunden. Einige Leute schlagen vor, dass das Catch-All über der virtuellen Alias-Datei liegen muss, aber ich habe das zuvor versucht und es hat nicht geholfen (obwohl ich diese Lösung ziemlich logisch fand).

Was funktioniert hat ist:

  1. Set mydestination=localhost(das ist nicht $myhostname)
  2. Fügen Sie den Catchall über der virtuellen Aliasdatei hinzu: @domain.com catchall-account@localhost
  3. Fügen Sie alle anderen virtuellen Aliase unten hinzu: contact@domain.com contact@localhost

In diesem Beispiel wird davon ausgegangen, dass Sie UNIX-Benutzer mit den Namen catchall-accountund haben contact. E-Mails an contact@domain.com werden an den Kontaktbenutzer gesendet, während alle anderen E-Mails an das Sammelkonto gesendet werden.

Möglicherweise ist dies nicht in allen Fällen erforderlich, aber in meinem speziellen Fall möchte ich ein Konto verwenden, um E-Mails für einige Adressen zu speichern. E-Mails, die direkt an dieses Konto gesendet werden, sollten jedoch im Sammelbegriff landen.

Es sieht so aus, als würde Postfix nicht von oben nach unten durch die virtuellen Aliase funktionieren, und außerdem haben Catch-Alls eine besondere Priorität. Ich freue mich über weitere Kommentare, falls jemand dieses Verhalten tatsächlich erklären kann.


In postfix.org/postconf.5.html#virtual_mailbox_maps gibt es den folgenden Satz: " Geben Sie in einer Nachschlagetabelle eine linke Seite von" @ domain.tld "an, die mit jedem Benutzer in der angegebenen Domäne übereinstimmt, der keine hat einen bestimmten "user@domain.tld" -Eintrag. " - Ich denke, dass es in virtual_alias_maps ähnlich ist, so dass die Reihenfolge überhaupt keinen Unterschied macht
Daniel Alder

0

Versuchen Sie mydestination = $myhostname, Ihren festzulegen, und stellen Sie sicher, dass Ihr Hostname beispielsweise in main.cf konfiguriert ist myhostname = mail.example.com.


Das hat nichts geändert. Die Warnung ist immer noch da und die Nachricht geht immer noch an catchall.
Konzertheld

Würde es Ihnen etwas ausmachen, den Rest Ihrer main.cf in die Frage zu stellen?
NickW
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.