Как настроить авторизацию Dovecot + SSL

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

Модератор: xM

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
VVRIP
проходил мимо
Сообщения: 7
Зарегистрирован: 2018-01-25 16:40:46

Как настроить авторизацию Dovecot + SSL

Непрочитанное сообщение VVRIP » 2018-01-25 18:49:16

Всем привет! На Ubuntu Server стоит Exim + Dovecot (2.2.27) + MySQL. Пытаюсь подключиться через Thunderburd и Outlook. Почтовые клиенты находят конфигурацию сервера, но не могут подключиться. Судя по логам пользователя он находит в БД, и пишет, что все ок. Но при этом зашифрованное соединение не устанавливается (об этом и Outlook пишет).

Проверял соединение через openssl и там Verify return code: 0 (ok).

В логах есть

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

pop3-login: Debug: SSL: where=0x20, ret=1: SSL negotiation finished successfully
pop3-login: Debug: SSL: where=0x2002, ret=1: SSL negotiation finished successfully
imap-login: Debug: SSL: where=0x20, ret=1: SSL negotiation finished successfully
imap-login: Debug: SSL: where=0x2002, ret=1: SSL negotiation finished successfully
Судя по другим строчкам ему не нравится, что сам пароль хранится как текст в БД, т.е. тип пароля plain. Подскажите, пожалуйста, как правильно надо законфигурить, чтобы работало?

Вот часть конфига по теме:

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

ssl = yes

protocol imap {
  listen=*:143
  ssl_listen=*:993
  ssl_cert_file=мой путь к сертификату
  ssl_key_file=мой путь ко ключу

  mail_plugins = $mail_plugins imap_quota
  imap_client_workarounds = delay-newmail tb-extra-mailbox-sep
}

protocol pop3 {
  listen=*:110
  ssl_listen=*:995
  ssl_cert_file=мой путь к сертификату
  ssl_key_file=мой путь ко ключу
  pop3_uidl_format = %08Xu%08Xv
  mail_plugins = $mail_plugins quota

  pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
}

protocol lda {
  postmaster_address = мой адрес

  auth_socket_path = /var/run/dovecot/auth-master
}

service dict {
  unix_listener dict {
    mode = 0666
    user = мой юзер для почты
    group = моя группа для почты
  }
}

service auth-worker {
  user = мой юзер для почты

  unix_listener auth-worker {
    mode = 0777
    user = мой юзер для почты
    group = моя группа для почты
  }
}

auth_debug = yes
mail_debug = yes
verbose_ssl = yes
auth_verbose = yes

auth default {
  mechanisms = plain

   socket listen {
     master {
       path = /var/run/dovecot/auth-master
       mode = 0777
       user = мой юзер для почты
       group = моя группа для почты
     }
     client {
       path = /var/run/dovecot/auth-client
       mode = 0777
       user = мой юзер для почты
       group = моя группа для почты
     }
   }

  passdb sql {
    args = мой путь к sql файлу
  }

  userdb sql {
    args = мой путь к sql файлу
  }
}
В интернете много мануалов(в частности на lissyara), но они для разных версий и целей, поэтому собрать все правильно тяжело. doveconf -n мне говорит, что часть настроек устарела, но при этом, когда меняю на новый формат, который он сам же мне выдает, сервер после этого не стартует вообще.

Хостинговая компания 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/

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35465
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Как настроить авторизацию Dovecot + SSL

Непрочитанное сообщение Alex Keda » 2018-01-25 21:30:47

шифрованые пароли заюзайте
Убей их всех! Бог потом рассортирует...

VVRIP
проходил мимо
Сообщения: 7
Зарегистрирован: 2018-01-25 16:40:46

Как настроить авторизацию Dovecot + SSL

Непрочитанное сообщение VVRIP » 2018-01-26 16:02:50

Это логично, раз он с открытым текстом запрещает) Я ожидал более точных инструкций)
В итоге ещё поискал и написал в dovecot.conf:

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

mechanisms = plain login cram-md5
И в dovecot-sql.conf

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

default_pass_scheme = CLEARTEXT
Вроде Thunderbird увидел шифрование.
Теперь осталось exim добить, там пользователя не может найти.

Отправлено спустя 1 час 52 минуты 23 секунды:
А ещё при авторизации вылетает сообщение, что сертификат какой-то левый, хотя он настоящий.
Единственно я так и не понял, как правильно он должен выглядеть для почты.
У меня есть сам сертификат, корневой и промежуточный.
Я сначала попробовал просто сертификат, но клиент на него гнал.
Потом увидел в интернете, что можно объединять сертификаты в файл. Я так и сделал, но ничего не изменилось.
Так как правильно?

Аватара пользователя
xM
ст. лейтенант
Сообщения: 1316
Зарегистрирован: 2009-01-15 23:57:41
Откуда: Königsberg
Контактная информация:

Как настроить авторизацию Dovecot + SSL

Непрочитанное сообщение xM » 2018-01-26 18:37:36

