Postfix, aliases virtuais e catchall para endereços indefinidos


8

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:

postmaster@example.com account1
info@example.com       account1
sales@example.com      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

Respostas:


4

Se você incluir pegar todo o endereço de email no alias virtual, ele funcionará.

em main.cf:

 virtual_alias_maps = hash:/etc/postfix/virtual

em virtual:

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

Esta solução é a mais fácil de implementar e funciona conforme o esperado. Obrigado!
EdwardTeach

1
Nota: a final sem virtual_alias_maps.
FMCorz

3

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 é:

  1. Definir mydestination=localhost(que não é $myhostname)
  2. Adicione a catchall na parte superior do arquivo de alias virtual: @domain.com catchall-account@localhost
  3. Adicione todos os outros aliases virtuais abaixo: contact@domain.com contact@localhost

O exemplo supõe que você tenha usuários UNIX nomeados catchall-accounte contact. Os e-mails para contact@domain.com 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.


Em postfix.org/postconf.5.html#virtual_mailbox_maps , há a seguinte frase: "Em uma tabela de pesquisa, especifique o lado esquerdo de" @ domain.tld "para corresponder a qualquer usuário no domínio especificado que não tenha uma entrada específica "user@domain.tld". " - Eu acho que é semelhante em virtual_alias_maps, para que o pedido não faça nenhuma diferença
Daniel Alder

0

Tente configurar o seu mydestination = $myhostnamee verifique se o nome do host está configurado no main.cf, por exemplo myhostname = mail.example.com,.


Isso não mudou nada. O aviso ainda está lá e a mensagem ainda continua.
precisa

Você se importaria de colocar o restante do main.cf em questão?
12133 NickW
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.