No Postfix 2.10.2, eu tenho uma configuração com vários domínios e vários aliases virtuais para atribuir endereços de email a usuários locais. Funciona bem desde que eu não adicione um catchall.
Antes de usar aliases virtuais, eu tinha um conjunto definido com
local_recipient_maps =
luser_relay = catchall
mas como eu preciso resolver os endereços de email de domínios diferentes, tive que usar aliases virtuais.
Agora o postfix.org diz que devo fazer assim, o que fiz:
/etc/postfix/main.cf:
virtual_alias_domains = example.com
virtual_alias_maps = hash:/etc/postfix/virtual
/ etc / postfix / virtual:
[email protected] account1
[email protected] account1
[email protected] account2
@example.com catchall
Mas, se eu fizer isso, o endereço catchall agarra todos os meus emails em vez de apenas os endereços não explicitamente definidos. Por que é isso e como faço para mudar?
Eu fiz o postmap virtual e também reiniciei o Postfix. Não há erros no log, apenas registra a entrega no endereço completo. E existe um aviso "não liste o domínio example.com nos dois destinos e virtual_alias_domains", mas eu não fiz isso! Eu nem sequer tenho uma diretiva de destino. (Há um na configuração abaixo, mas eu adicionei isso depois que NickW sugeriu isso.)
Aqui está o meu conf completo:
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
s
emvirtual_alias_maps
.Então, eu descobri. Algumas pessoas sugerem que o catch-all deve estar no topo do arquivo de alias virtual, mas eu tentei isso antes e não ajudou (apesar de achar a solução bastante lógica).
O que funcionou é:
mydestination=localhost
(que não é$myhostname
)@domain.com catchall-account@localhost
[email protected] contact@localhost
O exemplo supõe que você tenha usuários UNIX nomeados
catchall-account
econtact
. Os e-mails para [email protected] serão entregues ao usuário do contato, enquanto todos os outros emails serão entregues à conta geral.Talvez isso não seja necessário em todos os casos, mas, no meu caso especial, desejo usar uma conta para salvar emails em alguns endereços, mas os emails enviados diretamente para essa conta devem acabar no catch-all.
Afinal, parece que o Postfix não está funcionando nos aliases virtuais de cima para baixo e, além disso, catch-alls tem alguma prioridade especial. Ficarei feliz em mais comentários, caso alguém seja capaz de explicar esse comportamento.
fonte
Tente configurar o seu
mydestination = $myhostname
e verifique se o nome do host está configurado no main.cf, por exemplomyhostname = mail.example.com
,.fonte