Encaminhamento de e-mail com postfix via AWS SES

1

Eu tenho um servidor com postfix MTA instalado que aceita e-mail para o meu domínio, doravante @ example.com. Preciso configurar o encaminhamento para certos [email protected] para outros emails. por exemplo. @ gmail.com e isso precisa ser feito usando o transporte SMTP via SES.

Eu tenho o acesso de produção do SES e o par de login / senha, que está ativo e tem permissões do IAM, verifiquei. Confirmei um determinado endereço De: no SES. Se eu enviar e-mail com esse nome de usuário / senha SMTP diretamente via SES a partir de um script PHP, tudo funcionará bem. Isso significa que o par de login / senha e De: estão bem.

Agora preciso reescrever De: para os e-mails que estão saindo de fora e precisam ser encaminhados. Por exemplo, um email é enviado de @ gmail.com - > [email protected]. O usuário da entrada está configurado em virtual_alias_maps e deve ir para outro @ gmail.com. Para reescrever o cabeçalho De: , o seguinte smtp_header_checks é usado:

smtp_header_checks = pcre:/etc/postfix/header_checks

o conteúdo de /etc/postfix/header_checks é o seguinte:

/^From:(.*)/ REPLACE From: "$1" <[email protected]>

[email protected] está confirmado no SES. Este é o mesmo e-mail que estou usando ao testar scripts PHP que usam SES diretamente, ou seja, sem reescrita de cabeçalho.

Quando eu envio algo do @gmail para o [email protected], eis o que está acontecendo nos registros:

Apr  8 15:04:05 ip-10-191-106-25 postfix/smtpd[32545]: connect from mail-wg0-f42.google.com[74.125.82.42]
Apr  8 15:04:06 ip-10-191-106-25 postfix/smtpd[32545]: 3252A2415D: client=mail-wg0-f42.google.com[74.125.82.42]
Apr  8 15:04:06 ip-10-191-106-25 postfix/cleanup[32550]: 3252A2415D: message-id=<CADLOpCq4ZFR5=xqTNxPO73-tVkF63urLt_9ueGBDrLSggy29MQ@mail.gmail.com>
Apr  8 15:04:06 ip-10-191-106-25 postfix/qmgr[32192]: 3252A2415D: from=<[email protected]>, size=1687, nrcpt=1 (queue active)
Apr  8 15:04:06 ip-10-191-106-25 postfix/smtpd[32545]: disconnect from mail-wg0-f42.google.com[74.125.82.42]
Apr  8 15:04:07 ip-10-191-106-25 postfix/smtp[32551]: 3252A2415D: replace: header From: "User" <[email protected]>: From: " "User" <[email protected]>" <[email protected]>
Apr  8 15:04:07 ip-10-191-106-25 postfix/smtp[32551]: 3252A2415D: to=<[email protected]>, orig_to=<[email protected]>, relay=email-smtp.us-west-2.amazonaws.com[54.149.142.243]:25, delay=1.3, delays=0.22/0.03/0.57/0.43, dsn=5.0.0, status=bounced (host email-smtp.us-west-2.amazonaws.com[54.149.142.243] said: 554 Message rejected: Email address is not verified. (in reply to end of DATA command))
Apr  8 15:04:07 ip-10-191-106-25 postfix/cleanup[32550]: 7FD75243F8: message-id=<[email protected]>
Apr  8 15:04:07 ip-10-191-106-25 postfix/qmgr[32192]: 7FD75243F8: from=<>, size=3700, nrcpt=1 (queue active)
Apr  8 15:04:07 ip-10-191-106-25 postfix/bounce[32552]: 3252A2415D: sender non-delivery notification: 7FD75243F8
Apr  8 15:04:07 ip-10-191-106-25 postfix/qmgr[32192]: 3252A2415D: removed
Apr  8 15:04:08 ip-10-191-106-25 postfix/smtp[32551]: 7FD75243F8: to=<[email protected]>, relay=email-smtp.us-west-2.amazonaws.com[54.69.81.169]:25, delay=0.67, delays=0.01/0/0.59/0.07, dsn=5.0.0, status=bounced (host email-smtp.us-west-2.amazonaws.com[54.69.81.169] said: 501 Invalid MAIL FROM address provided (in reply to MAIL FROM command))
Apr  8 15:04:08 ip-10-191-106-25 postfix/qmgr[32192]: 7FD75243F8: removed

Isso me dá uma ideia de que o cabeçalho De: não foi realmente reescrito. No entanto, a linha:

Apr  8 15:04:07 ip-10-191-106-25 postfix/smtp[32551]: 3252A2415D: replace: header From: "User" <[email protected]>: From: " "User" <[email protected]>" <[email protected]>

nos diz que realmente tem sido.

Eu percebo que preciso visualizar o corpo do e-mail inteiro reescrito antes de enviá-lo ao servidor da AWS, mas não tenho ideia de como depurá-lo.

Aqui está o conteúdo do main.cf:

