Postfix SASL Howto


ВНИМАНИЕ:

Люди, которые идут на трудности в установке postfix, могут сделать postfix более безопаснее чем другие почтовые системы. Библиотека Cyrus SASL решение этой задачи. С ним, postfix становится таким же безопасным как другие почтовые системы, которые используют библиотеку Cyrus SASL. Dovecot обеспечивает альтернативу что может оказаться ценным в сложившихся обстоятельствах.

Как postfix использует SASL проверку информации

Postfix SASL поддерживает (RFC 2554) возможность использовать проверку удаленных SMTP клиентов на postfix SMTP сервере, и проверять postfix SMTP клиента на удаленном SMTP сервере.

Когда принимается почта, postfix записывает в журнал клиент-предусматриваемое имя-пользователя, метод проверки, и адрес отправителя в maillog файл, и опциально разрешает почтовый доступ через permit_sasl_authenticated UCE ограничение.

Когда отправляется почта, Postfix может делать поиск имени узла сервера или домена назначения (правая часть адреса) в таблице паролей Postfix SASL, и если пользователь/пароль там есть, он будет использовать это пользовательское имя и пароль для аунтентификации к серверу. И так с версии 2.3, Postfix может быть сконфигурирован к поиску его SASL таблицы паролей email адресом отправляющего.

Этот документ охватывает следующие темы:

Какие SASL реализации поддерживаются

Этот документ описывает postfix с следующими SASL реализациями:

Postfix версии 2.3 включает подключаемый механизм который обеспечивает поддержку различных SASL реализаций. Для определения, что данная реализация встроена в postfix, используются следующие команды:

% postconf -a (SASL support in the SMTP server)
% postconf -A (SASL support in the SMTP+LMTP client)

Необходимо сказать что эти команды не поддерживаются в ранних версиях postfix.

Сборка postfix с поддержкой Dovecot SASL

Поддержка для 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.

Заметки:

Сборка Cyrus SASL библиотеки

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''

Сборка Postfix с поддержкой Cyrus SASL

Далее предполагается что Cyrus SASL инклуд файлы находятся в /usr/local/include, и что библиотеки Cyrus SASL находятся в /usr/local/lib.

На некоторых системах это создается необходимыми определениями в Makefile:

(для Cyrus SASL версии 1.5.x):
% 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.x):
% 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:

(для Cyrus SASL версии 1.5.x):
% 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.x):
% 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 аутентификации в Postfix SMTP server

Чтобы приказать включить поддержку 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 SMTP сервера

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 конфигурация для сервера SMTP Postfix

Вам необходимо сконфигурировать как 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.

ВАЖНО: Cyrus SASL парольной верификации сервисы pwcheck и saslauthd могут только поддерживать plaintext (открытым текстом) механизмы PLAIN или LOGIN. Тем не менее, Cyrus SASL библиотека не знает этого, и будет с счастливым видом объявлять другие аутентификационные механизмы, что эти SASL библиотеки включены, такие как DIGEST-MD5. Как результат, если SMTP клиент выбирает любой механизм отличный от PLAIN или LOGIN пока используются pwcheck или saslauthd, аутентификация будет неудачной. Таким образом может понадобиться ограничить список механизмов объявляемых Postfix.

По одинаковым причин вы можете захотеть ограничить список плагинов используемых для аутентификации.

Запуск софта chrot(ированного) с поддержкой SASL является интересной задачей. Это возможно не заслуживает беспокойства об этом.

Тестирование SASL аутентификации в Postfix SMTP сервере

Для проверки серверной части, соединитесь к 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 формы.

Поиск несправностей SASL внутри

В исходниках 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 SMTP клиенте

Включите на клиентской части 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 клиента конфигурация нуждается в обходном маневре ее.

Разработчики документа

Hosted by uCoz