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


8

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

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

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

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


Используйте брандмауэр, чтобы позволить подключаться только IP-адресам других VPS. Кроме того, вы можете установить переменную mynetworks в main.cf, чтобы postfix знал об этом, даже если брандмауэр выходит из строя. Если вы действительно хотите SASL, прочитайте SASL_README, поставляемый с постфиксом, и настройте SASL для использования / etc / sasldb в качестве «базы данных». Должно работать из коробки. saslpasswd добавляет / удаляет / изменяет файл.
— AndreasM

Ответы:


15

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

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

Начните с установки Cyrus SASL с плагином sasldb. (Как это сделать, оставлено в качестве упражнения для читателя; предположительно, есть пакет в любой системе пакетов, которую использует ваш бренд Unix.) Поскольку связь между Postfix и SASL будет осуществляться через сокет домена unix, вы можете захотеть добавьте postfix в группу 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 и сообщить Cyrus, что это SMTP, который он аутентифицирует, отредактировав /etc/postfix/main.cf так, чтобы он содержал

smtpd_sasl_auth_enable = yes
smtpd_sasl_path = smtpd

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


Спасибо за исчерпывающий ответ! Я выполнил все шаги, и все, кажется, работает хорошо. sasldblistusers2правильно выводит список пользователей, который я добавил. Однако, при выполнении testsaslauthd, я получаю этот результат: 0: NO "authentication failed". Ты хоть представляешь, как я могу это исправить? Это из моего /var/log/auth.log:saslauthd[30471]: do_auth : auth failure: [user=XXX@XXX] [service=smtpd] [realm=] [mech=pam] [reason=PAM auth error]
— Джонатан

Это означает, что saslauthd пытается использовать PAM вместо sasldb. Какая командная строка использовалась для ее запуска?
— Дженни Д

Я использовал testsaslauthd (как описано в вашем первоначальном ответе), а также попытался добавить -s smtpdк нему. Если установить MECHANISMS="sasldb"в /etc/default/saslauthdи перезапустить saslauthd, я получаю тот же результат с testsaslauthd. В журнале аутентификации показано другое сообщение:saslauthd[3706]: do_auth : auth failure: [user=XXX@XXX] [service=smtpd] [realm=] [mech=sasldb] [reason=Unknown]
— Джонатан

2
Хм, testsaslauthd работает, если я указываю имя пользователя и часть домена отдельно, как это: testsaslauthd -u username -r example.com -p XXXвозвращает 0: OK "Success.". Теперь я проверю, сможет ли Postfix обойти это ...
— Джонатан,

Если вы используете его, -s smtpdвы заставите его использовать PAM вместо sasldb, так что не делайте этого ...
— Дженни Д

1

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

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

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

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


1

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

Создание учетной записи в 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"

Но это не ошибка. Это просто функция безопасности.


0

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

 inet_interfaces = 127.0.0.1

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


Спасибо за ответ. Приложение работает на других VPS, поэтому Postfix будет получать электронную почту от других хостов, кроме localhost.
— Джонатан

Можете ли вы определить IP-адреса ожидаемых соединений и перечислить их либо в конфигурации postfix, либо в конфигурации брандмауэра? Например, все они могут быть в одном сетевом блоке или в достаточно небольшом наборе IP-адресов или блоков, чтобы их можно было легко перечислить. В качестве альтернативы вы можете посмотреть на использование частной сети между вашими виртуальными хостами.
— mc0e
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.