# See /usr/share/postfix/main.cf.dist for a commented, more complete version


# Debian specific:  Specifying a file name will cause the first
# line of that file to be used as the name.  The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname

smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no

# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h

readme_directory = no

# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.

smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = example.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = example.com, ip-10-191-106-25.ec2.internal, localhost.ec2.internal, localhost, domain2.example.com
relayhost = email-smtp.us-west-2.amazonaws.com
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
default_transport = smtp
relay_transport = relay

smtp_sasl_auth_enable = yes
smtp_sasl_security_options = noanonymous
smtp_sasl_password_maps = hash:/etc/postfix/sasl_password
smtp_use_tls = yes
smtp_tls_security_level = encrypt
smtp_tls_note_starttls_offer = yes

smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt

smtp_header_checks = pcre:/etc/postfix/header_checks

virtual_alias_maps = hash:/etc/postfix/virtual

sender_canonical_maps = hash:/etc/postfix/canonical

#debug_peer_list=email-smtp.us-west-2.amazonaws.com 127.0.0.1
#debug_peer_level=5
    
por Alexey 08.04.2015 / 17:17

2 respostas

2

Parece que seu objetivo inicial com header_checks é preservar o remetente original e substituí-lo pelo remetente permitido do Amazon SES.

O problema da sua abordagem acima é o De: cabeçalho tornar-se não padrão por causa de várias citações lá.

From: " "User" <[email protected]>" <[email protected]>

Daniel R. Tobias mencionou esta questão em seu artigo: Site do Formato de Correio de Dan | Cabeçalhos | De / para / CC / BCC

One thing that will put you at risk of having your mail program inflict nonstandard header lines on your messages is to attempt to include quotation marks within your name, like Jesse "The Body" Ventura. If inserted directly into the header, within double quotes, you'd get "Jesse "The Body" Ventura", which actually parses into two quoted strings, "Jesse " and " Ventura", with The Body sitting in the middle with uncertain purpose.

Assim, você pode confiar nesse cabeçalho não padrão para ignorar o verificador do Amazon SES.

Uma abordagem para resolver esse problema é dividir as duas metas acima em dois header_checks, header_checks e smtp_header_checks . O primeiro header_checks preservará o remetente original em outro cabeçalho personalizado (por exemplo, X-Original-From). O segundo substituirá o cabeçalho De: .

#main.cf
header_checks = pcre:/etc/postfix/first_header_checks
smtp_header_checks = pcre:/etc/postfix/second_header_checks

#first_header_checks
/^From:(.*)/ PREPEND X-Original-From: $1

#second_header_checks
/^From:(.*)/ REPLACE From: <[email protected]>

Por causa desse esquema, o cabeçalho X-Original-From: será adicionado em todos os e-mails recebidos. Mas a ação de substituição será executada apenas no email de saída.

Outra maneira é usar o pcre para excluir a cotação no cabeçalho original: De: . Infelizmente, não tenho tempo para testar algumas ideias agora. Talvez mais tarde ... Vou atualizar essa resposta com outra solução alternativa.

O endereço do remetente do envelope está sendo reescrito

As partes acima ainda são meia jornada. Para passar o Amazon SES, você também precisa reescrever o endereço do remetente do envelope.

With the exception of addresses containing labels (see below), you must verify each email address (or the domain of the email address) that you will use as a "From" or "Return-Path" address for your messages. Until your account is out of the Amazon SES sandbox, you must also verify the email address of every recipient except for the recipients provided by the Amazon SES mailbox simulator.

Veja as diferenças entre Endereço do envelope vs. Endereço do cabeçalho da mensagem em este artigo .

Expliquei alguns passos para reescrever o remetente neste tópico semelhante: Erro de AWS SES: "Endereço de email não verificado" com Relé de postfix . Basicamente você precisa colocar este parâmetro em main.cf

sender_canonical_maps = regexp:/etc/postfix/sender_canonical
sender_canonical_classes = envelope_sender
smtpd_data_restrictions = check_sender_access pcre:/etc/postfix/sender_access

Em / etc / postfix / sender_canonical, adicione

/.*/    [email protected]

Em / etc / postfix / sender_access, adicione

/(.*)/  prepend X-Envelope-MailFrom: <$1>

O /etc/postfix/sender_access é usado para preservar o endereço do remetente do envelope original.

    
por 09.04.2015 / 06:11
3

seguindo este passo, o seu trabalho para mim é capaz de desviar o email de dentro do servidor para o cliente - >

sender_canonical_maps = regexp:/etc/postfix/sender_canonical
sender_canonical_classes = envelope_sender
smtpd_data_restrictions = check_sender_access pcre:/etc/postfix/sender_access

Em /etc/postfix/sender_canonical add

/.*/    [email protected]

Em /etc/postfix/sender_access add

/(.*)/  prepend X-Envelope-MailFrom: <$1>
    
por 21.02.2017 / 16:20