Postfix, alias virtuels et catchall pour les adresses non définies


8

Dans Postfix 2.10.2, j'ai une configuration avec plusieurs domaines et plusieurs alias virtuels pour attribuer des adresses de messagerie aux utilisateurs locaux. Cela fonctionne très bien tant que je n'ajoute pas de fourre-tout.

Avant d'utiliser des alias virtuels, j'avais un fourre-tout défini avec

local_recipient_maps =
luser_relay = catchall

mais comme je dois trier les adresses e-mail de différents domaines, j'ai dû utiliser des alias virtuels.

Maintenant, postfix.org dit que je devrais le faire comme ceci, ce que j'ai fait:

/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

Mais si je le fais, l'adresse catchall saisit tout mon courrier au lieu de simplement le courrier vers des adresses non explicitement définies. Pourquoi cela et comment puis-je le changer?

J'ai fait du postmap virtuel et j'ai également redémarré Postfix. Il n'y a aucune erreur dans le journal, il enregistre simplement la livraison à l'adresse catchall. Et il y a un avertissement "ne pas lister le domaine example.com dans les deux mydestination et virtual_alias_domains", mais je ne l'ai pas fait! Je n'ai même pas de directive mydestination. (Il y en a un dans la configuration ci-dessous, mais j'ai ajouté cela après que NickW l'a suggéré.)

Voici ma conf complète:

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

Réponses:


4

Si vous incluez catch all email address dans l'alias virtuel, cela fonctionnera.

dans main.cf:

 virtual_alias_maps = hash:/etc/postfix/virtual

dans virtual:

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

Cette solution est la plus simple à implémenter et fonctionne comme prévu. Je vous remercie!
EdwardTeach

1
Remarque: la finale sen virtual_alias_maps.
FMCorz

3

Alors, je l'ai compris. Certaines personnes suggèrent que le fourre-tout doit être au-dessus du fichier d'alias virtuel, mais j'ai essayé cela auparavant et cela n'a pas aidé (bien que j'ai trouvé cette solution tout à fait logique).

Ce qui a fonctionné, c'est:

  1. Définir mydestination=localhost(ce n'est pas $myhostname)
  2. Ajoutez le catchall au-dessus du fichier d'alias virtuel: @domain.com catchall-account@localhost
  3. Ajoutez tous les autres alias virtuels ci-dessous: contact@domain.com contact@localhost

L'exemple suppose que vous avez des utilisateurs UNIX nommés catchall-accountet contact. Les courriers à contact@domain.com seront livrés à l'utilisateur contact tandis que tous les autres courriers seront livrés au compte fourre-tout.

Peut-être que ce n'est pas nécessaire dans tous les cas, mais dans mon cas spécial, je veux utiliser un compte pour enregistrer le courrier pour certaines adresses, mais le courrier envoyé directement à ce compte devrait se retrouver dans le fourre-tout.

Après tout, il semble que Postfix ne fonctionne pas dans les alias virtuels de haut en bas, et en outre, tous les fourre-tout ont une priorité particulière. Je serai heureux de recevoir d'autres commentaires au cas où quelqu'un serait en mesure d'expliquer ce comportement.


Dans postfix.org/postconf.5.html#virtual_mailbox_maps , il y a la phrase suivante: "Dans une table de recherche, spécifiez un côté gauche de" @ domain.tld "pour faire correspondre tout utilisateur du domaine spécifié qui n'a pas une entrée "user@domain.tld" spécifique. " - Je pense que c'est similaire dans virtual_alias_maps, afin que la commande ne fasse aucune différence
Daniel Alder

0

Essayez de régler votre mydestination = $myhostname, et assurez - vous que votre nom d' hôte est configuré dans main.cf, par exemple, myhostname = mail.example.com.


Cela n'a rien changé. L'avertissement est toujours là et le message passe toujours à la fourre-tout.
Konzertheld

Pourriez-vous mettre le reste de votre main.cf dans la question?
NickW
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.