Наши
Сайдбары
   
IRC-канал
Linuxportal.ru
   
Импорт новостей
 
Вход Быстрая регистрация На главную

Поиск:
 
   БИБЛИОТЕКА
     Другие статьи этого раздела:
 

    Сеть
Другие разделы библиотеки:
   БИБЛИОТЕКА Сеть    
Автор статьи: geekkoo
Дата: 18.12.2003

Postfix+Cyrus-SASL

Проблема

Для чего это вообще нужно? Представим ситуацию, что сотрудник вашей организации поехал в командировку, но при этом он хочет просматривать и отправлять почту через почтовый сервер вашей организации в каком-нибудь тамошнем интернет-кафе. Если в качестве почтового сервера вы используете Postfix, то со отправкой почты у вашего сотрудника возникнут проблемы (нужно очень постараться, чтобы заставить постфикс релеить почту). Править main.cf, добавляя эти самые интернет-кафе в relay_domains, не самый лучший выход - проще позволить сотруднику пройти авторизацию на сервере со своим логином и паролем. К сожалению, в стандартной поставке постфикса авторизации через SMTP не предусмотрено. Но вы можете воспользоваться для этой цели пакетом cyrus-sasl (simple authentication security level).

Софт

Вначале вам нужно проверить, что ваш постфикс поддерживает sasl (если это так - можете переходить сразу к следующему пункту). Вставляете в main.cf строку

smtpd_sasl_auth_enable = yes

делаете

service postfix reload

и если в maillog не появляется сообщений SASL support does not compiled in - значит все в порядке. Иначе придется приступить к компиляции postfix и cyrus-ssl.
Берем последнии версии того и другого (c и ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/) - у меня это postfix-2.0.16 и cyrus-sasl-2.1.15. Имейте ввиду, что как для postfix так и для cyrus-sasl многие конфигурационный параметры в версиях 1.x называются по другому и я не берусь обсуждать настройку более ранних версий.
Начинаем с sasl (в системе у вас должны быть установлены пакеты БерклиДБ - они идут вместе с glibc, но могут быть упакованы в отдельные пакеты - в слакваре это db1* db2* db3* - я на всякий случай установил все).

./configure --disable-krb4 --disable-gssapi --with-pwcheck --enable-login
make
make install

(или пользуйтесь скриптом createpkg)
Можно еще поиграть с ключом --prefix=/usr. По умолчанию cyrus-sasl устанавливается в /usr/local/lib/sasl2, но конфиг файлы ищет в /usr/lib/sasl2 - так что не забудьте после установки по умолчанию сделать линк
ln -s /usr/local/lib/sasl2 /usr/lib/sasl2
Теперь беремся за постфикс. Скрипта ./configure там нет - поэтому правим Makefile таким вот образом:

make tidy
make makefiles -i Makefile.in 'CCARGS=-DUSE_SASL_AUTH -I/usr/local/include/sasl'\
'AUXLIBS=-L/usr/local/lib -R/usr/local/lib -lsasl2'

После чего устанавливаем и приступаем к конфигурации.

Выбираем механизм аутентификации

SASL позволяет проверять аутентичность пользователя несколькими способами, причем для каждого приложения этот способ может быть задан отдельно с помощью конфиг файла /usr/lib/sasl2/appname.conf Нас интересует smtpd, так что создайте файл /usr/lib/sasl2/smtpd.conf и добавляйте туда 2 строки

pwcheck_method: auxprop
mech_list: login plain

(!!!В SASL версий 1.х этот метод называется не auxprop, а sasldb!!!)
В данном случае используется метод чтения из базы данных виртуальных пользователей /etc/sasldb2 и мэйл-клиенту на выбор предлагается два механизма аутентифицировать пользователя - login и plаin password (для начала хватит - Аутглюк использует login, Mozilla, Bat! - plain). После чего создаем эту базу данных -

saslpasswd2 -c -u mail.rogaikopyta.ru -a smtpauth test

, те в данном случае вы позволяете аутентифицироваться пользователю с адресом test@mail.rogaikopyta.ru Потом вас попросят ввести пароль (ваше дело какой, но лучше выберете testpass ).
Поскольку постфикс будет напрямую читать файл /etc/sasldb2, то поправтьте права на этот файл:

chown postfix /etc/sasldb2

