Forçando o endereço from quando o postfix retransmitir sobre smtp


28

Estou tentando obter relatórios de email de nossas instâncias do AWS EC2. Estamos usando o Exchange Online (parte do Microsoft Online Services). Configurei uma conta de usuário especificamente para retransmissão SMTP e configurei o Postfix para atender a todos os requisitos para retransmitir mensagens através deste servidor. No entanto, o servidor SMTP do Exchange Online rejeitará as mensagens, a menos que o endereço De corresponda exatamente ao endereço de autenticação (a mensagem de erro é 550 5.7.1 Client does not have permissions to send as this sender).

Com uma configuração cuidadosa, posso configurar meus serviços para enviar como este usuário. Mas não sou muito fã de tomar cuidado - prefiro que o postfix force o problema. Existe uma maneira de fazer isso?

Respostas:


38

É assim que realmente se faz no postfix.

Essa configuração altera os endereços do remetente do tráfego de email SMTP originado local e retransmitido:

/etc/postfix/main.cf:

sender_canonical_classes = envelope_sender, header_sender
sender_canonical_maps =  regexp:/etc/postfix/sender_canonical_maps
smtp_header_checks = regexp:/etc/postfix/header_check

Reescreva o endereço do envelope de e-mail originário do próprio servidor

/ etc / postfix / sender_canonical_maps:

/.+/    newsender@address.com

Reescrever do endereço no email retransmitido SMTP

/ etc / postfix / header_check:

/From:.*/ REPLACE From: newsender@address.com

Isso é muito útil se você estiver, por exemplo, usando um servidor smtp de retransmissão local, usado por todos os seus multifuncionais e vários aplicativos.

Se você usar o servidor SMTP do Office 365, qualquer email com um endereço de remetente diferente do email do próprio usuário autenticado será simplesmente negado. A configuração acima impede isso.


Obrigado! Parece o que eu estava procurando. Infelizmente, meu acesso ao Office 365 foi realizado há dois empregos. Alguém pode confirmar se isso funciona para eles?
John Whitlock 27/03

11
Eu posso. Estou usando isso com o office 365.
Jasper

11
Ao usar o sender_canonical_mapspostfix, não é possível salvar as mensagens rejeitadas no spool local e, em vez disso, tenta enviá-las através de retransmissão infinitamente
bacia

2
@ Jasper FYI Achei mais fácil alterar as linhas de configuração acima # postconf -e sender_canonical_classes=envelope_sender,header_sender postconf -e sender_canonical_maps=regexp:/etc/postfix/sender_canonical_maps postconf -e smtp_header_checks=regexp:/etc/postfix/header_check
Jacob Evans

teve um problema semelhante, sender_canonical_classes = envelope_sender salvou meu dia!
23918 Stephan

13

A tabela genérica opcional especifica um mapeamento de endereço que se aplica quando o correio é entregue (enviado) do servidor.

É o oposto do mapeamento canônico , que se aplica quando o correio é recebido pelo servidor.

(Nota: os endereços FROM e TO são correspondidos para substituição em qualquer uma das tabelas genéricas e canônicas.)

O uso da tabela canônica quando o correio é recebido pelo servidor já está explicado. Outras respostas.

Você pode reescrever os endereços FROM quando o email é enviado do servidor usando smtp_generic_maps.

De acordo com a documentação do postfix :

/etc/postfix/main.cf:
    smtp_generic_maps = hash:/etc/postfix/generic

/etc/postfix/generic:
    user@localdomain.local      account@isp.example.com
    @localdomain.local          wholedomain@isp.example.com

Então faça:

sudo postmap /etc/postfix/generic
sudo /etc/init.d/postfix reload

Referências:


11
Isso funciona, mas como também posso alterar o nome FROM?
Joanna Mikalai

Minha experiência com mapas genéricos é que ele vai identificar tanto do e endereços, a utilização de mapas canônicos para forçar apenas o endereço FROM como o OP pediu
doz87

É possível alterar o correio do remetente e combinar os endereços dos remetentes usando regex?
WM

@ doz87, FROM e TO serão correspondidos por mapas canônicos e genéricos. Atualizei minha resposta para explicar a diferença entre os dois mapas.
Jocelyn

@WM sim, você pode usar o regexp. Eu nunca tentei, mas você provavelmente teria que mudar hash:para regexp:no main.cf e usar linhas como /foo.*@localdomain.local/ account@example.comno mapa genérico. Isso é explicado na página de manual
Jocelyn

7

Atualização: por recomendação de um amigo de TI, estou executando o postfix em todos os meus servidores, em vez de criar um servidor de correio na nuvem. Aqui está a minha solução até agora:

/etc/postfix/main.cf

# output of hostname -f - mail from local users appears to come from here
myhostname = domU-01-02-03-04-05-06.compute-1.internal
# Local delivery - include all 127.0.0.1 aliases from /etc/hosts
mydestination = $myhostname, $mydomain, rest_of_entries_from_hosts
# Needed for address translation to work
myorigin = $mydomain

# Talking to MS Online
# :submission = port 587
relayhost = [smtp.mail.microsoftonline.com]:submission
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options =   # Yes, leave empty
smtp_tls_security_level = encrypt
smtp_generic_maps = hash:/etc/postfix/generic

# Enable if you need debugging, but it does leak credentials to the log
#debug_peer_level = 2
#debug_peer_list = smtp.mail.microsoftonline.com

# Only listen on the local interfaces (not the public)
inet_interfaces = localhost

# I left out a bunch of CentOS defaults.  postconf -n is your friend.
# These are included
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases

/etc/postfix/sasl_passwd

# Run postmap /etc/postfix/sasl_passwd after editing
# Also, chown root:root; chmod 600
smtp.mail.microsoftonline.com relayer@hosteddomain.com:YourP@ssw0rd

/etc/postfix/generic

# Run postmap /etc/postfix/generic
# I've seen local mail come from either source
# output of dnsdomainname
@compute-1.internal relayer@hosteddomain.com
# output of hostname -f
@domU-01-02-03-04-05-06.compute-1.internal relayer@hosteddomain.com

/etc/aliases

# Run newaliases after changing
# Lot of stuff here. Mostly, just make sure the graph points to root, such as
mailer-daemon:  postmaster
postmaster:     root

# And the important part - your email or distribution group
root:           awsadmins@hosteddomain.com

/etc/passwd

# Sometimes it helps to expand the name, so email comes from 'root at aws host 5'
#  rather than just 'root'
# Was
#root:x:0:0:root:/root:/bin/bash
# Is
root:x:0:0:root on aws host 5:/root:/bin/bash

Coisas pelas quais estou feliz:

  • Muitas mensagens são enviadas para o root, e a única linha aliasindica quem as recebe.
  • Todas as mensagens de usuários locais são convertidas em provenientes relayer@hosteddomain.com, para serem enviadas pelo servidor SMTP do MS Online.
  • O postfix tem uma documentação muito melhor que o sendmail.

Coisas pelas quais não estou feliz:

  • Alterações personalizadas são necessárias para cada host e várias etapas. Eu escrevi um script bash para ajudar.
  • O passwdtruque de nomes nem sempre funciona e pode ser difícil descobrir de que servidor é proveniente um email.
  • Todo email enviado coloca três avisos no log:
    1. warning: smtp.mail.microsoftonline.com[65.55.171.153] offered null AUTH mechanism list(O servidor SMTP envia uma AUTHlista nula antes STARTTLS, mas AUTH LOGINdepois).
    2. certificate verification failed for smtp.mail.microsoftonline.com: num=20:unable to get local issuer certificate (Existem algumas opções de configuração em torno de certificados, mas não tenho certeza se a entrega de correio é interrompida quando o certificado é renovado)
    3. certificate verification failed for smtp.mail.microsoftonline.com: num=27:certificate not trusted (Igual ao nº 2)

Obrigado à comunidade serverfault por compartilhar opiniões fortes em servidores de correio.


4

Você pode usar smtpd_sender_login_maps para especificar uma lista de mapas: endereço do remetente - usuário.

Exemplo:

smtpd_sender_login_maps = 
    hash:/etc/postfix/login-map 

/ etc / postfix / login-map:

mail1@domain    userlogin
mail2@domain    userlogin, otheruser@example.com

Funciona para envio, deve funcionar para retransmitir da mesma maneira.


O objetivo é reescrever o endereço de origem no tempo da fila? Minha impressão é que smtpd_sender_login_maps é usado para rejeitar remetentes (como parte de smtpd_sender_restrictions), não para converter logins em endereços de email. Com isso no lugar, echo "This is a test" | /usr/sbin/sendmail test@example.comainda filas (e, eventualmente, relés) o e-mail como vindo deuser@domU-DE-AD-BE-EF-00-01.compute-1.internal
John Whitlock

Meu mal, de alguma forma, entendi que você autoriza o seu postfix. Nesse caso, smtpd_sender_login_maps limitaria qual usuário pode usar qual endereço de remetente.
seda

Isso pode acabar fazendo parte da minha solução final. Eu poderia rejeitar tudo, exceto o endereço do remetente no front-end, e notificar o postmaster sobre qualquer rejeição do front-end, para me informar quando um serviço ainda não estiver configurado corretamente. Estou vendo smtp_generic_maps, para ver se posso usá-los para modificar todas as contas locais para o Endereço Único Verdadeiro. No entanto, preciso reler os documentos do postfix para entender como ele determina as contas locais - o DNS da AWS não está de acordo com minha intuição.
precisa

0

Uso o mapeamento canônico para reescrever o endereço de origem, como reescrever root @ app01 para no-reply@example.com.


3
Bem-vindo à falha do servidor! Nós realmente preferimos que as respostas contenham conteúdo e não ponteiros para o conteúdo. Embora isso possa teoricamente responder à pergunta, seria preferível incluir aqui as partes essenciais da resposta e fornecer o link para referência.
user9517 suporta GoFundMonica
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.