Тут с передачей паролей открытым текстом против шифрованных есть тонкий момент с их хранением. Либо вы используете зашифрованный пароль и храните его в базе в том же виде (а это ненадёжное шифрование), либо передаёте пароль открытым текстом, но храните его в базе надёжно зашифрованным. Я сторонник второго подхода (plain text + blowfish), особенно принимая во внимание то, что нынче всё ходит по TLS и внутри него заботиться о дополнительном кодировании уже нужды нет.
IT voodoo blog https://kostikov.co

VVRIP
проходил мимо
Сообщения: 7
Зарегистрирован: 2018-01-25 16:40:46

Как настроить авторизацию Dovecot + SSL

Непрочитанное сообщение VVRIP » 2018-01-26 19:15:09

Я изначально и хотел использовать TLS и открытый пароль. В БД он так и хранится.
Но тут начинают валить ошибки, что сертификат кривой, хотя с виду все нормально, пробовал разные варианты. Потом, если оставить mechanisms = plain login, то dovecot ругается, мол пароль не шифрован, как так, давай до свидания.
С exim'ом тоже самое.

А сейчас вроде кое-как заработало (логинится через Thunderburd во внутренней сети). Пробую отправить сообщение самому себе - exim отправляет запрос в dovecot delivery, а тот говорит, что мол нет такого юзера (Child process of dovecot_delivery transport returned 67 (could mean user nonexistent)). Хотя он есть и залогинен через Thunderbird.

Логи включил все, какие только мог, exim в режиме дебага, но пока не помогает.

Аватара пользователя
xM
ст. лейтенант
Сообщения: 1316
Зарегистрирован: 2009-01-15 23:57:41
Откуда: Königsberg
Контактная информация:

Как настроить авторизацию Dovecot + SSL

Непрочитанное сообщение xM » 2018-01-26 20:07:31

VVRIP писал(а): В БД он так и хранится.
вот это очень зря
IT voodoo blog https://kostikov.co

FiL
ст. лейтенант
Сообщения: 1375
Зарегистрирован: 2010-02-05 0:21:40

Как настроить авторизацию Dovecot + SSL

Непрочитанное сообщение FiL » 2018-01-26 21:32:06

сертификат самоподписаный или нормальный?

VVRIP
проходил мимо
Сообщения: 7
Зарегистрирован: 2018-01-25 16:40:46

Как настроить авторизацию Dovecot + SSL

Непрочитанное сообщение VVRIP » 2018-01-26 22:03:44

вот это очень зря
Сейчас цель - сделать, чтобы работало с SSL. А уже потом можно будет думать о паролях в БД. Какой в них смысл, если почтой невозможно пользоваться?
сертификат самоподписаный или нормальный?
Нормальный, конечно, для домена.

VVRIP
проходил мимо
Сообщения: 7
Зарегистрирован: 2018-01-25 16:40:46

Как настроить авторизацию Dovecot + SSL

Непрочитанное сообщение VVRIP » 2018-02-01 17:02:50

Вернулся к теме, сейчас застрял на авторизации экзима через довкот:
Пробую отправить сообщение самому себе - exim отправляет запрос в dovecot delivery, а тот говорит, что мол нет такого юзера (Child process of dovecot_delivery transport returned 67 (could mean user nonexistent)). Хотя он есть и залогинен через Thunderbird.
У экзима конфиг:

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

dovecot_login:
  driver = dovecot
  public_name = LOGIN
  server_socket = /var/run/dovecot/auth-client
  server_set_id = $auth1

dovecot_plain:
  driver = dovecot
  public_name = PLAIN
  server_socket = /var/run/dovecot/auth-client
  server_set_id = $auth1

dovecot_cram_md5:
  driver = dovecot
  public_name = CRAM-MD5
  server_socket = /var/run/dovecot/auth-client
  server_set_id = $auth1
У довкота:

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

auth default {
  mechanisms = plain login cram-md5

   socket listen {
     master {
       path = /var/run/dovecot/auth-master
       mode = 0777
       user = мой юзер для доставки почты
     }
     client {
       path = /var/run/dovecot/auth-client
       mode = 0777
       user = мой юзер для доставки почты
     }
   }

  passdb sql {
    args = мой путь к sql файлу
  }
  userdb sql {
    args = мой путь к sql файлу
  }
}
В sql:

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

default_pass_scheme = CLEARTEXT
driver = mysql
connect = host=localhost dbname=моя_бд user=мой_юзер password=мой пароль
default_pass_scheme = PLAIN
password_query = SELECT name as username, password FROM моя_таблица WHERE name = '%u'
user_query = SELECT '/var/mail/%u' as home,'mbox:~:INBOX=~/inbox/%n' as mail, ID_моего_юзера_для_доставки_почты as uid, ID_моего_юзера_для_доставки_почты as gid FROM моя_таблица WHERE name = '%u'
Помогите пожалуйста разобраться.

Аватара пользователя
xM
ст. лейтенант
Сообщения: 1316
Зарегистрирован: 2009-01-15 23:57:41
Откуда: Königsberg
Контактная информация:

