PDA

Просмотр полной версии : Аутентификация в sendmail.


Arsak
05.02.2008, 18:45
Добавил аутентификацию в сендмейл с помощью saslauthd. Вот мс-файл:
include(`../m4/cf.m4')
VERSIONID(`unix')
OSTYPE(linux)
FEATURE(`use_cw_file')dnl
FEATURE(`virtusertable', `hash -o /etc/mail/virtusertable.db')

define(`confAUTH_OPTIONS',`A y')
TRUST_AUTH_MECH(`DIGEST-MD5 LOGIN PLAIN CRAM-MD5 GSSAPI')
define(`confAUTH_MECHANISMS',`DIGEST-MD5 LOGIN PLAIN CRAM-MD5 GSSAPI')
FEATURE(`no_default_msa')
DAEMON_OPTIONS(`Port=25,Name=MTA,M=E')

define(`confMAX_MESSAGE_SIZE',`2200000')

define(`confLOCAL_MAILER',`cyrusv2')
define(`CYRUSV2_MAILER_ARGS',`FILE путь_к_lmtp-сокету')

MAILER(local)dnl
MAILER(smtp)dnl
MAILER(`cyrusv2')

Однако проблема вот в чём. Если в почтовом клиенте указать "SMTP сервер требует аутентификацию", всё нормально отрабатывает. Однако если эту настройку снять, то сендмейл всё равно отправляет почту; по крайней мере внутри домена это так. В логах исчезает строка auth. Т.е. указываешь клиенту аутентификацию - он её проходит; убираешь аутентификацию - отправляет без неё. Чего не хватает в мс, чтобы без аутентификации вообще не было отправки почты?

Артур Крюков
07.02.2008, 09:11
Как я понял, ваш почтовик принимает почту для домена (условно говоря a.com).
Т.е. в local-host-names записано a.com.

При попытке отправить письмо на mail.ru аутентификацию спрашивает и позволяет отправить только если ее прошли.
При попытке отправить письмо в a.com отправляется без аутентификации?

Я правильно понял ситуацию?

Arsak
07.02.2008, 15:37
Как я понял, ваш почтовик принимает почту для домена (условно говоря a.com).
Т.е. в local-host-names записано a.com.

При попытке отправить письмо на mail.ru аутентификацию спрашивает и позволяет отправить только если ее прошли.
При попытке отправить письмо в a.com отправляется без аутентификации?

Я правильно понял ситуацию?

Да, так и есть. К счастью за пределы домена без аутентификации не отправляет. А внутри домена - включишь аутентификацию на клиенте - будет проходить аутентификацию, не включишь - отправит так. Вроде от постфикса мне удавалось добиться, чтобы аутентификация была независимо не от чего. А на сендмейле такое разделение.

Артур Крюков
08.02.2008, 11:17
Итак, немного теории.

Ваш почтовый сервер настроен так, что бы принимать почту для домена a.com. Поэтому все письма для этого домена он принимает.

К Вашему почтовому серверу на 25 порт по протоколам SMTP|ESMTP могут подключаться как другие почтовые сервера, так и почтовые клиенты. Он не знает кто из них подключился. Он смотрит, если письмо предназначено для пользователя в домене a.com и он обслуживает этот домен, тогда он его принимает и никакой аутентификации не требует.

Если письмо предназначено для другого домена, который он не поддерживает, тогда сервер должен принять решение о возможности RELAY. В Вашем случае он запрашивает аутентификацию. Клиент может аутентифицироваться, поэтому письма от него принимаются. Другие почтовики не могут аутентифицироватся, поэтому письма от них не принимаются.

И это нормальная работа сервака.

В sendmail есть возможность включения аутентификации для приема почты для поддерживаемых доменов. НО! Тогда и остальные сервера во ВСЕМ Интернет должны знать логин и пароль на ваш почтовик.

А теперь подумайте: если любой человек в Интернет может послать письмо пользователю в Вашем домене, зачем ограничивать Ваших пользователей на отправку писем Вашим же клиентам? Нелогично как то получается.

Если у Вас стоит задача ограничить Ваших пользователей на отправление почты по определенным адресам, тогда пользуйтесь access.db.

Arsak
08.02.2008, 14:27
А теперь подумайте: если любой человек в Интернет может послать письмо пользователю в Вашем домене, зачем ограничивать Ваших пользователей на отправку писем Вашим же клиентам? Нелогично как то получается.
Да вроде всё так. Но при такой схеме принимается почта и для несуществующего abrakadabra@a.com (у меня юзеры хранятся в ldap-каталоге). Теоретически получается возможным, что злоумышленник извне может загадить почтовое хранилище (или внутри кто-нибудь с ошибкой наберёт адрес), и его нужно будет мониторить на предмет появления левых ящиков.

В sendmail есть возможность включения аутентификации для приема почты для поддерживаемых доменов. НО! Тогда и остальные сервера во ВСЕМ Интернет должны знать логин и пароль на ваш почтовик.
Да, обычному релею такое не нужно. Кажется, что только для SMART_HOST может такое понадобиться.

Артур Крюков
08.02.2008, 18:40
Да вроде всё так. Но при такой схеме принимается почта и для несуществующего abrakadabra@a.com (у меня юзеры хранятся в ldap-каталоге). Теоретически получается возможным, что злоумышленник извне может загадить почтовое хранилище (или внутри кто-нибудь с ошибкой наберёт адрес), и его нужно будет мониторить на предмет появления левых ящиков..

Батенька, учите матчасть и принципы работы почтовых серверов :)

1. Почта для такого акбара не принимается. Для того что бы почта была принята должен быть заведен ящик (пользователь на машине, в LDAP, где угодно).

2. Sendmail сам ящики не создает.

3. Сендмайлу все равно где хранятся учетки пользователей. Хоть на луне :)

Arsak
09.02.2008, 21:02
Для того что бы почта была принята должен быть заведен ящик (пользователь на машине, в LDAP, где угодно).
У меня mailer cyrus собран с autocreate патчем. Сначала показалось, что авто-создание ящика на получение письма будет полезной функцией. Но из-за указанных выше соображений я убрал из imapd.conf настройку createonpost: true. Оставил только createonlogin: true. :)

Артур Крюков
09.02.2008, 21:26
У меня mailer cyrus собран с autocreate патчем. Сначала показалось, что авто-создание ящика на получение письма будет полезной функцией. Но из-за указанных выше соображений я убрал из imapd.conf настройку createonpost: true. Оставил только createonlogin: true. :)

О! Еще один гиперленивый админ :)

- А вы и конфеты за меня есть будете?

- Ага!

(с) мультик