Проблема Для чего это вообще нужно? Представим ситуацию, что сотрудник вашей организации поехал в командировку, но при этом он хочет просматривать и отправлять почту через почтовый сервер вашей организации в каком-нибудь тамошнем интернет-кафе. Если в качестве почтового сервера вы используете 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 http://www.postfix.org/download.html и 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 , те в данном случае вы позволяете аутентифицироваться пользователю с адресом Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script Потом вас попросят ввести пароль (ваше дело какой, но лучше выберете testpass). Поскольку постфикс будет напрямую читать файл /etc/sasldb2, то поправтьте права на этот файл: chown postfix /etc/sasldb2 Просмотреть всех sasl пользователей можно командой sasldblistusers2 (в нашем случае вывод будет такой: # sasldblistusers2 Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script : userPassword Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script : cmusaslsecretOTP ), удалить — saslpasswd2 -d Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script В принципе на этом все — можно конфигурировать постфикс. Добавлю только, что из других способов аутентификации можно использовать чтение напрямую логинов системных пользователей из /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, а не Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script ). Насколько я понял, в таком случае postfix будет в качестве доменной части цеплять $myhostname (те при добавлении пользователя мы предполагали, что myhostname = mail.rogaikopyta.ru). В принципе это не важно, если вам удасться обучить пользователей регистрироваться своим полным именем (Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script ) и вы добавите пользователя командой 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. Ссылки Рекомендую также посмотреть ресурс Мультика http://www.multik.ru/linux/ispmailv2/ — там настройка гораздо более серьезная. |