Как настроить авторизацию Dovecot + SSL

Непрочитанное сообщение xM » 2018-02-01 17:22:10

VVRIP писал(а): default_pass_scheme = CLEARTEXT
Читайте уже таки мануалы
https://wiki2.dovecot.org/Authenticatio ... ordSchemes
IT voodoo blog https://kostikov.co

VVRIP
проходил мимо
Сообщения: 7
Зарегистрирован: 2018-01-25 16:40:46

Как настроить авторизацию Dovecot + SSL

Непрочитанное сообщение VVRIP » 2018-02-05 18:23:06

default_pass_scheme = CLEARTEXT
Сначала убрал это.
Читайте уже таки мануалы
https://wiki2.dovecot.org/Authenticatio ... ordSchemes
Прочитал ещё раз.
В итоге получил хэш паролей через doveadm и записал в БД.

Для чистоты пересоздал профиль в почтовике. Вроде заработало, но по какой-то непонятной причине отвалился smtps у экзима. Точнее он-то работал, но Thunderbird его не увидел. После возился с другими проблемами.

После испытаний решил пересоздать профиль и почистить папки на сервере для юзера.
smtps снова стал виден, а вот авторизация отвалилась опять(((

Пробовал в sql конфиг довкота явно добавлять

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

default_pass_scheme = CRAM-MD5
И ещё убрал маханизм авторизации PLAIN. В итоге остался только LOGIN и CRAM-MD5.
Вот кусок лога:

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

imap-login: Debug: SSL: where=0x20, ret=1: SSL negotiation finished successfully [мой_ip]
imap-login: Debug: SSL: where=0x2002, ret=1: SSL negotiation finished successfully [мой_ip]
auth: Debug: client in: AUTH	1	CRAM-MD5	service=imap	secured	session=сессия	lip=ip_сервера	rip=мой_ip lport=143	rport=1325
auth: Debug: client passdb out: CONT	1	здесь какой-то непонятный хеш
auth: Debug: client in: CONT	1	здесь ещё какой-то непонятный хеш 2 (previous base64 data may contain sensitive data)
auth-worker(25233): Debug: sql(почта юзера,мой_ip,<сессия>): query: SELECT name as username, password FROM моя_таблица WHERE name = 'имя юзера'
auth: Debug: sql(почта юзера,мой_ip,<сессия>): Credentials: хеш из БД
auth: Info: cram-md5(почта юзера,мой_ip,<сессия>): password mismatch
auth: Debug: client passdb out: FAIL	1	user=почта юзера	
imap-login: Debug: Ignoring unknown passdb extra field: 
imap-login: Debug: SSL alert: close notify [мой_ip]
imap-login: Debug: SSL alert: close notify [мой_ip]
imap-login: Info: Disconnected (auth failed, 1 attempts in 6 secs): user=<почта юзера>, method=CRAM-MD5, rip=мой_ip, lip=ip_сервера, TLS
В общем-то ясно, что пароль не совпадает. Есть подозрения, что какой-то непонятный хеш 2 - это и есть пароль юзера, только почему-то он в другом формате. Я уже запутался. Вроде везде указан один и тот же тип шифрования, пароль подготовлен, но не работает ничего.

Подскажите, пожалуйста, куда дальше копать?

Отправлено спустя 20 минут 26 секунд:
Упс, походу правда не оттуда взял пароль) Вроде каким-то чудом заработало и даже сам себе смог отправить сообщение!

Отправлено спустя 6 минут 19 секунд:

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

imap-login: Debug: SSL: where=0x2001, ret=1: unknown state [мой_ip]
imap-login: Debug: SSL: where=0x2001, ret=1: unknown state [мой_ip]
imap-login: Debug: SSL: where=0x2001, ret=1: unknown state [мой_ip]
imap-login: Debug: SSL: where=0x2001, ret=1: unknown state [мой_ip]
imap-login: Debug: SSL: where=0x2001, ret=1: unknown state [мой_ip]
imap-login: Debug: SSL: where=0x2001, ret=1: unknown state [мой_ip]
imap-login: Debug: SSL: where=0x2001, ret=1: unknown state [мой_ip]
imap-login: Debug: SSL: where=0x2002, ret=-1: unknown state [мой_ip]
imap-login: Debug: SSL: where=0x2002, ret=-1: unknown state [мой_ip]
imap-login: Debug: SSL: where=0x2001, ret=1: unknown state [мой_ip]
imap-login: Debug: SSL: where=0x2001, ret=1: unknown state [мой_ip]
imap-login: Debug: SSL: where=0x2001, ret=1: unknown state [мой_ip]
imap-login: Debug: SSL: where=0x2001, ret=1: unknown state [мой_ip]
imap-login: Debug: SSL: where=0x2001, ret=1: unknown state [мой_ip]
imap-login: Debug: SSL: where=0x2001, ret=1: unknown state [мой_ip]
imap-login: Debug: SSL: where=0x2001, ret=1: unknown state [мой_ip]
В логах есть вот такая непонятная хрень, может знакома кому-нибудь?