Exim + dovecot проблема с аутентификацией

EXIM, sendmail, postfix, Dovecot и прочие. Решение проблем связанных с работой электронной почты

Модератор: xM

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
neooleg
проходил мимо
Сообщения: 8
Зарегистрирован: 2010-12-01 0:43:40

Exim + dovecot проблема с аутентификацией

Непрочитанное сообщение neooleg » 2010-12-01 1:09:44

Здравствуйте. Настраивал указанную связку по статье ув. Лисяры. Огромное ему спасибо за титанический труд!
Не все заработало сразу, но в целом, со многим разобрался, но не могу победить проблему авторизации, причем при отправке.
Конфиг приведенный Лисярой пришлось поправить (помимо специфичных правок на домены, добавления логирования и т.п), в частности изменил параметр default_pass_scheme:

Код: Выделить всё

default_pass_scheme = MD5-CRYPT #PLAIN
Автор предлагал использовать PLAIN, но postfixadmin пишет пароли зашифрованные (я так полагаю, md5 + соль что называется MD5-CRYPT схема), когда заменил - заработала авторизация при получении писем. Но при отправке, ни plain способ не работает:
2010-12-01 00:02:52 [31296] auth_login authenticator failed for ([192.168.1.10]) [95.135.129.146]:22490 I=[91.218.38.143]:25: 535 Incorrect authentication data (set_id=test@devtour.com)
ни md5_cramp:
2010-12-01 00:01:33 [31088] SMTP connection from [95.135.129.146]:22486 I=[91.218.38.143]:25 (TCP/IP connection count = 1)
2010-12-01 00:01:33 [31292] auth_cram_md5 authenticator failed for ([192.168.1.10]) [95.135.129.146]:22486 I=[91.218.38.143]:25: 535 Incorrect authentication data
При этом если подсунуть строку пароля из таблицы mailbox - происходит авторизация. Что наводит на выводы о установленной plain схеме для exim.

На всякий случай:

Код: Выделить всё

# А вот по какому методу авторизуется оутглюк - я уже и
# не помню... Хотя в своё время долго ковырялся,
# пока настроил... Толь plain, толь login...
auth_plain:
  driver = plaintext
  public_name = PLAIN
  server_condition = ${lookup mysql{SELECT `username` FROM \
                     `mailbox` WHERE `username` = \
                     '${quote_mysql:$auth2}' AND `password` = \
                     '${quote_mysql:$auth3}'}{yes}{no}}
  server_prompts = :
  server_set_id = $auth2

# Вроде по этому оутглюк, а по предыдущему нетскейп.
auth_login:
  driver = plaintext
  public_name = LOGIN
  server_condition = ${lookup mysql{SELECT `username` FROM \
                     `mailbox` WHERE `username` = \
                     '${quote_mysql:$auth1}' AND `password` = \
                     '${quote_mysql:$auth2}'}{yes}{no}}
  server_prompts = Username:: : Password::
  server_set_id = $auth1

# А так авторизуется "Летучая Мышь" - TheBat!
auth_cram_md5:
  driver = cram_md5
  public_name = CRAM-MD5
  server_secret = ${lookup mysql{SELECT `password` FROM \
                        `mailbox` WHERE `username` \
                        = '${quote_mysql:$auth1}'}{$value}fail}
  server_set_id = $auth2
Сколько не искал по форуму, ни гуглил - у всех при возникновении ошибки на auth_cram_md5, в скобках, после ошибки пишется присвоенный set_id, например "(set_id=test@devtour.com)", думаю имя с которым авторизуются - у меня же нет такого при auth_cram_md5, при этом наблюдается на auth_login, см. выше.
Меня это несколько настораживает, но может быть разница из-за версии Exim`а..

Помогите, пожалуйста, разораться с проблемой! Уже третий день бьюсь без толку.
--
CentOS 5.4
Exim 4.72
Dovecot 1.0.7

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

neooleg
проходил мимо
Сообщения: 8
Зарегистрирован: 2010-12-01 0:43:40

Re: Exim + dovecot проблема с аутентификацией

Непрочитанное сообщение neooleg » 2010-12-01 1:28:22

neooleg писал(а):Сколько не искал по форуму, ни гуглил - у всех при возникновении ошибки на auth_cram_md5, в скобках, после ошибки пишется присвоенный set_id, например "(set_id=test@devtour.com)", думаю имя с которым авторизуются - у меня же нет такого при auth_cram_md5, при этом наблюдается на auth_login, см. выше.
Меня это несколько настораживает, но может быть разница из-за версии Exim`а..
Решил поэкспериментировать, заменил $auth2 на $auth1:

