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

Postfix: как использовать простой файл для аутентификации SASL?

Я бы хотел запустить Postfix на Debian VPS, чтобы отправлять электронные письма из моего приложения. Приложение (работающее на других VPS) будет подключаться к Postfix через SMTP. Postfix не должен обрабатывать входящую электронную почту; это просто отправка исходящих сообщений.

Чтобы предотвратить использование открытого ретранслятора, следует использовать аутентификацию SASL. Однако я не хочу запускать Dovecot или MySQL для аутентификации SASL.

Как я могу настроить аутентификацию SASL с помощью простого файла (содержащего имена пользователей и пароли)?

Я уже нашел похожий вопрос; однако удовлетворительных ответов там не было.

Postfix в настоящее время поддерживает только два метода аутентификации SASL. Один из них - Dovecot, который вам не нужен. Другой - Cyrus, который настолько близок к тому, что вы хотите, насколько это возможно, не переписывая Postfix. Это требует запуска отдельного демона аутентификации (saslauthd), но файл аутентификации легко редактировать и обновлять.

Основы использования Cyrus SASL можно найти на сайт документации postfix, но вот краткое описание. пожалуйста посмотрите ссылку, если что-то запутывает!

Начните с установки Cyrus SASL с плагином sasldb. (Как это сделать, оставлено в качестве упражнения для читателя; предположительно, есть пакет в любой системе пакетов, которую использует ваша марка unix.) Поскольку связь между Postfix и SASL будет осуществляться через сокет домена unix, вы можете захотеть добавьте постфикс в группу SASL и убедитесь, что эта группа имеет права на чтение и выполнение в каталоге /var/run/saslauthd.

Настроить SASL

Настройте SASL для использования sasldb, отредактировав /etc/sasl2/smtpd.conf:

pwcheck_method: auxprop
auxprop_plugin: sasldb
mech_list: PLAIN LOGIN CRAM-MD5 DIGEST-MD5 NTLM

Плагин sasldb означает, что sasl будет использовать файл Berkeley DB для имен пользователей и паролей. Вы добавляете пользователей с помощью команды saslpasswd2:

$ saslpasswd2 -c -u example.com username
Password:
Again (for verification):

Обратите внимание, что вы указываете домен вместе с именем пользователя, и пользователю нужно будет использовать «username@example.com», а не просто «username» при аутентификации.

Вы можете проверить, какие пользователи были введены, запустив sasldblistusers2.

Запустите saslauthd и убедитесь, что аутентификация работает, выполнив

testsaslauthd -u username@example.com -p password

Настроить Postfix

Как только это будет сделано, скажите Postfix использовать SASL и сообщить Сайрусу, что это SMTP, который он аутентифицирует, отредактировав /etc/postfix/main.cf, чтобы он содержал

smtpd_sasl_auth_enable = yes
smtpd_sasl_path = smtpd

Затем перезагрузите постфикс, и все должно быть установлено.

Чтобы предотвратить использование открытого ретранслятора, следует использовать аутентификацию SASL.

SASL - лишь один из множества способов предотвратить это. Другой вариант - занести в белый список IP-адреса, которые вы используете на других VPS, или потребовать сертификаты клиентов TLS (можно сказать, что это наиболее безопасный способ).

Просто настройте подписывающий CA на машине postfix и подпишите один сертификат для каждого VPS, который вы хотите отправить по электронной почте.
Затем потребуйте полную проверку сертификата клиента для всех отправленных писем; отключить любые другие способы отправки.

То, о чем вы спрашиваете, невозможно, поскольку postfix не поддерживает SASL напрямую.

Просто проясняю несколько вещей,

Создание учетной записи в sasldb:

% saslpasswd2 -c -u fqdn username

Проверка аутентификации:

% testsaslauthd -u username -p password

(примечание: имя пользователя не за которым следует fqdn)

Еще хочу добавить, что создание учетной записи root

% saslpasswd2 -c -u example.com root

не позволит вам пройти аутентификацию,

% testsaslauthd -u root -p some_password
0: NO "authentication failed"

Но это не ошибка. Это просто средство безопасности.

Если вам не нужно обрабатывать входящую почту, не беспокойтесь об аутентификации. Просто заблокируйте входящий трафик с помощью брандмауэра и / или ограничьте его только локальным хостом.

 inet_interfaces = 127.0.0.1

Больше нет проблем с открытым ретранслятором, и вы также избежите осложнений для приложений, которым необходимо отправлять почту через postfix.