Настройка SASL аутентификации для Postfix |
[исправить] |
Статья о том как сделать sasl на postfix'е и убедиться в его работоспособности.
Задача:
Установить sasl и postfix и сделать авторизацию вида:
1) отправлять письма могут только пользователи системы (/etc/passwd).
2) все остальные не пропускать.
Система: FreeBSD 7.0
Установка:
1) /usr/ports/secutiry/cyrus-sasl2
[+] AUTHDAEMOND
[+] LOGIN
[+] PLAIN
make install clean
(если программы уже были установлены то повторно вызвать меню опций при
установке можно командой make config)
2) /usr/ports/security/cyrus-sasl2-saslauthd
make install clean
3) создаем и редактируем /usr/local/lib/sasl2/smtpd.conf:
pwcheck_method: saslauthd
mech_list: plain login
далее добавляем в /etc/rc.conf:
saslauthd_enable="YES"
saslauthd_flags="-a pam"
4) Теперь постифкс
/usr/ports/mail/postfix
[+]SASL2
make install clean
при установке на все вопросы ответить утвердительно "y"
5) теперь мини-рабочий конфиг постфикса:
/usr/local/etc/postfix/main.cf
queue_directory = /var/spool/postfix
command_directory = /usr/local/sbin
daemon_directory = /usr/local/libexec/postfix
mail_owner = postfix
myhostname = host.domain.ru
mydomain = domain.ru
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
smtpd_sasl_auth_enable = yes
smtpd_security_options = noanonymous
smtpd_client_restrictions =
permit_sasl_authenticated,
reject_plaintext_session
smtpd_sender_restrictions =
permit_sasl_authenticated,
reject_plaintext_session
(!!! Внимание, господа, эта статья требует чтобы в конфиге postfix не было упоминаний mynetworks)
6) Теперь просто в консоли из под рута
newaliases
эта команда создаст файл /etc/aliases.db необходимый для постфикса
7) Для тестирования желательно иметь php на машинке потому как sasl механизм
login и plain используют
технологию шифрования base64 и для обработки "руками" логина и пароля нужно будет написать скриптик:
<?php
print base64_encode("логин");
print "\n";
print base64_encode("пароль");
print "\n";
?>
P.S. (Кому интересно plain это base64_encode("логин\0логин\0пароль");)
тоже самое на Perl:
perl -e 'use MIME::Base64; print encode_base64("логин") . "\n" .encode_base64("пароль"). "\n"'
8) Перезагружаем postfix
Тестирование SASL.
1) тестирование "руками":
telnet айпиадрес 25
оно оветит:
220 host.domain.ru ESMTP Postfix
говорим ему:
ehlo host
(где host -имя машины)
оно ответит:
220 host.domain.ru ESMTP Postfix
250-host.domain.ru
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH LOGIN PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
если есть строка 250-AUTH LOGIN PLAIN - то значит есть вероятность успеха.
теперь заходим без авторизации и смотрим как наше сообщение не проходит:
mail from: [email protected]
оно:
250 2.1.0 Ok
мы:
rcpt to: [email protected]
оно:
554 5.7.1 <[email protected]>: Relay access denied
- значит все отлично нас не пустили просто так.
напечатайте
quit
и теперь идем с регистрацией:
telnet айпиадрес 25
220 host.domain.ru ESMTP Postfix
ehlo host
250-host.domain.ru
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH LOGIN PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
теперь вводим:
auth login
оно скажет нам сообщение вида:
334 VXNlcm5hbWU6
теперь запускаем, предварительно заполнив, тот скриптик который был указан выше
и вводим наш логин зашифрованный base64 в ответ на последнее сообщение.
у меня это:
cGVuc2U=
на что сервер ответил
334 UGFzc3dvcmQ6
теперь пароль в том же виде:
cnZpZGlh
на что оно нам ответит если все было правильно:
235 2.0.0 Authentication successful
вот оно - авторизация пройдена.
теперь соответственно
mail from:
rcpt to:
data
hello world
.
quit
все. письмо отправлено.
|
|
|
|
Раздел: Корень / Администратору / Сетевые сервисы / Mail, почта / Безопасность и установка ограничений |