Postfix, aliases virtuais e catchall para endereços indefinidos

8

No Postfix 2.10.2, tenho uma configuração com vários domínios e vários alias virtuais para atribuir endereços de email a usuários locais. Ele funciona bem, desde que eu não adicione um catchall.

Antes de usar aliases virtuais, eu tinha um catchall definido com

local_recipient_maps =
luser_relay = catchall

mas, como preciso classificar endereços de e-mail de diferentes domínios, tive que usar aliases virtuais.

Agora postfix.org diz que eu deveria fazer assim, o que eu 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 pegará todos os meus e-mails, em vez de apenas o e-mail, para endereços não explicitamente definidos. Por que isso e como eu mudo isso?

Eu fiz o postmap virtual e também reiniciei o Postfix. Não há erros no log, ele apenas registra a entrega no endereço catchall. E há um aviso "não liste o domínio exemplo.com em ambos mydestination e virtual_alias_domains", mas eu não fiz isso! Eu nem tenho uma diretiva mydestination. (Há um na configuração abaixo, mas eu adicionei depois que NickW sugeriu isso.)

Aqui está minha conf completa:

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
    
por Konzertheld 12.12.2013 / 14:06

3 respostas

2

Então, eu percebi isso. Algumas pessoas sugerem que o catch-all tem que estar no topo do arquivo de alias virtual, mas eu tentei isso antes e não ajudou (embora eu achasse essa solução bastante lógica).

O que funcionou é:

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

O exemplo pressupõe que você tenha usuários UNIX chamados catchall-account e contact . Os e-mails para [email protected] serão entregues ao usuário de contato, enquanto todos os outros e-mails serão entregues na conta catch-all.

Talvez isso não seja necessário em todos os casos, mas, no meu caso especial, quero usar uma conta para salvar e-mails de alguns endereços, mas os e-mails enviados diretamente para essa conta devem acabar no resumo geral.

Afinal, parece que o Postfix não está funcionando nos aliases virtuais de cima para baixo e, além disso, os catch-alls têm alguma prioridade especial. Ficarei feliz em receber mais comentários caso alguém seja realmente capaz de explicar esse comportamento.

    
por 12.12.2013 / 23:25
4

Se você incluir todos os endereços de e-mail no alias virtual, ele funcionará.

em main.cf :

 virtual_alias_maps = hash:/etc/postfix/virtual

em virtual :

[email protected]           [email protected]
[email protected]           [email protected]
...
[email protected]        [email protected]
@example.com                [email protected]
    
por 03.06.2015 / 13:13
0

Tente definir seu mydestination = $myhostname e verifique se seu nome de host está configurado em main.cf, por exemplo, myhostname = mail.example.com .

    
por 12.12.2013 / 14:53

Tags