Como tratar o alias externo com dspam como daemon entre postfix e dovecot com domínios virtuais?

5

Eu tenho a seguinte situação para mensagens recebidas com Postfix 2.9.6, DSpam 3.10.1 e Dovecot 2.1.7:

Incoming Mail -> SMTP -> LMTP -> DSpam (as daemon) -> LMTP -> Dovecot

Eu tenho domínios virtuais com caixas de correio virtuais. Tudo funciona bem até agora.

Um problema agora surge com aliases (virtuais?) que apontam para um domínio externo. Suponha que eu tenha os seguintes domínios virtuais:

virtualdomain1.com
virtualdomain2.com

para o qual estou manipulando e-mail. O servidor em si é executado em

mydomain.com

Se eu adicionar um alias agora que aponte para um domínio externo, por exemplo:

[email protected] -> [email protected]

então (até onde eu posso seguir o log), o DSpam verifica o e-mail, passa para o Dovecot via LMTP e o Dovecot rejeita o e-mail porque [email protected] é desconhecido (o que obviamente é verdade).

Então, como está a configuração correta para lidar com aliases para domínios virtuais? Se possível, também gostaria de verificar as mensagens recebidas para os alias virtuais.

O log de uma mensagem recebida para [email protected] é:

postfix/smtpd[23910]: connect from xxx.anyhost.com[1.2.3.4]
postfix/smtpd[23910]: NOQUEUE: filter: RCPT from xxx.anyhost.com[1.2.3.4]: <[email protected]>: Recipient address triggers FILTER lmtp:unix:/dspam/dspam.sock; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<anyhost.com>
postfix/smtpd[23910]: D91D0771AF70: client=xxx.anyhost.com[1.2.3.4]
postfix/cleanup[23917]: D91D0771AF70: message-id=<[email protected]>
postfix/smtpd[23910]: disconnect from xxx.anyhost.com[1.2.3.4]
postfix/qmgr[23278]: D91D0771AF70: from=<[email protected]>, size=1030, nrcpt=1 (queue active)
dovecot: lmtp(23920): Debug: none: root=, index=, control=, inbox=, alt=
dovecot: lmtp(23920): Connect from local
dovecot: lmtp(23920): Debug: Loading modules from directory: /usr/lib/dovecot/modules
dovecot: lmtp(23920): Debug: Module loaded: /usr/lib/dovecot/modules/lib90_sieve_plugin.so
dovecot: auth-worker(23921): mysql(127.0.0.1): Connected to database postfixadmin
dspam[9421]: Got error 550 in response to RCPT TO: 550 5.1.1 <[email protected]> User doesn't exist: [email protected]#015
dovecot: auth-worker(23921): sql([email protected]): unknown user
dovecot: lmtp(23920): Debug: auth input:
dovecot: lmtp(23920): Disconnect from local: Client quit (in RCPT TO)
postfix/lmtp[23918]: D91D0771AF70: to=<[email protected]>, orig_to=<[email protected]>, relay=mail.mydomain.com[/dspam/dspam.sock], delay=0.98, delays=0.47/0.01/0/0.5, dsn=5.3.0, status=bounced (host mail.mydomain.com[/dspam/dspam.sock] said: 530 5.3.0 <[email protected]> Fatal: 550 5.1.1 <[email protected]> User doesn't exist: [email protected] (in reply to end of DATA command))
postfix/cleanup[23917]: 149CB771AF72: message-id=<[email protected]>
postfix/bounce[23923]: D91D0771AF70: sender non-delivery notification: 149CB771AF72
postfix/qmgr[23278]: 149CB771AF72: from=<>, size=3182, nrcpt=1 (queue active)
postfix/qmgr[23278]: D91D0771AF70: removed
postfix/smtp[23925]: 149CB771AF72: to=<[email protected]>, relay=mx.mydomain.com[1.2.3.5]:25, delay=3.9, delays=0.26/0.01/0.09/3.6, dsn=2.0.0, status=sent (250 OK id=1YY9Ne-0007eJ-Hp)
postfix/qmgr[23278]: 149CB771AF72: removed

O postfix main.cf:     smtpd_banner = $ myhostname ESMTP $ mail_name (Debian / GNU)     biff = não

# appending .domain is the MUA's job.
append_dot_mydomain = no

readme_directory = no

# BECAUSE we use Dovecot for authentication we also use its certificates
smtpd_tls_cert_file=/etc/dovecot/dovecot.pem
smtpd_tls_key_file=/etc/dovecot/private/dovecot.pem
smtpd_use_tls=yes
smtpd_tls_auth_only = yes

#Handing off local delivery to Dovecot's LMTP, and telling it where to store mail
virtual_transport = lmtp:unix:private/dovecot-lmtp

#Virtual domains, users, and aliases
virtual_mailbox_domains = proxy:mysql:$config_directory/mysql_virtual_domains_maps.cf
virtual_mailbox_maps =
    proxy:mysql:$config_directory/mysql_virtual_mailbox_maps.cf,
    proxy:mysql:$config_directory/mysql_virtual_alias_domain_mailbox_maps.cf,
    proxy:mysql:$config_directory/mysql_virtual_alias_domain_catchall_maps.cf
virtual_alias_maps =
    proxy:mysql:$config_directory/mysql_virtual_alias_maps.cf,
    proxy:mysql:$config_directory/mysql_virtual_alias_domain_maps.cf
virtual_mailbox_limit = proxy:mysql:$config_directory/mysql_virtual_mailbox_limit_maps.cf

myhostname = mail.me.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = localhost, $myhostname
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 1000000000
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all

#Enabling SMTP for authenticated users, and handing off authentication to Dovecot
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes

smtpd_recipient_restrictions =
        permit_sasl_authenticated,
        permit_mynetworks,
        reject_unauth_destination,
        check_recipient_access pcre:/etc/postfix/dspam_filter_access,
        permit

O arquivo dspam_filter_access:

/./  FILTER lmtp:unix:/dspam/dspam.sock

Uma última nota: se eu comentar esta linha

#check_recipient_access pcre:/etc/postfix/dspam_filter_access,

tudo funciona bem, mas é claro sem verificação de spam.

    
por ralph 18.03.2015 / 10:13

2 respostas

2

Na configuração atual acima, tanto o dovecot quanto o dspam não podem redirecionar seu e-mail para o destino correto. Especialmente para o dovecot, ele só aceita o email com base na configuração do domínio.

A solução está alterando seu e-mail de entrega dspam setup de volta para o postfix depois de digitalizá-lo, em vez de enviá-lo para o dovecot. Com esta configuração, depois de varrer o motor de roteamento postfix irá redirecionar o seu e-mail

  • para o servidor de email externo, se o endereço do destinatário apontar para o domínio externo
  • para dovecot, se o endereço do destinatário corresponder ao seu domínio virtual

Em outras palavras

[ Outside ] --smtp--> [ Postfix ] --lmtp--> [ dspam ] --smtp--> [ postfix ] --> dovecot (if localdomain) or another mail server (if external domain)

Você pode configurá-lo como configuração dspam em este tutorial . Resumo das etapas

  1. Adicione o segundo listener smtpd do postfix em master.cf, por exemplo, localhost: 10026
  2. Em vez de usar dspam_filter_access para enviar e-mail para dspam, você pode usar o parâmetro content_filter
  3. Altere a configuração de Entrega {Host, Porta, Proto} no DSPAM para postfix segundo smtpd
  4. Desativar mapeamentos de endereço ( no_address_mappings ) content_filter e outra restrição no segundo smtpd
por 19.03.2015 / 02:04
0

Você pode ignorar a verificação DSPAM de aliases externos em conjunto.

Incoming Mail -> SMTP -> External address

Remova a linha check_recipient_access e configure o dspam como padrão virtual_transport:

virtual_transport = lmtp:unix:/dspam/dspam.sock

Economiza recursos e pula alguns saltos locais loucos. O e-mail provavelmente será verificado pelo spam no destino externo de qualquer maneira ...; -)

    
por 19.09.2015 / 10:01