Перевод: Доморадов Алексей. Все права защищены. Copyright © 2008.
Примечание: При размещении данного материала у себя на сайте, просьба указывать ссылку на оригинальный сайт - www.sys-adm.org.ua.
Все замечания и предложения по переводу документации на русский язык, а также найденные ошибки и опечатки присылайте на мой электронный адрес.
Благодарности: Спасибо всем, кто помогал мне переводить эту документацию.
Особенное спасибо: Галинурову Кириллу и Грозаку Михаилу aka RedStalker_Mike.
Special thanks to: Igor Luzanov aka ISKATEL.
Тем, кому приходится сталкиваться с проблемами при установке Postfix могут ожидать, что Postfix более безопасный, чем некоторые другие MTA.
Библиотека Cyrus SASL содержит большое количество кода. С учетом этого, Postfix безопасен настолько, насколько и другие почтовые системы, которые используют библиотеку Cyrus SASL. Dovecot предоставляет альтернативную реализацию SASL, которую следует принимать во внимание.
Поддержка Postfix SASL (RFC 2554) может быть использована для аутентификации удаленных SMTP клиентов на SMTP сервере Postfix, а также для аутентификации SMTP клиента Postfix на удаленном SMTP сервере.
При получении почты, Postfix регистрирует имя пользователя, предоставляемое клиентом, метод аутентификации и адрес отправителя в файле maillog, а также дополнительно предоставляет почтовый доступ через UCE ограничение permit_sasl_authenticated.
При отправке почты, Postfix может просмотреть имя сервера или домен назначения (правая часть адреса) в таблице паролей SASL и если имя пользователя/пароль найдены, он будет использовать эти имя пользователя и пароль для аутентификации на сервере. Что касается версии 2.3, то Postfix может быть настроен для поиска своей таблицы паролей SASL по email адресу отправителя.
Этот документ охватывает следующие темы:
Данный документ описывает Postfix со следующими SASL реализациями:
Cyrus SASL версия 1 (клиент и сервер).
Cyrus SASL версия 2 (клиент и сервер).
Dovecot протокол версия 1 (только сервер, Postfix версия 2.3 и более поздние)
Postfix версии 2.3 предоставляет механизм плагинов (plug-in), который обеспечивает поддержку множества SASL реализаций. Для того, чтобы определить какие реализации встроены в Postfix используйте следующие команды:
% postconf -a (Поддержка SASL в SMTP сервере) % postconf -A (Поддержка SASL в SMTP+LMTP клиентах)
Нет необходимости напоминать, что эти команды недоступны в ранних версиях Postfix.
Поддержка SASL протокола Dovecot версии 1 доступна в Postfix 2.3 и более поздних. На момент написания, доступна только серверная часть SASL поддержки, так что вы не можете использовать ее для аутентификации на сервере ISP (ISP - Internet Service Provider). Dovecot использует собственный процесс-демон для аутентификации. Это обеспечивает простой процесс сборки Postfix, потому что нет необходимости подключать дополнительные библиотеки при сборке postfix.
Для генерирования необходимых Makefile'ов, выполните следующее в корневой директории Postfix:
% make makefiles CCARGS='-DUSE_SASL_AUTH -DDEF_SERVER_SASL_TYPE=\"dovecot\"'
После этого, продолжите с "make" как описано в документе УСТАНОВКА.
Примечание:
Параметр "-DDEF_SERVER_SASL_TYPE" не является необходимым; он просто делает настройку Postfix немного более удобной, потому что вам не надо указывать тип SASL плагина в файле настроек Postfix 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.5 или /usr/lib/sasl2 -> /usr/local/lib/sasl2 для версии 2.1.1.
По сообщениям, Microsoft Internet Explorer версии 5 требует нестандартный метод аутентификации SASL - LOGIN. Для включения этого метода аутентификации, укажите ``./configure --enable-login''.
Предполагается, что заголовочные файлы Cyrus SASL находятся в /usr/local/include, а библиотеки Cyrus SASL находятся в /usr/local/lib.
На некоторых системах это генерирует необходимые определения Make файла:
Для Cyrus SASL версии 1.5.5:
% make tidy # если у вас остались файлы от предыдущей сборки
% make makefiles CCARGS="-DUSE_SASL_AUTH -DUSE_CYRUS_SASL \
-I/usr/local/include" AUXLIBS="-L/usr/local/lib -lsasl"
Для Cyrus SASL версии 2.1.1:
% 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 вам необходимо указать информацию для динамической сборки, иначе ld.so не сможет найти динамическую библиотеку SASL:
Для Cyrus SASL версии 1.5.5:
% 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"
Для Cyrus SASL версии 2.1.1:
% 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 имен в получаемых заголовках сообщений (Postfix версии 2.3 и более поздние):
/etc/postfix/main.cf:
smtpd_sasl_authenticated_header = yes
Примечание: SASL login имена будут общедоступны.
Более ранние SMTP клиенты Microsoft используют нестандартную версию синтаксиса AUTH протокола, и ожидали, что SMTP сервер ответит на EHLO "250 AUTH=stuff" вместо "250 AUTH stuff". Для поддержки подобных клиентов (наряду с нормальными) используйте следующее:
/etc/postfix/main.cf:
broken_sasl_auth_clients = yes
Поддержка Dovecot SASL доступна в Postfix 2.3 и более поздних. На стороне Postfix вам необходимо указать расположение сокета демона аутентификации Dovecot. Мы используем путь относительно директории очереди Postfix, поэтому это будет работать независимо от того, запущен Postfix в chroot или нет:
/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.
В /usr/local/lib/sasl/smtpd.conf (Cyrus SASL версия 1.5.5) или /usr/local/lib/sasl2/smtpd.conf (Cyrus SASL версия 2.1.1) вам необходимо указать, как сервер должен проверять пароль клиента.
Примечание: некоторые сборки Postfix модифицированы и ищут файл smtpd.conf в /etc/postfix.
Примечание: некоторые сборки Cyrus SASL ищут файл smtpd.conf в /etc/sasl2.
Для аутентификации через базу данных UNIX паролей:
(Cyrus SASL version 1.5.5)
/usr/local/lib/sasl/smtpd.conf:
pwcheck_method: pwcheck
(Cyrus SASL version 2.1.1)
/usr/local/lib/sasl2/smtpd.conf:
pwcheck_method: pwcheck
Название файла в /usr/local/lib/sasl (Cyrus SASL версия 1.5.5) или /usr/local/lib/sasl2 (Cyrus SASL версия 2.1.1), используемое SASL библиотекой для настройки, может быть установлено с помощью:
/etc/postfix/main.cf:
smtpd_sasl_application_name = smtpd (Postfix < 2.3)
smtpd_sasl_path = smtpd (Postfix 2.3 и более поздние)
Демон pwcheck содержится в исходных кодах cyrus-sasl.
ВАЖНО: процессы postfix должны иметь разрешение чтение+выполнение для группы на директорию /var/pwcheck, иначе попытки аутентификации потерпят неудачу.
В качестве альтернативной возможности, в Cyrus SASL 1.5.26 и более поздние (включая 2.1.1), попробуйте следующее:
(Cyrus SASL версия 1.5.26)
/usr/local/lib/sasl/smtpd.conf:
pwcheck_method: saslauthd
(Cyrus SASL версия 2.1.1)
/usr/local/lib/sasl2/smtpd.conf:
pwcheck_method: saslauthd
Демон saslauthd также содержится в исходных кодах cyrus-sasl. Он более гибкий, чем демон pwcheck, в том смысле, что может аутентифицировать через PAM, а также множество других источников. Для использования PAM, запустите saslauthd с ключом "-a pam".
Для аутентификации через собственную базу данных паролей Cyrus SASL:
(Cyrus SASL версия 1.5.5)
/usr/local/lib/sasl/smtpd.conf:
pwcheck_method: sasldb
(Cyrus SASL версия 2.1.1)
/usr/local/lib/sasl2/smtpd.conf:
pwcheck_method: auxprop
Этот метод будет использовать файл паролей Cyrus SASL (по умолчанию: /etc/sasldb в версии 1.5.5, или /etc/sasldb2 в версии 2.1.1), который поддерживается с помощью команд saslpasswd или saslpasswd2 соответственно (являющихся частью ПО Cyrus SASL). На некоторых системах с недостаточной технической поддержкой команду saslpasswd необходимо запускать несколько раз для нормальной работы. SMTP серверу Postfix необходим доступ чтения на файл sasldb - вы можете поиграться с правами группового доступа. С механизмом аутентификации OTP, SMTP серверу также необходим доступ на ЗАПИСЬ в /etc/sasldb2 или /etc/sasldb (или базу данных SQL, если она используется).
ВАЖНО: Для запуска sasldb, убедитесь, что вы установили SASL realm в полностью квалифицированное доменное имя (FQDN).
ПРИМЕР:
(Cyrus SASL version 1.5.5)
% saslpasswd -c -u `postconf -h myhostname` exampleuser
(Cyrus SASL version 2.1.1)
% saslpasswd2 -c -u `postconf -h myhostname` exampleuser
Вы можете получить представление о том, как SASL хранит данные о пространствах имён (realms) пользователей в sasldb с помощью sasldblistusers (Cyrus SASL версия 1.5.5) или sasldblistusers2 (Cyrus SASL версия 2.1.1).
На стороне Postfix, вы можете использовать только одно пространство имён (realm) для каждого экземпляра демона smtpd, и только пользователи принадлежащие этому пространству смогут аутентифицироваться. Параметр smtpd_sasl_local_domain управляет пространством, используемым smtpd:
/etc/postfix/main.cf:
smtpd_sasl_local_domain = $myhostname
ВАЖНО: все пользователи должны иметь возможность аутентифицироваться используя ВСЕ механизмы аутентификации, предоставляемые Postfix, иначе сеанс может закончится с ошибкой - неподдерживаемый механизм, а аутентификация потерпит неудачу. Например, если вы настроили SASL использовать saslauthd для аутентификации через PAM (подключаемые модули аутентификации), то только PLAIN и LOGIN механизмы поддерживаются и дают возможность успешной аутентификации, кроме того библиотека SASL будет также предоставлять другие механизмы, такие как DIGEST-MD5. Это происходит потому, что эти механизмы становятся доступны через другие плагины, и библиотека SASL не имеет возможности узнать, что ваш единственный действительный источник аутентфикации - PAM. Следовательно вы должны ограничить список механизмов, предоставляемых Postfix.
Со старыми версиями Cyrus SASL вы удаляете соответствующие файлы библиотеки из директории плагинов SASL (и кадждый раз при обновлении системы).
С Cyrus SASL версия 2.1.1 и более поздние:
/usr/local/lib/sasl2/smtpd.conf:
mech_list: plain login
По этим же причинам вы можете захотеть ограничить список плагинов, используемых для аутентификации.
C Cyrus SASL версия 1.5.5 ваш единственный выбор - удалить соответствующие файлы библиотеки из директории плагинов SASL.
С SASL версия 2.1.1:
/usr/local/lib/sasl2/smtpd.conf:
pwcheck_method: auxprop
auxprop_plugin: sql
Запуска ПО в chroot с поддержкой 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 dGVzdAB0ZXN0AHRlc3RwYXNz 235 Authentication successful
Вместо dGVzdAB0ZXN0AHRlc3RwYXNz, укажите закодированную base64 форму username\0username\0password (\0 - нулевой байт). Пример выше для пользователя с именем 'test' и паролем 'testpass'.
Для генерирования base64 закодированной аутентификационной информации вы можете использовать одну из следующих команд:
% printf 'username\0username\0password' | mmencode
% perl -MMIME::Base64 -e \
'print encode_base64("username\0username\0password");'
Команда mmencode является частью ПО metamail. MIME::Base64 доступен на http://www.cpan.org/.
Предостережение: когда размещаете логи SASL сеансов в общедоступных списках, пожайлуста помните, что имя пользователя и пароль очень легко восстановить из base64 закодированной формы.
В исходных кодах Cyrus SASL вы найдете папку, названную "sample". Выполните в ней make, "su" для пользователя postfix (или любого другого, который задан в директиве mail_owner):
% su postfix
затем запустите получившийся в результате сборки сервер и клиент на разных терминалах. Для сервера выполните strace/ktrace/truss для того, чтобы увидеть что ему не нравится и исправьте проблему. Повторяйте предыдущий шаг до тех пор, пока вы сможете успешно аутентифицироваться с помощью простого клиента. Только тогда возращайтесь обратно к Postfix.
Включите клиентскую часть SASL аутентификации, и укажите таблицу с парами следующего вида: левая часть содержит хост или следующий пункт назначения (next-hop destination), а правая часть пару вида - имя_пользователя:пароль. Сначала Postfix ищет в таблице запись с именем хоста сервера; если ни одной таковой записи не было найдено, тогда Postfix ищет в таблице запись с пунктом следующего назначения (next-hop destination). Обычно, это правая часть почтового адреса, но это также может быть информация, указанная с помощью параметра 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 версии 2.3 поддерживает SASL пароли для каждого отправителя индивидуально. Для поиска 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 методы аутентификации. По умолчанию, SMTP клиент Postfix не использует методов, которые посылают пароли в открытом виде, и отклоняет доставку со следующим сообщением об ошибке: "Authentication failed: cannot SASL authenticate to server". Чтобы сделать возможной plaintext аутентификацию, укажите следующее:
/etc/postfix/main.cf:
smtp_sasl_security_options = noanonymous
Файл с паролями SASL клиентов открывается до смены корневого каталога SMTP-сервера, если она используется (помещение в chroot jail), т.е. вы можете оставить этот файл в /etc/postfix.
Примечание: Некоторые SMTP-сервера поддерживают механизмы аутентификации, которые, несмотря на то, что доступны на клиентских системах, на самом деле могут не работать или не обладать достаточными данными, для успешной аутентификации на сервере. С помощью параметра smtp_sasl_mechanism_filter можно ограничить список доступных на сервере механизмов для клиента smtp(8):
/etc/postfix/main.cf:
smtp_sasl_mechanism_filter = !gssapi, !external, static:all
В приведённом выше примере Postfix не будет использовать механизмы, требующие специальной инфраструктуры - наподобие Кербероса.
SMTP клиент Postfix отбратно совместим c SMTP серверами, использующими нестандартный синтаксис команды "AUTH=method..." в ответ на команду EHLO; никакой дополнительной конфигурации для нормальной работы клиента с такими серверами не требуется.
| Дата последнего обновления: 30.10.2008. | Postfix version: 2.3.4. |