Forçando o endereço de quando o postfix retransmite SMTP

22

Estou tentando receber relatórios por e-mail 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 a retransmissão SMTP e configurei o Postfix para atender 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 eu não sou um grande fã de ter cuidado - eu prefiro que o postfix force o problema. Existe uma maneira de fazer isso?

    
por John Whitlock 03.06.2010 / 19:10

5 respostas

30

Isto é como realmente fazer isso no postfix.

Essa configuração altera os endereços dos remetentes do tráfego de e-mail SMTP originado e retransmitido localmente:

/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 do email originado do próprio servidor

/ etc / postfix / sender_canonical_maps:

/.+/    [email protected]

Regravar do endereço no e-mail retransmitido SMTP

/ etc / postfix / header_check:

/From:.*/ REPLACE From: [email protected]

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

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

    
por 12.03.2015 / 16:18
12

The optional generic table specifies an address mapping that applies when mail is delivered (sent) from server.

This is the opposite of canonical mapping, which applies when mail is received by server.

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

Usar a tabela canônica quando o correio é recebido pelo servidor já está explicado é outras respostas.

Você pode reescrever endereços FROM quando o correio for 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:
    [email protected]      [email protected]
    @localdomain.local          [email protected]

Então faça:

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

Referências:

por 01.09.2013 / 19:21
6

Atualização: seguindo o conselho de um amigo de TI, estou executando o postfix em todos os meus servidores, em vez de criar um servidor de e-mail em nuvem. Aqui está 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 [email protected]: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 [email protected]
# output of hostname -f
@domU-01-02-03-04-05-06.compute-1.internal [email protected]

/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:           [email protected]

/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 que me alegram:

  • Muitos e-mails são enviados para o usuário root e a única linha em alias direciona quem a recebe.
  • Todos os e-mails de usuários locais são traduzidos para provenientes de [email protected] , portanto, passam pelo servidor SMTP do MS Online.
  • o postfix tem documentação muito melhor que o sendmail.

Coisas que não me agrada:

  • Alterações personalizadas são necessárias para cada host e várias etapas. Eu escrevi um script bash para ajudar.
  • O truque do nome passwd nem sempre funciona e pode ser difícil descobrir de que servidor um e-mail está vindo.
  • Cada 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 lista AUTH nula antes de STARTTLS , mas AUTH LOGIN depois).
    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 certs, mas não tenho certeza se as quebras de entrega de email quando o certificado é renovado)
    3. certificate verification failed for smtp.mail.microsoftonline.com: num=27:certificate not trusted (igual a # 2)

Obrigado à comunidade serverfault por compartilhar opiniões strongs em servidores de e-mail.

    
por 17.06.2010 / 16:35
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, [email protected]

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

    
por 03.06.2010 / 22:17
0

Eu uso o mapeamento canônico para reescrever o endereço de, como reescrever root @ app01 para não [email protected].

    
por 12.12.2012 / 13:23