Код: Выделить всё

# А так авторизуется "Летучая Мышь" - TheBat!
auth_cram_md5:
  driver = cram_md5
  public_name = CRAM-MD5
  server_secret = ${lookup mysql{SELECT `password` FROM \
                        `mailbox` WHERE `username` \
                        = '${quote_mysql:$auth1}'}{$value}fail}
  server_set_id = $auth1
И с одной стороны мои сомнения развеялись:
exim log писал(а):2010-12-01 00:19:42 [31363] auth_cram_md5 authenticator failed for ([192.168.1.10]) [95.135.129.146]:22605 I=[91.218.38.143]:25: 535 Incorrect authentication data (set_id=test@devtour.com)
А с другой стороны, авторизация все равно не работает! :(

Ведь в конфиге Лисяры именно так как я привел в первом посте, и здесь проблему решили с оригинальным конфигом. В чем дело, я уже запутался!? В мане сказано, что в $auth1 имя помещается.

neooleg
проходил мимо
Сообщения: 8
Зарегистрирован: 2010-12-01 0:43:40

Re: Exim + dovecot проблема с аутентификацией

Непрочитанное сообщение neooleg » 2010-12-01 2:06:37

Задача решена, благодаря wiki и поиску. Да еще, скажу что в postfixadmin поменял в конфигах тип хранение пароля:

Код: Выделить всё

#$CONF['encrypt'] = 'md5crypt';
$CONF['encrypt'] = 'cleartext';
Осталось много вопрос, по приоритету:
1. Как все же зашифровать/скрыть пароли в БД при этом оставив механизм аутентификации безопасным? Хочется простой метод.
2. Пересекается с п.1, хочу использовать свой сертификат, я правильно понимаю - нужно инвертировать ситуацию: MD5-CRYPT схема хранения пароля и PLAIN аутентификация (вместо CRAM-MD5)? SSL сертификат не позволит украсть пароли при передаче?
3. Права на сокеты их wiki, почему-то недостаточны, а ставить для чтение/запись для всех - не айс. Вопрос - "user = mailnull" в этих конфигах, это тот юзер от которого запускается dovecot?
4. Я так понял, приведенные выше ссылки на wiki для новой (1.0.0+) версии dovecot?

P.S. Для тех кто путает схемы хранения пароля с принципами аутентификации

neooleg
проходил мимо
Сообщения: 8
Зарегистрирован: 2010-12-01 0:43:40

Re: Exim + dovecot проблема с аутентификацией

Непрочитанное сообщение neooleg » 2010-12-03 15:31:33

neooleg писал(а):Осталось много вопрос, по приоритету:
1. Как все же зашифровать/скрыть пароли в БД при этом оставив механизм аутентификации безопасным? Хочется простой метод.
2. Пересекается с п.1, хочу использовать свой сертификат, я правильно понимаю - нужно инвертировать ситуацию: MD5-CRYPT схема хранения пароля и PLAIN аутентификация (вместо CRAM-MD5)? SSL сертификат не позволит украсть пароли при передаче?
3. Права на сокеты их wiki, почему-то недостаточны, а ставить для чтение/запись для всех - не айс. Вопрос - "user = mailnull" в этих конфигах, это тот юзер от которого запускается dovecot?
4. Я так понял, приведенные выше ссылки на wiki для новой (1.0.0+) версии dovecot?
Странно, в параллельной моей теме форумчане подключились и помогли разобраться. Здесь я задал ряд вопросов, и до сих пор не получил ответы. Извините, что много букв, старался наиболее доступно донести информацию.

Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

Re: Exim + dovecot проблема с аутентификацией

Непрочитанное сообщение dikens3 » 2010-12-04 1:48:58

Здесь я задал ряд вопросов, и до сих пор не получил ответы.
И? Гугл закрыли что-ли?


1. Как все же зашифровать/скрыть пароли в БД при этом оставив механизм аутентификации безопасным? Хочется простой метод.
Что значит безопасным?

Перехватить пароль при аутетификации md5 нельзя, а вот при PLAIN или LOGIN можно (он передаётся в открытом виде).
При шифровании его не перехватишь.

Как хранить в базе зашифрованными? ЧИТАТЬ КАК ХРАНИТЬ, ЧИТАТЬ КАК С НИМИ(паролями) РАБОТАТЬ.
#
33.3 Аутентификация на сервере exim

Когда exim передаёт команду EHLO, он сообщает публичные имена тех аутентификаторов, которые сконфигурированы как сервера, подчиняясь следующим условиям:
# Клиентский хост должен совпадать с “auth_advertise_hosts” (по умолчанию - *)
# Если установлена опция “server_advertise_condition”, её раскрытие не должно привести к пустой строке, “0”, “no”, или “false”.
Порядок, в котором заданы аутентификаторы контролирует порядок, в котором информируется о механизмах.
Некоторые почтовые клиенты (например, некоторые версии Netscape) требуют, чтобы пользователь предоставлял имя и пароль для аутентификации каждый раз, когда информируется о AUTH, даже при том, что аутентификация фактически, не необходима (например, exim может быть настроен для разрешения безоговорочного релея от клиентов, путём проверки IP-адреса). Вы можете сделать таких клиентов более дружественными, не сообщая им о AUTH. Например, если клентам сети 10.9.8.0/24 разрешено (путём ACL работающеё для RCPT) релеить почту без аутентификации, вы должны установить

auth_advertise_hosts = ! 10.9.8.0/24

чтобы не информировать их о аутентификационных механизмах.
Опция “server_advertise_condition” контролирует информирование о отдельных аутентификационных механизмах. Например, она может быть использована для ограничения информирования о специфических механизмах в шифрованных соединениях, путём установки типа:

server_advertise_condition = ${if eq{$tls_cipher}{}{no}{yes}}

Если сессия зашифрована, переменная “$tls_cipher” - не пуста, и таким образом, раскрытие приводит к “yes”, которое разрешает информирование.
Когда exim как сервер получает от клиента команду AUTH, он немедленно её отклоняет, если о AUTH не сообщалось в более раннем ответе на команду EHLO. Так происходит если
# Хост клиента не совпадает с “auth_advertise_hosts”; или
# Отсутствуют аутентификаторы сконфигурированные с серверной опцией; или
# Раскрытие “server_advertise_condition” заблокировало информирование о всех серверных аутентификаторах.
Иначе, exim запускает ACL определённую путём “acl_smtp_auth”, чтобы решить - принять ли команду. Если опция “acl_smtp_auth” не задана, AUTH принимается от любых клиентских хостов.
Если AUTH не отклонена путём ACL, exim ищет свою конфигурацию для серверного аутентификационного механизма, о котором информировалось в ответе на EHLO, и который совпадает с именованным в команде AUTH. Если он его находит, он запускает соотвтетствующий аутентификационный протокол, и аутентификация успещна или неуспешна. Если нет соответствия с информировавшимся механизмом, команда AUTH отклоняется с ошибкой 504.
Когда сообщение получено с аутентифицированного хоста, значение “$received_protocol” установлено в “esmtpa” или “esmtpsa” вместо “esmtp” или “esmtps”, и “$sender_host_authenticated” содержит имя (не публичное имя) драйвера аутентификации, который успешно аутентифицировал клиента, от которого было получено сообщение. Эта переменная пуста, если небыло успешной аутентификации.

http://www.lissyara.su/?id=1233#33.3
тут написано, что можно не уведомлять о методах PLAIN, LOGIN и т.п., если сессия не зашифрована.
2. Пересекается с п.1, хочу использовать свой сертификат, я правильно понимаю - нужно инвертировать ситуацию: MD5-CRYPT схема хранения пароля и PLAIN аутентификация (вместо CRAM-MD5)?
Сертификат не имеет отношения к хранению паролей или аутентификации. Если база закодирована, тогда и запрос (проверка пароля) должен это учитывать (кодировать/раскодировать).

4. Я так понял, приведенные выше ссылки на wiki для новой (1.0.0+) версии dovecot?
не помню уже. История дату хранит, ищи какая там версия была на то время.
(текущ.) (пред.) 14:07, 19 декабря 2008 Dikens3 (Обсуждение | вклад) (отменить)
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.