Especificando uma Instância de Postfix para enviar e-mail de saída

2

Eu tenho um servidor CentOS 6.5 executando o Postfix 2.6x (a distribuição padrão) com cinco IPs IPv4 públicos vinculados a ele. Cada IP tem DNS e rDNS definidos separadamente. Cada um usa um nome de host diferente em um domínio diferente. Eu tenho cinco instâncias Postfix, uma ligada a cada IP, como este exemplo:

  • 192.168.34.104 red.example.com / etc / postfix
  • 192.168.36.48 green.example.net / etc / postfix-green
  • 192.168.36.49 pink.example.org / etc / postfix-pink
  • 192.168.36.50 orange.example.info / etc / postfix-orange
  • 192.168.36.51 blue.example.us / etc / postfix-blue

Eu testei cada IP telneting para a porta 25. Postfix respostas e banners corretamente com o hostname correto. O email é recebido em todas essas instâncias sem problemas e é roteado para o local correto. Essa configuração, menos a instância final, existe há alguns anos e funciona.

Eu nunca me preocupei em configurar o e-mail de saída para passar por qualquer instância, exceto a principal; não havia necessidade. Agora preciso enviar um email de blue.example.us que realmente saia dessa interface e do IP, de modo que os cabeçalhos Recebidos mostrem blue.example.us como o host de envio, para que o SPF e o DKIM sejam validados, etc etc.

O email que será enviado de blue.example.com é um loop de feedback enviado por uma única conta de shell no servidor (account5), uma conta dedicada a enviar este email. A conta recebe os e-mails de feedback de servidores em outras redes, salva os corpos desses e-mails e, em seguida, gera um novo cabeçalho de e-mail de saída, anexa o corpo salvo e envia o e-mail. Ele está enviando canalizando cada email para sendmail -oi -t . Estamos fazendo isso para mascarar as identidades dos servidores iniciais. O script do procmail que processa esses emails funciona corretamente.

No entanto, eu não posso configurar esta conta para enviar e-mail através da interface / IP / instância do Postfix adequada. A mesma conta e o mesmo script enviam e-mails através da instância principal do Postfix / etc / postfix sem nenhum problema. Quando eu mudo MAIL_CONFIG para apontar para / etc / postfix-blue em .bash_profile ou no script Procmail que lida com este e-mail, recebo este erro:

sendmail: fatal: User account5(###) is not allowed to submit mail

Eu li os manuais no Postfix.org, pesquisei no Google e tentei as sugestões em três respostas anteriores aqui no ServerFault.com:

Postfix - especifica a interface para entregar o correio de saída em

O usuário do Postfix não tem permissão para enviar e-mails

O postfix rejeita e-mails do php

Tive o cuidado de parar e reiniciar o Postfix após cada alteração de configuração e testei os resultados. Nada funcionou. A instância principal do postfix aceita o email de saída da conta5. A instância do postfix-blue continua a rejeitar o email da conta5 com o erro do sendmail acima.

Por mais tentador que seja culpar a hostilidade das máquinas, sei que devo estar perdendo algo ou fazendo algo errado. Alguém tem alguma sugestão sobre o que poderia ser? Por favor, sinta-se livre para pedir mais informações sobre a minha configuração, se você precisar.

= - = - = - = - = - = - = - = - = - =

A pedido do respondente, aqui estão main.cf e master.cf para a) a principal instância postfix ("red.example.com") eb) a instância FBL ("blue.example.us")

[NOTA: Todos os parâmetros não especificados abaixo foram deixados nas configurações padrão do Postfix 2.6]

PRINCIPAL:

master.cf

smtp      inet  n       -       n       -       -       smtpd

main.cf

myhostname = red.example.com
mydomain = example.com
inet_interfaces = $myhostname, localhost
inet_protocols = all
lmtp_host_lookup = native
smtp_host_lookup = native
ignore_mx_lookup_error = yes
mydestination = $myhostname, localhost.$mydomain, localhost
local_recipient_maps =
mynetworks = 192.168.34.104/32
relay_domains = example.com,
            example.info,
            example.net,
            example.org,
            example.us
relayhost = [192.168.34.102] # Separate physical server, main mailserver.
relay_recipient_maps = hash:/etc/postfix/relay_recipients
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
smtpd_banner = $myhostname ESMTP $mail_name
multi_instance_wrapper = ${command_directory}/postmulti -p --
multi_instance_enable = yes
multi_instance_directories = /etc/postfix-green /etc/postfix-pink /etc/postfix-orange /etc/postfix-blue

FBL:

master.cf

184.173.119.103:25      inet  n       -       n       -       -       smtpd

main.cf

myhostname = blue.example.us
mydomain = blue.example.us <= Deliberately set to subdomain only.
myorigin = $mydomain
inet_interfaces = $myhostname
lmtp_host_lookup = native
smtp_host_lookup = native
ignore_mx_lookup_error = yes
mydestination = $myhostname
local_recipient_maps  = unix:passwd.byname $alias_maps $virtual_alias_maps
mynetworks = 192.168.36.51/32, 192.168.35.20/31 <= Second IP is backup MX servers
relay_domains = $mydestination
recipient_canonical_maps = hash:/etc/postfix-blue/canonical
virtual_alias_maps = hash:/etc/postfix-fbl/virtual
alias_maps = hash:/etc/aliases, hash:/etc/postfix-blue/canonical
alias_maps = hash:/etc/aliases, hash:/etc/postfix-blue/canonical
mailbox_command = /usr/bin/procmail -a "$EXTENSION" DEFAULT=$HOME/Mail/ MAILDIR=$HOME/Mail
smtpd_banner = $myhostname ESMTP $mail_name
authorized_submit_users = 
multi_instance_name = postfix-blue
multi_instance_enable = yes

** Informações adicionais após o teste da última sugestão de Masegaloeh **

Acabei de tentar adicionar "account5" a authorized_submit_users e definir MAIL_CONFIG em .bash_profile para a conta shell "account5", com "export MAIL_CONFIG" também definida. O Procmail não reclama mais; pensa que está gerando e enviando corretamente o FBL. No entanto, maillog relata o seguinte:

May 29 14:47:42 newton postfix-blue/qmgr[3522]: 5BC773E612F: from=<[email protected]>, size=1106, nrcpt=1 (queue active)
May 29 14:47:42 newton postfix-blue/qmgr[3522]: warning: connect to transport private/smtp: Connection refused
May 29 14:47:42 newton postfix-blue/error[3766]: 5BC773E612F: to=<[email protected]>, relay=none, delay=0.01, delays=0/0/0/0, dsn=4.3.0, status=deferred (mail transport unavailable)

Preciso adicionar algo a um arquivo de configuração de transporte, talvez?

    
por Catherine Jefferson 28.05.2014 / 17:31

1 resposta

1

Quando você envia um e-mail por meio de um envio local a.k.a sendmail , ele usará a instância padrão, por exemplo, red.example.com . Esse comportamento foi explicado na documentação oficial do postfix .

One Postfix instance is special: this is the instance whose configuration directory is the default one compiled into the Postfix utilities. The location of the default configuration directory is typically /etc/postfix, and can be queried via the "postconf -d config_directory" command. We call the instance with this configuration directory the "default instance".

The default instance is responsible for local mail submission. The setgid postdrop(1) utility is used by the sendmail(1) local submission program to spool messages into the maildrop sub-directory of the queue directory of the default instance.

Even in the rare case when "sendmail -C" is used to submit local mail into a non-default Postfix instance, for security reasons, postdrop(1) will consult the default main.cf file to check the validity of the requested non-default configuration directory.

So, while in most other respects, all instances are equal, the default instance is "more equal than others". You may choose to create additional instances, but you must have at least the default instance, with its configuration directory in the default compiled-in location.

Algumas sugestões:

  1. Com base no snippet acima, você pode tentar usar sendmail -C para especificar a instância a enviar e-mail. Ou
  2. A outra solução alternativa é trocar a instância, por exemplo red.example.com torna-se blue.example.us e vice-versa.

Editar com base nos comentários abaixo

sendmail: fatal: User account5(###) is not allowed to submit mail

O erro acima causado pelo parâmetro authorized_submit_users está em branco (instância azul postfix). O efeito é que ninguém poderia executar sendmail via instância postfix-blue. Adicionar account5 a esse parâmetro deve resolver o problema.

Outro erro

warning: connect to transport private/smtp: Connection refused

foi causado pela falta de smtp transport em master.cf . Certifique-se de que esta linha esteja presente em master.cf

smtp      unix  -       -       n       -       -       smtp

e adicione -o smtp_bind_address = 192.168.36.51 ao final da linha, então o email será enviado pelo endereço 192.168.36.51.

    
por 29.05.2014 / 00:59