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 напрямую.

adaptr
источник
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.

mc0e
источник
Спасибо за ответ. Приложение работает на других VPS, поэтому Postfix будет получать электронную почту от других хостов, кроме localhost.
Джонатан
Можете ли вы определить IP-адреса ожидаемых соединений и перечислить их либо в конфигурации postfix, либо в конфигурации брандмауэра? Например, все они могут быть в одном сетевом блоке или в достаточно небольшом наборе IP-адресов или блоков, чтобы их можно было легко перечислить. В качестве альтернативы вы можете посмотреть на использование частной сети между вашими виртуальными хостами.
mc0e