Один из самых простых методов аутентификации для smtp сервера это использование sasl. Для пользователей работающих в локальной сети системный администратор может настроить список доверенных сетей и пользователи смогут работать без аутентификации, но если сервер стоит на хостинге или пользователи хотят подключаться к нему из внешней сети сразу же требуется аутентификация.
Логика работы почтового сервера postfix такова, если ты являешься аутентифицированным пользователем или работаешь в довереннй сети, то postfix позволяет отправлять через него сообщения на другие почтовые сервера другим пользователям, если пользователь не прошел аутентификацию, то он может отправить почту только пользователям локального сервера.
SASL позволяет проверять аутентичность пользователя несколькими способами, причем для каждого приложения этот способ может быть задан отдельно с помощью конфиг файла /usr/lib/sasl2/appname.conf Нас интересует smtpd, так что создайте файл /usr/lib/sasl2/smtpd.conf и добавляйте туда 2 строки
pwcheckmethod: auxprop
(!!!В SASL версий 1.х этот метод называется не auxprop, а sasldb!!!)
В данном случае используется метод чтения из базы данных виртуальных пользователей /etc/sasldb2 и мэйл-клиенту на выбор предлагается два механизма аутентифицировать пользователя - login и plаin password (для начала хватит - Аутглюк использует login, Mozilla, Bat! - plain). После чего создаем эту базу данных -
mechlist: login plain
saslpasswd2 -c -u mail.rogaikopyta.ru -a smtpauth test\\
, те в данном случае вы позволяете аутентифицироваться пользователю с адресом test@mail.rogaikopyta.ru Потом вас попросят ввести пароль (ваше дело какой, но лучше выберете testpass ). Поскольку постфикс будет напрямую читать файл /etc/sasldb2, то поправтьте права на этот файл:
chown postfix /etc/sasldb2\\
Просмотреть всех sasl пользователей можно командой sasldblistusers2 (в нашем случае вывод будет такой:
sasldblistusers2
saslpasswd2 -c -u mail.rogaikopyta.ru -a smtpauth test
test@mail.rogaikopyta.ru: userPassword
test@mail.rogaikopyta.ru: cmusaslsecretOTP
удалить - saslpasswd2 -d test@mail.rogaikopyta.ru\\
В принципе на этом все - можно конфигурировать постфикс. Добавлю только, что из других способов аутентификации можно использовать чтение напрямую логинов системных пользователей из /etc/shadow (pwcheckmethod: shadow - но как вы понимаете в этом случае postfix должен обладать групповыми правами root), или посредством демонов pwcheck (pwcheckmethod: pwcheck) и saslauthd (pwcheck_method: saslauthd) запущенных из-под рута (в первом случае командой - pwcheck, но предварительно создайте директорию /var/pwcheck). Если кто знает как скрестить saslauthd и постфикс пишите сюда.
Конфигурируем postfix
Во первых редактируете файл /etc/postfix/master.cf
smtp inet n n n - - smtpd
После чего правите main.cf добавляя параметры:
smtpdsaslauthenable = yes
и добавляете опцию permitsaslauthenticated в список smtpdrecipientrestrictions. Привожу отрывок из своего файла:
smtpdsaslsecurityoptions =
smtpdsasllocaldomain =
smtpdclientrestrictions = permitsaslauthenticated
smtpdsenderrestrictions = permitsaslauthenticated
brokensaslauthclients = yes
smtpdsaslauthenable = yes
smtpdsaslsecurityoptions =
smtpdsasllocaldomain =
smtpdclientrestrictions = permitsaslauthenticated
smtpdsenderrestrictions = permitsaslauthenticated
brokensaslauthclients = yes
smtpdrecipientrestrictions =
permitsaslauthenticated
permitmynetworks
rejectunauthdestination
rejectinvalidhostname
rejectnonfqdnhostname
rejectnonfqdnsender
rejectnonfqdnrecipient
rejectunknownsenderdomain
rejectunknownrecipientdomain
rejectunauthpipelining
checkheloaccess hash:/etc/postfix/helochecks
checkclientaccess hash:/etc/postfix/clientchecks
rejectrblclient list.dsbl.org
rejectrblclient cbl.abuseat.org
rejectrblclient relays.ordb.org
rejectrblclient opm.blitzed.org
rejectrblclient sbl.spamhaus.org
permit
По поводу smtpdsasllocal_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.
Ссылки Рекомендую также посмотреть ресурс Мультика http://www.multik.ru/linux/ispmailv2/ - там настройка гораздо более серьезная.