Я пытаюсь использовать 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. Обновление разрешений в последнее время не работало, пока я не удалил обе учетные записи и не воссоздал их.