Пересылка электронной почты с постфиксом через SES AWS

У меня есть сервер с постфиксным MTA, установленным, который принимает почту для моего домена, в дальнейшем @example.com. Я должен установить передачу для определенного emails@example.com на другие электронные письма. например, @gmail.com и это должны быть сделаны с помощью транспорта SMTP через SES.

У меня есть производственный доступ SES и пара входа в систему/пароля, которая активна и имеет, я - полномочия, я проверил. Я подтвердил бесспорный От: адрес в SES. Если я посылаю электронное письмо с этими имя пользователя/пароль SMTP непосредственно через SES из Сценария PHP, все хорошо работает. Это означает что пара входа в систему/пароля и От: в порядке.

Теперь я должен переписать От: для электронных писем, которые идут снаружи и должны быть переданы. Например, электронное письмо послано из @gmail.com-> user@example.com. Пользователь записи настраивается в virtual_alias_maps и должен перейти к другому @gmail.com. Для перезаписи От: заголовок, следующее smtp_header_checks используется:

smtp_header_checks = pcre:/etc/postfix/header_checks

содержание /etc/postfix/header_checks следует:

/^From:(.*)/ REPLACE From: "$1" <root@example.com>

root@example.com подтвержден в SES. Это - та же электронная почта, которую я использую при тестировании со Сценарием PHP, который использует SES непосредственно, т.е. без заголовка переписывают.

Когда я отправляю что-то от @gmail до user@example.com, вот то, что продолжается в журналах:

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=<user@gmail.com>, 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" <user@gmail.com>: From: " "User" <user@gmail.com>" <root@example.com>
Apr  8 15:04:07 ip-10-191-106-25 postfix/smtp[32551]: 3252A2415D: to=<user2@gmail.com>, orig_to=<user2@example.com>, 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=<20150408150407.7FD75243F8@example.com>
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=<user@gmail.com>, 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

Это дает мне идею что От: заголовок не был на самом деле переписан. Однако строка:

Apr  8 15:04:07 ip-10-191-106-25 postfix/smtp[32551]: 3252A2415D: replace: header From: "User" <user@gmail.com>: From: " "User" <user@gmail.com>" <root@example.com>

говорит нам, что это на самом деле было.

Я понимаю, что должен просмотреть переписанное целое почтовое тело, прежде чем оно будет отправлено на сервер AWS, но я понятия не имею, как отладить его.

Вот 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
1
задан 2 March 2016 в 01:59
2 ответа

Похоже, что ваша первоначальная цель с помощью header_checks - сохранить оригинального отправителя и заменить его на разрешенного отправителя Amazon SES.

Проблема вашего подхода, описанного выше, заключается в том, что из: заголовок становится нестандартным из-за множества кавычек в нем.

From: " "User" <user@gmail.com>" <root@example.com>

Даниэль Р. Тобиас упомянул этот вопрос в своей статье: Сайт почтового формата Дэна | Заголовки | От/To/CC/BCC

Одна вещь, которая поставит вас под угрозу того, что ваша почтовая программа наложит нестандартные строки заголовков на ваши сообщения, это попытка включить кавычки в ваше имя, например, Джесси "The Body" Ventura. Если вставить прямо в заголовок, в двойные кавычки, вы получите "Джесси "The Body" Ventura" , который на самом деле разбирает две цитируемые строки, "Джесси " и "Ventura" , при этом "The Body" сидит посередине с неясным назначением.

Таким образом, вы можете положиться на этот нестандартный заголовок, чтобы обойти Amazon SES checker.


Один подход к решению этой проблемы состоит в том, чтобы разделить две вышеуказанные цели на две header_checks, header_checks и smtp_header_checks. Первая header_checks сохранит оригинального отправителя в другом пользовательском заголовке (например, X-Original-From). Вторая заменит заголовок From:.

#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: <root@example.com>

Из-за этой схемы, заголовок X-Original-From: будет добавляться в каждое входящее письмо. Но замена будет выполняться только в исходящем сообщении.


Другой способ - использование pcre для исключения кавычек в оригинальном заголовке From:. К сожалению, сейчас у меня нет времени на проверку некоторых идей. Может быть, позже... Я обновлю этот ответ другим обходным путем.

Переписывание адреса отправителя конверта

Вышеприведенные части все еще полпути. Чтобы пройти amazon SES, вам также нужно переписать адрес отправителя конверта.

За исключением адресов, содержащих метки (см. ниже), вы должны проверить каждый адрес электронной почты (или домен адреса электронной почты), который вы будете использовать в качестве адреса "From" или "Return-Path" для ваших сообщений. До тех пор, пока ваша учетная запись не выйдет из песочницы Amazon SES, вы также должны проверить адрес электронной почты каждого получателя, за исключением получателей, предоставленных симулятором почтовых ящиков Amazon SES.

См. различия между Envelope Address и Message Header Address в этой статье .

Я объяснил некоторые шаги по переписыванию отправителя в этих похожих потоках: AWS SES: Ошибка "Email address is not verified" с Postfix relay. В основном этот параметр нужно поместить в 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

In /etc/postfix/sender_canonical, add

/.*/    mysenderaddress@example.com

In /etc/postfix/sender_access, add

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

Для сохранения исходного адреса отправителя конверта используется /etc/postfix/sender_access.

.
3
ответ дан 3 December 2019 в 16:45

после этого шага я могу пересылать электронную почту с сервера клиенту ->

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

В / etc / postfix / sender_canonical добавить

/.*/    mysenderaddress@example.com

В / etc / postfix / sender_access добавить

/(.*)/  prepend X-Envelope-MailFrom: <$1>
3
ответ дан 3 December 2019 в 16:45

Теги

Похожие вопросы