Назад | Перейти на главную страницу

Что не так с моей установкой постфиксной маршрутизации через Amazon / SES? (smtp_sender_dependent_authentication)

Я пытаюсь использовать Amazon SES в качестве шлюза SMTP для моего «точного» сервера EC2 Ubuntu, используя разные учетные записи SES для разных исходных доменов электронной почты. В документация по postfix Кажется, это подразумевает, что это возможно, но SES всегда заявляет, что я использую неправильные учетные данные («535 Authentication Credentials Invalid»). Учетные данные работают, если я перенаправляю всю электронную почту через директиву relayhost на ту же учетную запись SES.

Вот что у меня есть.

main.cf (соответствующие разделы):

relayhost =
sender_dependent_relayhost_maps = regexp:/etc/postfix/sender_dependent_relayhost_map
smtp_sender_dependent_authentication = yes
smtp_sasl_auth_enable = yes
smtp_sasl_security_options = noanonymous
smtp_sasl_password_maps = regexp:/etc/postfix/smtp_sasl_password_map
smtp_use_tls = yes
smtp_tls_security_level = encrypt
smtp_tls_note_starttls_offer = yes
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt

sender_dependent_relayhost_map:

/.*@example\.com/   [email-smtp.us-east-1.amazonaws.com]:25

smtp_sasl_password_map:

/.*@example\.com/   AK...:34.../...

где AK ... - это AWSAccessKeyId, а 34 ... / ... - это AWSSecretKey.

Сообщение об ошибке в /var/log/mail.log:

Aug 20 21:47:39 example postfix/smtp[18496]: DE1E14218D: SASL authentication failed; server email-smtp.us-east-1.amazonaws.com[23.23.139.32] said: 535 Authentication Credentials Invalid

Есть ли способ узнать, какие учетные данные он пытается использовать?

-

Обновление: для отладки я заменил свои карты регулярных выражений на карты mysql и включил ведение журнала запросов SQL. Таким образом, я могу увидеть, как оцениваются эти карты. Это вроде интересно. Во-первых, я получаю:

SELECT host FROM sender_dependent_relayhost_map WHERE sender='foo@example.com'

Если это вернет localhost: 11111, я могу запустить netcat на этом порту и получить входящее SMTP-соединение. Так что эта часть вроде работает нормально.

Затем я получаю повторяющиеся запросы типа:

SELECT userpass FROM smtp_sasl_password_map WHERE sender=...

сначала оценивается с помощью 'foo@example.com', затем (если не найдено) с '@ example.com' (не то, что я нашел в документации), а затем, что удивительно, с сервером smtp, найденным из предыдущего запроса sender_dependent_relayhost_map. и, наконец, с '<>' (предположительно глобальное значение по умолчанию).

Но если я верну «AK ...: 34 ... / ...» (учетные данные Amazon SES) из второй таблицы, я все равно получу ту же ошибку аутентификации от Amazon. Так что прогресс есть, но решения пока нет.

Для учетных данных sasl в postfix, где у вас есть «AK ...: 34 ... / ...», вам необходимо использовать имя пользователя и пароль SMTP, а не AWSAccessKeyId и AWSSecretKey.

См. «Получение учетных данных SMTP Amazon SES» на http://docs.aws.amazon.com/ses/latest/DeveloperGuide/smtp-credentials.html

Я подозреваю, что регулярное выражение как-то не работает. Вы можете попробовать следующее, что связывает пользователя: перейти к relayhost.

/ и т.д. / постфикс / sasl_pass

[email-smtp.us-east-1.amazonaws.com] AKAAAA:AAAAAAAAA

/etc/posfix/main.cf

smtp_sasl_password_maps = hash:/etc/postfix/sasl_pass

Конечно, вам нужно запустить sudo postmap / etc / postfix / sasl_pass (или любое другое имя файла, который вы используете.

Важная заметка. У вас ДОЛЖНА быть только одна учетная запись SES SMTP для каждого региона.

Так было не всегда, и у нас было две учетные записи SMTP. Обновление разрешений в последнее время не работало, пока я не удалил обе учетные записи и не воссоздал их.