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?