Люди, которые идут на трудности в установке postfix, могут сделать postfix более безопаснее чем другие почтовые системы. Библиотека Cyrus SASL решение этой задачи. С ним, postfix становится таким же безопасным как другие почтовые системы, которые используют библиотеку Cyrus SASL. Dovecot обеспечивает альтернативу что может оказаться ценным в сложившихся обстоятельствах.
Postfix SASL поддерживает (RFC 2554) возможность использовать проверку удаленных SMTP клиентов на postfix SMTP сервере, и проверять postfix SMTP клиента на удаленном SMTP сервере.
Когда принимается почта, postfix записывает в журнал клиент-предусматриваемое имя-пользователя, метод проверки, и адрес отправителя в maillog файл, и опциально разрешает почтовый доступ через permit_sasl_authenticated UCE ограничение.
Когда отправляется почта, Postfix может делать поиск имени узла сервера или домена назначения (правая часть адреса) в таблице паролей Postfix SASL, и если пользователь/пароль там есть, он будет использовать это пользовательское имя и пароль для аунтентификации к серверу. И так с версии 2.3, Postfix может быть сконфигурирован к поиску его SASL таблицы паролей email адресом отправляющего.
Этот документ охватывает следующие темы:
Этот документ описывает postfix с следующими SASL реализациями:
Cyrus SASL version 1 (client and server).
Cyrus SASL version 2 (client and server).
Dovecot protocol version 1 (server only, Postfix version 2.3 and later)
Postfix версии 2.3 включает подключаемый механизм который обеспечивает поддержку различных SASL реализаций. Для определения, что данная реализация встроена в postfix, используются следующие команды:
% postconf -a (SASL support in the SMTP server) % postconf -A (SASL support in the SMTP+LMTP client)
Необходимо сказать что эти команды не поддерживаются в ранних версиях postfix.
Поддержка для Dovecot версии 1 SASL протокола возможна в Postfix 2.3 и позже. Во время написания этой статьи, возможна только серверная часть поддержки SASL, так что вы не можете использовать ее для авторизации к вашему сетевому серверу провайдера. Dovecot использует свой процесс демона для авторизации. Это позволяет postfix строить процесс проще, потому что нет необходимости в связи дополнительных библиотек в postfix.
Для создания необходимых Makefiles, выполните следующее в установленной верхнего уровня директории postfix:
% make makefiles CCARGS='-DUSE_SASL_AUTH -DDEF_SERVER_SASL_TYPE=\"dovecot\"'
После этого, продолжите с "make" как описано в документе INSTALL.
Заметки:
В "-DDEF_SERVER_SASL_TYPE" добавлении нет необходимости; она уточняет сделанную postfix конфигурацию (делая) немного более удобной, потому что вы не указываете тип подключения SASL в файле main.cf.
Если вы также желаете поддержку для LDAP или TLS, вы можете объединить их CCARGS и AUXLIBS в вышеупомянутой командной строке.
Postfix представлен для работы с cyrus-sasl-1.5.5 или cyrus-sasl-2.1.1, которые доступны здесь:
ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/
Важно: если вы устанавливаете библиотеку Cyrus SASL согласно значениям по умолчанию, вы имеете символическую ссылку /usr/lib/sasl -> /usr/local/lib/sasl для версии 1.5.x или /usr/lib/sasl2 -> /usr/local/lib/sasl2 для версии 2.1.x.
По сообщениям, Microsoft Outlook (Express) версии требует нестандартного SASL LOGIN метода идентификации. Для включения этого метода идентификации, укажите "./configure --enable-login''
Далее предполагается что Cyrus SASL инклуд файлы находятся в /usr/local/include, и что библиотеки Cyrus SASL находятся в /usr/local/lib.
На некоторых системах это создается необходимыми определениями в Makefile:
% make tidy # если вы имеете остаточные файлы от предыдущей сборки % make makefiles CCARGS="-DUSE_SASL_AUTH -DUSE_CYRUS_SASL \ -I/usr/local/include" AUXLIBS="-L/usr/local/lib -lsasl"
% make tidy # если вы имеете остаточные файлы от предыдущей сборки % make makefiles CCARGS="-DUSE_SASL_AUTH -DUSE_CYRUS_SASL \ -I/usr/local/include/sasl" AUXLIBS="-L/usr/local/lib -lsasl2"
На Solaris 2.x вам необходимо указать run-time link (ссылка в реальном времени) информацию, иначе ld.so не будет найден предоставляемой другим (shared) библиотекой SASL:
% make tidy # если вы имеете остаточные файлы от предыдущей сборки % make makefiles CCARGS="-DUSE_SASL_AUTH -DUSE_CYRUS_SASL \ -I/usr/local/include" AUXLIBS="-L/usr/local/lib \ -R/usr/local/lib -lsasl"
% make tidy # если вы имеете остаточные файлы от предыдущей сборки % make makefiles CCARGS="-DUSE_SASL_AUTH -DUSE_CYRUS_SASL \ -I/usr/local/include/sasl" AUXLIBS="-L/usr/local/lib \ -R/usr/local/lib -lsasl2"
Чтобы приказать включить поддержку SASL на сервере SMTP:
/etc/postfix/main.cf: smtpd_sasl_auth_enable = yes
Чтобы приказать разрешить релэй (отправку почты) от аутентифицированных клиентов:
/etc/postfix/main.cf: smtpd_recipient_restrictions = permit_mynetworks permit_sasl_authenticated ...
Чтобы отчитываться (дописывать) SASL login names (имен используемых при регистрации) в Received (получении): заголовки сообщения (Postfix версии 2.3 позже):
/etc/postfix/main.cf: smtpd_sasl_authenticated_header = yes
Заметка: SASL названия логинов (login names) будут доступны вам вместе с существующим миром.
Старые клиентские софты Microsoft SMTP придерживаются нестандартного синтаксиса протокола AUTH, и ожидают что SMTP сервер ответит для EHLO с "250 AUTH=mechanism-list" вместо "250 AUTH mechanism-list". Для согласования с такими клиентами (в дополнение для отображения клиентов) используйте следующее:
/etc/postfix/main.cf: broken_sasl_auth_clients = yes
Dovecot SASL поддержка доступна в Postfix 2.3 и позже. На стороне Postfix вам необходимо указать расположение сокета демона аутентификации Dovecot(а). Мы используем путь относительно директории очереди Postfix, так что он будет либо работать или не chroot(те) работу Postfix:
/etc/postfix/main.cf: smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth
На стороне Dovecot вам необходимо указать сокета демона аутентификации Dovecot(а). В этом случае мы указываем абсолютный путь. В примере мы предположили что очередь Postfix(а) находится внутри /var/spool/postfix/.
/some/where/dovecot.conf: auth default { mechanisms = plain login passdb pam { } userdb passwd { } socket listen { client { path = /var/spool/postfix/private/auth mode = 0660 user = postfix group = postfix } } }
Смотри документацию Dovecot для того чтобы узнать как сконфигурировать и сделать сервер аутентификации Dovecot(а).
Вам необходимо сконфигурировать как Cyrus SASL библиотека будет аутентифицировать клиентские пользовательские имена и пароли. Эти настройки должны быть сохранены в отдельном конфигурационном файле.
Имя конфигурационного файла (по умолчанию: smtpd.conf) будет сконструировано от значения отправляемого Postfix к Cyrus SASL библиотеке, которой добавляется суффикс .conf. Значение конфигурируется используя одно из следующих переменных:
/etc/postfix/main.cf: # Postfix 2.3 and later smtpd_sasl_path = smtpd # Postfix < 2.3 smtpd_sasl_application_name = smtpd
Cyrus SASL ищет конфигурационный файл в /usr/local/lib/sasl/ (Cyrus SASL версии 1.5.5) или /usr/local/lib/sasl2/ (Cyrus SASL версии 2.1.x).
Заметка: некоторые дистрибутивы Postfix модифицированы и показывают путь (или видят) к файлу smtpd.conf в /etc/postfix/sasl.
Заметка: некоторые Cyrus SASL дистрибутивы показывают путь к smtpd.conf фалу в /etc/sasl2.
К аутентификации в отношении базы данных паролей UNIX, используйте:
/usr/local/lib/sasl/smtpd.conf: pwcheck_method: pwcheck
ВАЖНО: pwcheck устанавливает UNIX domain socket в /var/pwcheck и ожидает аутентификационных запросов. Postfix процессы должны иметь доступы чтение+исполнение к этой директории или попытки аутентификации будут провалены.
Демон pwcheck содержится в исходниках tarball(а) cyrus-sasl.
/usr/local/lib/sasl/smtpd.conf: pwcheck_method: saslauthd
/usr/local/lib/sasl2/smtpd.conf: pwcheck_method: saslauthd mech_list: PLAIN LOGIN
Демон saslauthd также содержится в исходниках tarball(а) cyrus-sasl. Он гибче чем демон pwcheck, в том что он может аутентифицировать в отношении PAM и других различных источников. Для использования PAM, запустите saslauthd вместе с "-a pam".
ВАЖНО: saslauthd обычно устанавливает UNIX domain socket в /var/run/saslauthd и ожидает запросы аутентификации. Postfix процессы должны иметь чтение+выполненение на доступ к этой директории или попытки аутентификации будут провалены.
Заметка: директория где saslauthd ложит сокет конфигурируема. Смотри опцию командной строки "-m /path/to/socket" в листинге saslauthd--help
При аутентификации в отношении собственной базы данных Cyrus SASL:
/usr/local/lib/sasl/smtpd.conf: pwcheck_method: sasldb
/usr/local/lib/sasl2/smtpd.conf: pwcheck_method: auxprop auxprop_plugin: sasldb mech_list: PLAIN LOGIN CRAM-MD5 DIGEST-MD5
При этом будет использоваться файл паролей Cyrus SASL (по умолчанию /etc/sasldb в версии 1.5.x, или /etc/sasldb2 в версии 2.1.x), которые поставляются вместе с командой saslpasswd или saslpasswd2 (часть софта Cyrus SASL). На некоторых недостаточно-поддерживаемых системах команду saslpasswd необходимо запустить несколько раз перед тем, как она перестанет ругаться. Postfix SMTP серверу необходим доступ на чтение к файлу sasldb - вы сможете поиграть с групповыми правами доступа. Вместе с OTP аутентификационными механизмом, SMTP серверу также необходим доступ на ЗАПИСЬ к /etc/sasldb2 или /etc/sasldb (или бд SQL, если используется).
ВАЖНО: К запуску полученного sasldb, убедитесь что вы установили SASL domain (realm) к полному квалифицированному доменному имени.
ПРИМЕР:
% saslpasswd -c -u `postconf -h myhostname` exampleuser
% saslpasswd2 -c -u `postconf -h myhostname` exampleuser
Вы можете узнать SASL представление об realms (областях) пользователей в sasldb с помощью sasldblistusers (Cyrus SASL версии 1.5.x) или sasldblistusers2 (Cyrus SASL версии 2.1.x).
На стороне Postfix, вы можете иметь только один realm на smtpd случай, и только пользователи принадлежащие к этому realm смогут аутентифицироваться. Postfix переменной smtpd_sasl_local_domain элементы управления realm используются smtpd: On the Postfix side, you can have only one realm per smtpd instance, and only the users belonging to that realm would be able to authenticate. The Postfix variable smtpd_sasl_local_domain controls the realm used by smtpd:
/etc/postfix/main.cf: smtpd_sasl_local_domain = $myhostname
ВАЖНО: Cyrus SASL парольной верификации сервисы pwcheck и saslauthd могут только поддерживать plaintext (открытым текстом) механизмы PLAIN или LOGIN. Тем не менее, Cyrus SASL библиотека не знает этого, и будет с счастливым видом объявлять другие аутентификационные механизмы, что эти SASL библиотеки включены, такие как DIGEST-MD5. Как результат, если SMTP клиент выбирает любой механизм отличный от PLAIN или LOGIN пока используются pwcheck или saslauthd, аутентификация будет неудачной. Таким образом может понадобиться ограничить список механизмов объявляемых Postfix.
Вместе с старыми версиями Cyrus SASL вы удаляете соответствующие библиотечные файлы от SASL подключаемой директории (и снова всякий раз когда система обновляется).
С Cyrus SASL версии 2.1.x или позже в переменной mech_list можно указать список аутентификационных механизмов которые Cyrus SASL может предложить:
/usr/local/lib/sasl2/smtpd.conf: mech_list: plain login
По одинаковым причин вы можете захотеть ограничить список плагинов используемых для аутентификации.
С Cyrus SASL версии 1.5.x у вас только выбор удалить соответствующие библиотечные файлы от SASL подключаемой директории.
С SASL версии 2.1.x:
/usr/local/lib/sasl2/smtpd.conf: pwcheck_method: auxprop auxprop_plugin: sql
Запуск софта chrot(ированного) с поддержкой SASL является интересной задачей. Это возможно не заслуживает беспокойства об этом.
Для проверки серверной части, соединитесь к SMTP серверу, и вы будет возможно беседовать как показано ниже. Информация отправляемая клиентом показана полужирным шрифтом.
220 server.example.com ESMTP Postfix EHLO client.example.com 250-server.example.com 250-PIPELINING 250-SIZE 10240000 250-ETRN 250-AUTH DIGEST-MD5 PLAIN CRAM-MD5 250 8BITMIME AUTH PLAIN AHRlc3QAdGVzdHBhc3M= 235 Authentication successful
Взамен AHRlc3QAdGVzdHBhc3M=, укажите base64 закодированную форму \0username\0password (\0 является нулевым байтом). Пример выше для пользователя `test' с паролем `testpass'.
В приказе сгенерировать base64 закодированную аутентификационную информацию вы можете использовать одну из следующих команд:
% printf '\0username\0password' | mmencode
% perl -MMIME::Base64 -e \ 'print encode_base64("\0username\0password");'
mmencode команда часть metamail софта. MIME::Base64 доступна на http://www.cpan.org/.
Осторожно: когда оприходуете логи переговоров SASL в общие списки, пожалуйста храните в уме эту пользователь/пароль информацию, ее возможно запросто восстановить из base64-encoded формы.
В исходниках Cyrus SASL вы найдете поддиректорию называемую "sample". Запустите make здесь, затем создайте символическую ссылку от sample.conf к smtpd.conf в вашей Cyrus SASL библиотечной директории /usr/local/lib/sasl2. Сделайте "su" к пользователю postfix (или как-нибудь вы укажите директиву в mail_owner):
% su postfix
затем запустите полученный пример сервера и клиента в отдельных терминалах. Пример приложений отправляет лог сообщения к syslog средствам auth. Проверьте лог для исправления проблем или запустите strace / ktrace / truss на сервере чтобы посмотреть какие вещи его не устраивают. Повторите предыдущий шаг до тех пока вы не сможете удачно аутентифицироваться с примером клиента. Только затем сделайте возврат для Postfix(а).
Включите на клиентской части SASL аутентификацию, и укажите таблицу [на-хост или на-цель доставки, информацию пользователь и пароль]. Postfix во-первых ищет таблицу для записей с серверным hostname; если нет записи, затем Postfix ищет таблицу для записи с next-hop (следующей) целью. Обычно, это правая часть почтового адреса, но это может быть также информацией которая указывается с помощью параметра relayhost или с помощью transport(5) таблицы.
/etc/postfix/main.cf: smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd smtp_sasl_type = cyrus /etc/postfix/sasl_passwd: foo.com username:password bar.com username [mail.myisp.net] username:password [mail.myisp.net]:submission username:password
Клиентский файл паролей Postfix SASL открывается перед входом SMTP сервера в опциальное chroot заключение, так что вы можете сохранить файл в /etc/postfix и установить разрешения чтение/запись только для root к хранению пользователь:пароль комбинций отдельно от других системных пользователей.
Postfix версии 2.3 поддержка-на-пользователь SASL парольной информации. Для поиска Postfix SASL пароля отправителем перед его поисками целей назначения, укажите:
/etc/postfix/main.cf: smtp_sender_dependent_authentication = yes smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd /etc/postfix/sasl_passwd: user@example.com username:password bar.com username [mail.myisp.net] username:password [mail.myisp.net]:submission username:password
Заметка: некоторые SMTP сервера поддерживают только PLAIN или LOGIN аутентификацию. По умолчанию Postfix SMTP клиент не используют аутентификационные методы которые отправляют plaintext пароли, и задерживает доставку с следующими сообщениями об ошибках: "Аутентификация провалена: не могу SASL аутентифицировать для сервера". Чтобы включить plaintext аутентификацию укажите, для примера:
/etc/postfix/main.cf: smtp_sasl_security_options = noanonymous
Заметка: Некоторые SMTP сервера поддерживают аутентификационные механизмы которые, хотя доступны на клиентской системе, могут не быть в практической работе или не обладать соответствующим мандатом для аутентификации для сервера. Это возможно через smtp_sasl_mechanism_filter параметр в дальнейшем ограничить список серверных механизмов которые smtp(8) клиент возьмет в анализ (разработку):
/etc/postfix/main.cf: smtp_sasl_mechanism_filter = !gssapi, !external, static:all
В примере выше, Postfix будет склоняться к использованию механизмов которые требуют специальной инфраструктуры такой как Kerberos или TLS.
Клиент Postfix SMTP обратно совместим с SMTP серверами которые используют не-стандартный синтаксис "AUTH=method..." в ответ к команде EHLO; здесь не Postfix клиента конфигурация нуждается в обходном маневре ее.