Просмотреть всех sasl пользователей можно командой sasldblistusers2 (в нашем случае вывод будет такой:

# sasldblistusers2
test@mail.rogaikopyta.ru: userPassword
test@mail.rogaikopyta.ru: cmusaslsecretOTP

), удалить - saslpasswd2 -d test@mail.rogaikopyta.ru

В принципе на этом все - можно конфигурировать постфикс. Добавлю только, что из других способов аутентификации можно использовать чтение напрямую логинов системных пользователей из /etc/shadow (pwcheck_method: shadow - но как вы понимаете в этом случае postfix должен обладать групповыми правами root), или посредством демонов pwcheck (pwcheck_method: pwcheck) и saslauthd (pwcheck_method: saslauthd) запущенных из-под рута (в первом случае командой - pwcheck, но предварительно создайте директорию /var/pwcheck). Если кто знает как скрестить saslauthd и постфикс пишите сюда.

Конфигурируем postfix

Во первых редактируете файл /etc/postfix/master.cf (для чего не знаю, но знающие люди рекомендуют)

smtp inet n n n - - smtpd

После чего правите main.cf добавляя параметры:

smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options =
smtpd_sasl_local_domain =
smtpd_client_restrictions = permit_sasl_authenticated
smtpd_sender_restrictions = permit_sasl_authenticated
broken_sasl_auth_clients = yes

и добавляете опцию permit_sasl_authenticated в список smtpd_recipient_restrictions. Привожу отрывок из своего файла:

smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options =
smtpd_sasl_local_domain =
smtpd_client_restrictions = permit_sasl_authenticated
smtpd_sender_restrictions = permit_sasl_authenticated
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions =
permit_sasl_authenticated,
permit_mynetworks,
reject_unauth_destination,
reject_invalid_hostname,
reject_non_fqdn_hostname,
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_unknown_sender_domain,
reject_unknown_recipient_domain,
reject_unauth_pipelining,
check_helo_access hash:/etc/postfix/helo_checks,
check_client_access hash:/etc/postfix/client_checks,
reject_rbl_client list.dsbl.org,
reject_rbl_client cbl.abuseat.org,
reject_rbl_client relays.ordb.org,
reject_rbl_client opm.blitzed.org,
reject_rbl_client sbl.spamhaus.org,
permit

По поводу smtpd_sasl_local_domain =. Этот параметр (по идее) позволяет регистрироваться пользователям с именем без доменной части (например просто test, а не test@mail.rogaikopyta.ru). Насколько я понял, в таком случае postfix будет в качестве доменной части цеплять $myhostname (те при добавлении пользователя мы предполагали, что myhostname = mail.rogaikopyta.ru). В принципе это не важно, если вам удасться обучить пользователей регистрироваться своим полным именем (user@rogaikopyta.ru) и вы добавите пользователя командой saslpasswd2 -c -u rogaikopyta.ru -a smtpauth user.
Теперь делаем postfix reload и с любой машины в вашей сетке попробуйте протестировать его (жирным отмечены команды, которые вводите вы, остальное - ответ сервера)
Quote:


$telnet mail.rogaikopyta.ru 25
Trying 192.168.1.254...
Connected to mail.rogaikopyta.ru.
Escape character is '^]'.
220 mail.rogaikopyta.ru ESMPT Postfix (2.0.16)
ehlo rogaikopyta.ru
250-mail.rogaikopyta.ru
250-PIPELINING
250-SIZE 10240000
250-ETRN
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250 8BITMIME
auth plain
334
dGVzdAB0ZXN0AHRlc3RwYXNz
235 Authentication successful


Ругательства после ответа сервера 334 - это test и testpass base 64encoded ( printf 'test\0test\0testpass' | mmencode). Если у вас пароль testpass, можете просто скопировать эту строчку, если нет - то ваш пароль вам придется перкодировать с помощью mmencode.
На этом я и закончу. Вам остается только выкинуть из sasldb2 пользователя test и накидать туда реальных пользователей.

Благодарности
Andrew E Kuznetsoff ака Разгильдяю на обкуренной кошке за помощь в тестировании моей установки postfix и cyrus-sasl.

Ссылки
Рекомендую также посмотреть ресурс Мультика - там настройка гораздо более серьезная.



Все статьи раздела "Сеть"
©"Linuxportal.Ru". Материалы сайта можно
использовать свободно при условии
сохранения этой свободы при дальнейшем
распространении, если явно не указано иное

Дизайн и программирование:

Поставьте
нашу кнопку:
Получить код кнопки
Linux Portal.ru ::: Линукс Портал.ру
Наш партнер: