postfix dovecot desabilitar lmtp

5

Eu tenho 3 servidores. 1 servidor MX com postfix e 2 servidores dovecot. O servidor MX recebe e-mails e os atende por meio do LMTP para um servidor dovecot específico. Todas as caixas de correio do mesmo domínio estão no mesmo servidor.

Existe alguma maneira de desativar temporariamente o LMTP e de diferenciar mensagens para um domínio específico? Por exemplo, no caso de migração de domínios entre servidores dovecot.

No postfix eu uso o transport_maps

transport_maps = mysql:/etc/postfix/sql/transport.cf

Com esta consulta

 query = SELECT concat('lmtp:',servers.address, ':24') FROM servers
         JOIN domains ON (domains.server_id=servers.ID)
         WHERE domains.name LIKE SUBSTRING_INDEX("%s", "@", -1)
         LIMIT 1;

O Dovecot está escutando o lmtp na porta 24, user_query no dovecot é

user_query = SELECT 1
        FROM domains
        JOIN mailboxes ON (domains.ID=mailboxes.domain_id)
        WHERE
            domains.name LIKE '%d'
            AND mailboxes.name LIKE '%n'
            AND domains.server_id='X'
        LIMIT 1;

Eu verifiquei a página man dovecot user_query, mas não há nada que possa me ajudar ( link e link )

Eu tentei adicionar condição a user_query "AND domains.enable_lmtp = 1" , mas o servidor postfix passou o email para servidor dovecot e o servidor dovecot retornou ao erro do remetente "O usuário não existe ".

Em seguida, tentei adicionar a mesma condição à consulta do servidor no servidor postfix. Consulta não retornou nada (nenhum lugar para transportar), o email foi excluído e no log disse

postfix/virtual[724]: fatal: bad string length 0 < 1: virtual_mailbox_base =
postfix/master[32263]: warning: process /usr/libexec/postfix/virtual pid 724 exit status 1
postfix postfix/master[32263]: warning: /usr/libexec/postfix/virtual: bad command startup -- throttling

Eu esperava que o postfix colocasse mensagens na fila adiada, mas isso não aconteceu. Mensagens foram apagadas. O mesmo ocorreu quando mudei o servidor de transporte para um endereço inexistente.

Então estou fazendo algo errado? Existe alguma maneira de resolver meu problema?

Meu postconf -n

alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
config_directory = /etc/postfix
content_filter = smtp-amavis:[127.0.0.1]:10024
mydestination = $myhostname, localhost.$mydomain, localhost
smtpd_client_restrictions = permit_mynetworks, reject_unknown_client_hostname, reject_unknown_reverse_client_hostname
smtpd_helo_restrictions = permit_mynetworks, reject_invalid_hostname, reject_non_fqdn_hostname,
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination, reject_unknown_recipient_domain, reject_non_fqdn_recipient, check_policy_service unix:/var/spool/postfix/postgrey/socket, check_policy_service unix:private/recipient_restrictions
smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, defer_unauth_destination
smtpd_sender_restrictions = permit_mynetworks, reject_non_fqdn_sender, reject_unknown_sender_domain
smtpd_tls_cert_file = /etc/postfix/smtpd.cert
smtpd_tls_key_file = /etc/postfix/smtpd.key
smtpd_tls_loglevel = 0
smtpd_tls_received_header = yes
smtpd_use_tls = yes
transport_maps = mysql:/etc/postfix/sql/transport.cf
unknown_local_recipient_reject_code = 550
virtual_mailbox_domains = mysql:/etc/postfix/sql/mailbox_domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/sql/mailbox_maps.cf
    
por FuF 16.04.2015 / 11:36

1 resposta

5

Esse problema pode ser resolvido pelo postfix ou pelo dovecot.

  1. No dovecot, você deve definir o serviço LMTP para responder com rejeição temporária 4XX (para o seu domínio "especial") quando o postfix enviar um email.
  2. No postfix, você precisa configurar o postfix, então ele deve adiar o email se o domínio do destinatário corresponder ao seu domínio "especial".

A opção 1 não é possível porque, ao contrário de postfix-dovecot, não pode ser configurado para emitir o erro de tempfail para determinado domínio. Veja a discussão em [Dovecot] Configuração do código de rejeição do LMTP .

Para a opção 2 , você precisa transportar o domínio "especial" para um endereço que não esteja funcionando, por exemplo, você pode entregá-lo à porta fechada no servidor LMTP . Para isso, você precisa do segundo transport_maps com uma consulta como essa

#/etc/postfix/sql/transport-defer.cf

query = SELECT concat('lmtp:',servers.address, ':2424') FROM servers
        JOIN domains ON (domains.server_id=servers.ID)
        WHERE domains.name LIKE SUBSTRING_INDEX("%s", "@", -1)
        AND domains.enable_lmtp != 1
        LIMIT 1;

Na consulta acima, eu uso a porta 2424 como porta fechada para manter o postfix adiando a mensagem.

Em seguida, coloque-o ao lado de mysql:/etc/postfix/sql/transport.cf

#main.cf
transport_maps = mysql:/etc/postfix/sql/transport.cf mysql:/etc/postfix/sql/transport-defer.cf

PS: como você não tem caixa de correio no servidor pós-fixada, seria preferível usar relay_domains e relay_recipient_maps para substituir virtual_mailbox_domains e virtual_mailbox_maps . Consulte a documentação da classe de domínio de retransmissão .

    
por 17.04.2015 / 09:48