Просмотр полной версии : Аутентификация в sendmail.
Добавил аутентификацию в сендмейл с помощью 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 отправляется без аутентификации?
Я правильно понял ситуацию?
Как я понял, ваш почтовик принимает почту для домена (условно говоря 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.
А теперь подумайте: если любой человек в Интернет может послать письмо пользователю в Вашем домене, зачем ограничивать Ваших пользователей на отправку писем Вашим же клиентам? Нелогично как то получается.
Да вроде всё так. Но при такой схеме принимается почта и для несуществующего abrakadabra@a.com (у меня юзеры хранятся в ldap-каталоге). Теоретически получается возможным, что злоумышленник извне может загадить почтовое хранилище (или внутри кто-нибудь с ошибкой наберёт адрес), и его нужно будет мониторить на предмет появления левых ящиков.
В sendmail есть возможность включения аутентификации для приема почты для поддерживаемых доменов. НО! Тогда и остальные сервера во ВСЕМ Интернет должны знать логин и пароль на ваш почтовик.
Да, обычному релею такое не нужно. Кажется, что только для SMART_HOST может такое понадобиться.
Артур Крюков
08.02.2008, 18:40
Да вроде всё так. Но при такой схеме принимается почта и для несуществующего abrakadabra@a.com (у меня юзеры хранятся в ldap-каталоге). Теоретически получается возможным, что злоумышленник извне может загадить почтовое хранилище (или внутри кто-нибудь с ошибкой наберёт адрес), и его нужно будет мониторить на предмет появления левых ящиков..
Батенька, учите матчасть и принципы работы почтовых серверов :)
1. Почта для такого акбара не принимается. Для того что бы почта была принята должен быть заведен ящик (пользователь на машине, в LDAP, где угодно).
2. Sendmail сам ящики не создает.
3. Сендмайлу все равно где хранятся учетки пользователей. Хоть на луне :)
Для того что бы почта была принята должен быть заведен ящик (пользователь на машине, в LDAP, где угодно).
У меня mailer cyrus собран с autocreate патчем. Сначала показалось, что авто-создание ящика на получение письма будет полезной функцией. Но из-за указанных выше соображений я убрал из imapd.conf настройку createonpost: true. Оставил только createonlogin: true. :)
Артур Крюков
09.02.2008, 21:26
У меня mailer cyrus собран с autocreate патчем. Сначала показалось, что авто-создание ящика на получение письма будет полезной функцией. Но из-за указанных выше соображений я убрал из imapd.conf настройку createonpost: true. Оставил только createonlogin: true. :)
О! Еще один гиперленивый админ :)
- А вы и конфеты за меня есть будете?
- Ага!
(с) мультик
Работает на vBulletin® версия 3.7.4. Copyright ©2000-2008, Jelsoft Enterprises Ltd. Перевод: zCarot