Parar (mais) entrega local no Postfix

2

Estou tentando configurar uma configuração do Postfix (2.11.4) para que isso seja feito:

  1. Envia e-mails originados do servidor local
  2. Aceita e-mails de entrada para um único alias, o que na verdade aponta para um script
  3. E nada mais

Aqui está um main.cf parcial:

mydomain               = example.com
inet_interfaces        = all
inet_protocols         = all
mydestination          = $myhostname, localhost.$mydomain, localhost
alias_maps             = hash:/etc/postfix/aliases
alias_database         = hash:/etc/postfix/aliases
relayhost              = outbound.example.com
allow_mail_to_commands = alias,forward,include
allow_mail_to_files    = alias,forward,include
luser_relay            = [email protected]

Para o nº 1, o e-mail gerado no servidor para algué[email protected] é enviado automaticamente para "outbound.example.com" para processamento. E para o número 2, eu tenho isso em / etc / postfix / aliases, então mensagens para "[email protected]" podem ser processadas por um script Perl

robot: | "/usr/local/bin/robomail.pl"

Até aí tudo bem. É # 3 que está me dando problemas.

Veja, este servidor usado para executar o Sendmail com o mascaramento de domínio ativado. E ainda existem alguns aplicativos neste servidor (que eu não controlam) que enviam e-mail para apenas "george" (por exemplo) e esperam que o servidor converta isso automaticamente para "george @ example .com ", que é encaminhado para" outbound.example.com "para entrega.

Eu tentei corrigir isso configurando uma diretiva luser_relay :

luser_relay = [email protected]

Esse tipo de trabalho - quando a entrega local para "george" falha, o Postfix irá reescrevê-lo para [email protected]

Mas se "george" for realmente uma conta válida no servidor (ou seja, listada em / etc / passwd), o Postfix aceitará a mensagem e a entregará em um diretório local, em vez de reescrever o endereço e encaminhá-lo.

Eu posso resolver isso fazendo outra entrada / etc / postfix / aliases:

george: [email protected]

Mas isso obviamente não é escalável quando o servidor tem dezenas de contas de usuários locais, com mais sendo adicionadas o tempo todo. E da melhor maneira que eu posso dizer a partir da documentação, não há equivalente wildcard para / etc / postfix / aliases. Caso contrário, eu gostaria de fazer algo assim:

robot: | "/usr/local/bin/robomail.pl"
*: *@example.com

Existe alguma maneira no Postfix de fazer isso? Aceitar e-mail para "robô", mas encaminhar todo o resto para "outbound.example.com" para entrega (adicionando o @ exemplo.com, se necessário)?

UPDATE: Alguns detalhes do postconf e o log de uma mensagem enviada de "root" para "george" no servidor local:

myhostname = myserver.example.com
myorigin = $myhostname
masquerade_domains = 

Mar 23 14:07:26 myserver postfix/pickup[12851]: D2B4A4763D: uid=0 from=<root>
Mar 23 14:07:26 myserver postfix/cleanup[19630]: D2B4A4763D: message-id=<[email protected]>
Mar 23 14:07:26 myserver postfix/qmgr[29583]: D2B4A4763D: from=<[email protected]>, size=323, nrcpt=1 (queue active)
Mar 23 14:07:26 myserver postfix/local[19632]: D2B4A4763D: to=<[email protected]>, orig_to=<george>, relay=local, delay=0.04, delays=0.02/0/0/0.02, dsn=2.0.0, status=sent (delivered to mailbox)
Mar 23 14:07:26 myserver postfix/qmgr[29583]: D2B4A4763D: removed
    
por George Adams 23.03.2015 / 16:53

1 resposta

2

Nos registros, o processo domínio mascarado reescreve o remetente e o destinatário de something para [email protected] . O culpado por trás dessa reescrita é paramater myorigin e append_at_myorigin . Como os documentos postfix disseram

append_at_myorigin (default: yes)

With locally submitted mail, append the string "@$myorigin" to mail addresses without domain information. With remotely submitted mail, append the string "@$remote_header_rewrite_domain" instead.

Note 1: this feature is enabled by default and must not be turned off. Postfix does not support domain-less addresses.

Note 2: with Postfix version 2.2, message header address rewriting happens only when one of the following conditions is true:

  • The message is received with the Postfix sendmail(1) command,
  • The message is received from a network client that matches $local_header_rewrite_clients,
  • The message is received from the network, and the remote_header_rewrite_domain parameter specifies a non-empty value.

To get the behavior before Postfix version 2.2, specify "local_header_rewrite_clients = static:all".

Em sua configuração, o postfix anexará $myorigin = $myhostname = myserver.example.com a george .

Como $ myhostname (myserver.example.com) está listado em 'mydestination, então o postfix tentará fazer a verificação de existência do usuário por

  1. Verifique se o usuário (george) está listado como usuário local em myserver.example.com
  2. Verifique se o usuário (george) definido em alias_maps

Se o usuário não corresponder à verificação, o email será devolvido. Caso contrário, o email será entregue na caixa de correio local.

Solução proposta

A partir da pergunta, parece que você quer reescrever george - > [email protected] em vez disso george - > [email protected]. Em seguida, você pode alterar o parâmetro myorigin become $mydomain . Em main.cf

myorigin = $mydomain
    
por 23.03.2015 / 23:31