Я настроил Постфикс как сервер SMTP путем добавления этой конфигурации к main.cf
:
myhostname = foo.com
mydomain = foo.com
myorigin = $mydomain
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
smtpd_helo_required = yes
smtpd_helo_restrictions = reject_invalid_helo_hostname
smtpd_recipient_restrictions = reject_unknown_recipient_domain, reject_unauth_pipelining, permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
sasl_passwd
файл похож на это:
foo.com user:pass
И я генерировал a sasl_passwd.db
из того файла. К сожалению, при соединении с моим сервером с именем пользователя и паролем, я продолжаю получать ошибки аутентификации. Что я делаю неправильно?
Вы смешиваете smtpd_sasl
и smtp_sasl
, первый предназначен для пользователей, аутентифицирующих на вашем сервере для отправки сообщений электронной почты для доставки , последний используется, когда postfix доставляется не напрямую, а через ретранслятор, а postfix сам аутентифицирует .
К сожалению, при подключении к моему серверу с помощью имени пользователя и пароля я продолжаю получать сбои аутентификации.
Вы говорите, что вы подключаетесь к серверу, поэтому я предполагаю, что вы хотите использовать SASL для smtp d . SASL в постфиксе для аутентификации пользователя обычно достигается с помощью dovecot или cyrus.
Два совета о том, с чего начать решать задачу, к которой вы на самом деле приближаетесь:
Как отмечалось в предыдущем ответе, переменная smtp_sasl_password_maps
применяется только к SMTP, а не к SMTPD. Если бы решение было таким же простым, как указание Postfix SMTPD на файл.
В предыдущем ответе упоминалась кажущаяся ненужной документация по проблеме задания пар имен пользователей и паролей для сервера. Было бы неплохо, если бы у Postfix SMTPD был способ вернуться к файлу, а не требовать от администратора изучения демона с подключаемыми модулями.
По-видимому, такого решения не существует, поэтому проблема указания набора имен пользователей и паролей для конфигурации Postfix SMTPD становится проблемой взаимодействия Postfix SMTPD с демоном SASL. (Этот факт, если он верен, не фигурирует в документации, на которую ссылаются, поэтому я беру на себя некоторый риск, чтобы заявить об этом здесь)
Я нашел наиболее простую документацию для того, чтобы заставить Postfix SMTPD взаимодействовать с SASL здесь: https://wiki.debian.org/PostfixAndSASL.
В итоге я смог заставить Postfix SMTPD распознавать имя пользователя/пароль из моего входа в оболочку, используя первый метод из приведенного выше руководства «Использование saslauthd с PAM». При этом используется механизм SASL по умолчанию «pam», указанный в /etc/default/saslauthd
в Debian (хотя в руководстве сказано, что нужно создать копию этого файла только для Postfix, что я и сделал). PAM — это стандартная среда аутентификации Unix.
Я помню, как сталкивался с некоторыми проблемами даже с документацией Debian, но я не могу точно вспомнить, в чем они заключались. Эти две команды были необходимы для отладки проблем, с которыми я столкнулся (замените свое имя пользователя и пароль):
echo MYPASSWORD | pamtester -v smptd myusername authenticate
sudo testsaslauthd -s smtp -u myusername -p MYPASSWORD
Мне, возможно, пришлось запустить saslauthd
до того, как Postfix SMTPD даже объявил о возможности аутентификации для клиентов.
Наконец, я протестировал отправку с помощью msmtp
на другом хосте. Этому инструменту не нравились ключи TLS в конфигурации Debian Postfix по умолчанию, поэтому я изменил main.cf
, чтобы использовать ключи letsencrypt.
Мне никогда не приходилось узнавать, что такое голубятня или Кир для этого решения.Однако было бы предпочтительнее иметь решение, которое позволило бы мне использовать пароль, отличный от моего входа в оболочку, так как теперь вся моя система так же безопасна, как Postfix.