LINUX.ORG.RU
ФорумAdmin

Вопрос по отличиям настройки Dovecot 2.4 от 2.3

 , ,


0

1

При настройке Dovecot 2.4 в Debian 13, столкнулся с невозможностью войти в аккаунт, при использовании классической связки MariaDB+Postfix+Dovecot, вход через Thunderbird. В логах следующее:

Oct 28 11:39:08 MAIL.MYDOMAIN.COM systemd[1]: Starting dovecot.service - Dovecot IMAP/POP3 email server...
Oct 28 11:39:08 MAIL.MYDOMAIN.COM dovecot[20423]: master: Dovecot v2.4.1-4 (7d8c0e5759) starting up for imap, pop3, lmtp (core dumps disabled)
Oct 28 11:39:08 MAIL.MYDOMAIN.COM systemd[1]: Started dovecot.service - Dovecot IMAP/POP3 email server.
Oct 28 11:39:51 MAIL.MYDOMAIN.COM dovecot[20426]: imap-login: Login aborted: Connection closed: SSL_accept() failed: error:0A000412:SSL routines::ssl/tls alert bad certificate: SSL alert number 42 (disconnected during TLS handshake) (tls_handshake_not_finished): user=<>, rip=87.120.222.33, lip=MY_VPS_IP, TLS handshaking: SSL_accept() failed: error:0A000412:SSL routines::ssl/tls alert bad certificate: SSL alert number 42, session=<vzBEeTZC6uhXeN4h>
Oct 28 11:39:51 MAIL.MYDOMAIN.COM dovecot[20426]: imap-login: Login aborted: Logged out (no auth attempts in 1 secs) (no_auth_attempts): user=<>, rip=78.159.131.103, lip=MY_VPS_IP, TLS, session=<x99CeTZCIONOn4Nn>
Oct 28 11:39:54 MAIL.MYDOMAIN.COM dovecot[20426]: pop3-login: Login aborted: Connection closed: SSL_accept() failed: error:0A000412:SSL routines::ssl/tls alert bad certificate: SSL alert number 42 (disconnected during TLS handshake) (tls_handshake_not_finished): user=<>, rip=94.156.152.8, lip=MY_VPS_IP, TLS handshaking: SSL_accept() failed: error:0A000412:SSL routines::ssl/tls alert bad certificate: SSL alert number 42, session=<IBFYeTZCurRenJgI>
Oct 28 11:39:57 MAIL.MYDOMAIN.COM dovecot[20426]: pop3-login: Login aborted: Logged out (no auth attempts in 6 secs) (no_auth_attempts): user=<>, rip=165.73.242.163, lip=MY_VPS_IP, TLS, session=<oe9ZeTZC7r+lSfKj>
Oct 28 11:40:09 MAIL.MYDOMAIN.COM unix_chkpwd[20448]: check pass; user unknown
Oct 28 11:40:09 MAIL.MYDOMAIN.COM auth[20446]: pam_unix(dovecot:auth): check pass; user unknown
Oct 28 11:40:09 MAIL.MYDOMAIN.COM auth[20446]: pam_unix(dovecot:auth): authentication failure; logname= uid=5000 euid=5000 tty=dovecot ruser=riniko rhost=93.94.51.243
Oct 28 11:40:18 MAIL.MYDOMAIN.COM auth[20446]: pam_unix(dovecot:auth): check pass; user unknown
Oct 28 11:40:18 MAIL.MYDOMAIN.COM auth[20446]: pam_unix(dovecot:auth): authentication failure; logname= uid=5000 euid=5000 tty=dovecot ruser=riniko rhost=93.94.51.243
Oct 28 11:40:26 MAIL.MYDOMAIN.COM auth[20446]: pam_unix(dovecot:auth): check pass; user unknown
Oct 28 11:40:26 MAIL.MYDOMAIN.COM auth[20446]: pam_unix(dovecot:auth): authentication failure; logname= uid=5000 euid=5000 tty=dovecot ruser=riniko rhost=93.94.51.243
Oct 28 11:40:30 MAIL.MYDOMAIN.COM dovecot[20426]: imap-login: Login aborted: Connection closed (auth failed, 3 attempts in 21 secs) (auth_failed): user=<riniko>, method=PLAIN, rip=93.94.51.243, lip=MY_VPS_IP, TLS, session=<tzhjejZCishdXjPz>
Oct 28 11:40:30 MAIL.MYDOMAIN.COM auth[20446]: pam_unix(dovecot:auth): check pass; user unknown
Oct 28 11:40:30 MAIL.MYDOMAIN.COM auth[20446]: pam_unix(dovecot:auth): authentication failure; logname= uid=5000 euid=5000 tty=dovecot ruser=riniko@MYDOMAIN.COM rhost=93.94.51.243
Oct 28 11:40:38 MAIL.MYDOMAIN.COM auth[20446]: pam_unix(dovecot:auth): check pass; user unknown
Oct 28 11:40:38 MAIL.MYDOMAIN.COM auth[20446]: pam_unix(dovecot:auth): authentication failure; logname= uid=5000 euid=5000 tty=dovecot ruser=riniko@MYDOMAIN.COM rhost=93.94.51.243

По шагам распишу что делаю. Во первых, сертификаты для MAIL.MYDOMAIN.COM существуют. В файле /etc/postfix/main.cf они указаны:

smtpd_tls_cert_file=/etc/letsencrypt/live/MAIL.MYDOMAIN.COM/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/MAIL.MYDOMAIN.COM/privkey.pem
smtpd_use_tls=yes
smtpd_tls_auth_only = yes
smtp_tls_security_level = may
smtpd_tls_security_level = may
smtpd_sasl_security_options = noanonymous, noplaintext
smtpd_sasl_tls_security_options = noanonymous

Теперь, изменения которые были внесены в Dovecot в версии 2.4. Файл /etc/dovecot/conf.d/10-mail.conf:

mail_driver = maildir
mail_home = /var/mail/vhost/%{user|domain}/%{user|username}
mail_path = %{home}/Maildir
mail_inbox_path = /var/mail/vhost/%{user}

В версии 2.3 было:

mail_location = maildir:/var/mail/vhosts/%d/%n/

Параметры аналогичные в обоих конфигурациях:

mail_privileged_group = mail
namespace inbox {
  inbox = yes
  mailbox Trash {
    auto = subscribe
    special_use = \Trash
  }
  mailbox Sent {
    auto = subscribe
    special_use = \Sent
  }
  mailbox Drafts {
    auto = subscribe
    special_use = \Drafts
  }
  mailbox Spam {
    auto = subscribe
    special_use = \Junk
  }
  mailbox Archive {
    auto = subscribe
    special_use = \Archive
  }
}

Каталог /var/mail/vhosts/DOMAINNAME.COM создан. Добавлены права:

groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /var/mail
chown -R vmail:vmail /var/mail

В файле /etc/dovecot/conf.d/10-auth.conf

В версии 2.4:

auth_allow_cleartext = no
auth_mechanisms = plain login
!include auth-system.conf.ext
!include auth-sql.conf.ext

В версии 2.3:

disable_plaintext_auth = yes
auth_mechanisms = plain login
!include auth-sql.conf.ext

В версии 2.3, был файл /etc/dovecot/dovecot-sql.conf.ext

В котором было следующее:

driver = mysql
connect = host=127.0.0.1 dbname=mailserver user=mailuser password=PASSWORD
default_pass_scheme = SHA512-CRYPT
password_query = SELECT email as user, password FROM virtual_users WHERE email='%u';

А в файле /etc/dovecot/conf.d/auth-sql.conf.ext версии 2.3 было:

passdb {
  driver = sql
  args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
  driver = static
  args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n
}

В версии 2.4, содержимое файла /etc/dovecot/dovecot-sql.conf.ext перенёс в /etc/dovecot/conf.d/auth-sql.conf.ext:

sql_driver = mysql

mysql 127.0.0.1 {
user = mailuser
password = PASSWORD
dbname = mailserver
}

passdb sql {
query = SELECT password, email AS user  FROM virtual_users WHERE email='%{user}'
}

В файле /etc/dovecot/conf.d/10-master.conf в версии 2.3:

service imap-login {
  inet_listener imap {
    port = 0
  }
  inet_listener imaps {
    port = 993
    ssl = yes
  }
}
service auth {
  unix_listener auth-userdb {
    mode = 0600
    user = vmail
    #group =
  }

  unix_listener /var/spool/postfix/private/auth {
    mode = 0660
    user = postfix
    group = postfix
  }
  user = dovecot
}
service auth-worker {
  user = vmail
}

В версии 2.4 аналогично, но небольшие изменения тут:

service submission-login {
  inet_listener submission {
    #port = 587
  }
  inet_listener submissions {
    #port = 465
  }
}

В файле /etc/dovecot/conf.d/10-ssl.conf версии 2.4 указал:

ssl = required
ssl_server_cert_file = /etc/letsencrypt/live/MAIL.MYDOMAIN.COM/fullchain.pem
ssl_server_key_file = /etc/letsencrypt/live/MAIL.MYDOMAIN.COM/privkey.pem
ssl_min_protocol = TLSv1.2
ssl_server_dh_file = /etc/dovecot/dh.pem

В версии 2.3:

ssl = required
ssl_cert = </etc/letsencrypt/live/MAIL.MYDOMAIN.COM/fullchain.pem
ssl_key = </etc/letsencrypt/live/MAIL.MYDOMAIN.COM/privkey.pem
ssl_dh = </usr/share/dovecot/dh.pem
ssl_client_ca_dir = /etc/ssl/certs
ssl_min_protocol = TLSv1.2
ssl_prefer_server_ciphers = yes

Ключ DH в /etc/dovecot/dh.pem создан.

Подскажите пожалуйста, что я делаю не правильно?

★★★
Ответ на: комментарий от Anoxemian

А что говорит:

doveadm auth login riniko PaSsWorD

Выхлоп:

passdb: riniko auth succeeded

extra fields:

user=riniko

userdb extra fields:

riniko

system_groups_user=userd

uid=1000

gid=100

home=/home/riniko

auth_mech=PLAIN

Примерно так должно быть…

demo13
()
Последнее исправление: demo13 (всего исправлений: 3)

Anoxemian, да вроде изменения указал верно, проверил еще раз, изменил в /etc/dovecot/conf.d/10-mail.conf:

mail_home = /var/mail/vhost/%{owner_user | domain}/%{owner_user | username}
mail_path = %{owner_home}/Maildir
.

demo13,

doveadm auth login riniko PaSsWorD

riniko auth failed, потому как тут нет аккаунта в unix системе, только виртуальные пользователи. Что бы позже прикрутить Roundcube.

openssl s_client -crlf -connect mail.example.com:993

Connecting to MY_VPS_IP
CONNECTED(00000003)
depth=2 C=US, O=Internet Security Research Group, CN=ISRG Root X1
verify return:1
depth=1 C=US, O=Let's Encrypt, CN=R12
verify return:1
depth=0 CN=MAIL.MYDOMAIN.COM
verify return:1
---
Certificate chain
 0 s:CN=MAIL?MYDOMAIN.COM
   i:C=US, O=Let's Encrypt, CN=R12
   a:PKEY: RSA, 4096 (bit); sigalg: sha256WithRSAEncryption
   v:NotBefore: Oct 24 13:42:54 2025 GMT; NotAfter: Jan 22 13:42:53 2026 GMT
 1 s:C=US, O=Let's Encrypt, CN=R12
   i:C=US, O=Internet Security Research Group, CN=ISRG Root X1
   a:PKEY: RSA, 2048 (bit); sigalg: sha256WithRSAEncryption
   v:NotBefore: Mar 13 00:00:00 2024 GMT; NotAfter: Mar 12 23:59:59 2027 GMT
---
Server certificate
-----BEGIN CERTIFICATE-----
ABCDEFG...ETC
-----END CERTIFICATE-----
subject=CN=MAIL.MYDOMAIN.COM
issuer=C=US, O=Let's Encrypt, CN=R12
---
No client certificate CA names sent
Peer signing digest: SHA256
Peer signature type: rsa_pss_rsae_sha256
Negotiated TLS1.3 group: X25519MLKEM768
---
SSL handshake has read 4741 bytes and written 1643 bytes
Verification: OK
---
New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384
Protocol: TLSv1.3
Server public key is 4096 bit
This TLS version forbids renegotiation.
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 0 (ok)
---
---
Post-Handshake New Session Ticket arrived:
SSL-Session:
    Protocol  : TLSv1.3
    Cipher    : TLS_AES_256_GCM_SHA384
    Session-ID: 1B63A29F6DA55450D06901ADDA41577807604C6387AFDFE5AB000D32429691FE
    Session-ID-ctx:
    Resumption PSK: 3AB74DF45600744D46FFF9B3010A016FDBD898683DBFD43174F69B5B059AC28109B5C9F322EC490337242EEA9D044616
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    TLS session ticket lifetime hint: 7200 (seconds)
    TLS session ticket:
    0000 - 63 87 9d 51 90 82 57 38-dd 97 6d af 94 37 7d 64   c..Q..W8..m..7}d
    0010 - b2 d4 ea 13 eb 59 14 61-57 25 50 15 8a 23 3e 64   .....Y.aW%P..#>d
    0020 - fe 36 0a 28 9e a4 58 68-84 65 b9 b3 24 e1 c2 99   .6.(..Xh.e..$...
    0030 - 85 39 05 ef a0 c4 53 c6-5b ac 12 c8 44 b3 84 fe   .9....S.[...D...
    0040 - a0 df 79 5c 2c 69 cc 75-ed 6e c9 40 57 91 a6 a1   ..y\,i.u.n.@W...
    0050 - 9f 9c 86 57 73 af d6 43-5e 10 cf 5c 34 83 e7 32   ...Ws..C^..\4..2
    0060 - 59 db 49 36 b8 b5 66 cc-97 a8 55 b4 31 05 e9 ee   Y.I6..f...U.1...
    0070 - cf 2c dc dc 7a f7 d4 9b-5b 8a 53 e3 38 6b 3c 0c   .,..z...[.S.8k<.
    0080 - 04 54 da b9 13 82 ff f5-e9 7a d2 65 4c 43 fd db   .T.......z.eLC..
    0090 - 5c 6b 89 41 c4 fe 75 c6-5f 58 0f 7e 4e 06 c4 c5   \k.A..u._X.~N...
    00a0 - 53 23 89 fc db c5 d5 c8-79 ba c3 dc 40 b8 ad 05   S#......y...@...
    00b0 - 98 fb 50 55 89 77 75 3f-7e bf a6 fe 6b 89 c2 bf   ..PU.wu?~...k...
    00c0 - c7 4d fd f6 b9 2a 3e 0d-11 94 81 63 c0 c8 34 21   .M...*>....c..4!

    Start Time: 1761667198
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
    Extended master secret: no
    Max Early Data: 0
---
read R BLOCK
---
Post-Handshake New Session Ticket arrived:
SSL-Session:
    Protocol  : TLSv1.3
    Cipher    : TLS_AES_256_GCM_SHA384
    Session-ID: 20DC39F610DAE715899AA5375B82399CCBAD08A56DAD4DF5E5193FE8D5A0C30E
    Session-ID-ctx:
    Resumption PSK: F6CB40CDE2D0610F427C2F8B67945ED1FFBA0FCD9834C41CAB419423DAA970383CD061013319DEBF5643B84E0E9D2374
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    TLS session ticket lifetime hint: 7200 (seconds)
    TLS session ticket:
    0000 - 63 87 9d 51 90 82 57 38-dd 97 6d af 94 37 7d 64   c..Q..W8..m..7}d
    0010 - 12 24 4a 62 e4 09 36 6c-c1 4f 29 35 25 fe db b8   .$Jb..6l.O)5%...
    0020 - d6 90 5d a0 07 06 46 77-81 fb b8 ab b4 37 b3 c7   ..]...Fw.....7..
    0030 - d3 d4 90 2a 33 86 d9 b2-25 7c da 5e 11 56 c6 24   ...*3...%|.^.V.$
    0040 - 63 67 4d 62 74 46 e4 e3-38 86 9a 71 0e 5c ce 3b   cgMbtF..8..q.\.;
    0050 - 33 07 0f 1e a3 46 5e f3-a5 c5 a3 40 60 00 80 7b   3....F^....@`..{
    0060 - fb 20 e5 19 b5 2d c4 1f-6b 6d bf 47 4f 8b f7 b6   . ...-..km.GO...
    0070 - a7 fb 21 93 1b 60 26 07-85 dc 68 ed e7 6a 41 fd   ..!..`&...h..jA.
    0080 - c1 95 7c ca 0b b3 5d 26-48 bd 30 b9 63 2a ff 57   ..|...]&H.0.c*.W
    0090 - 40 c1 2c d8 75 23 74 3a-d5 03 5c e7 af 9c 3b 2e   @.,.u#t:..\...;.
    00a0 - 7d e5 40 5b bf b3 ef cf-c1 9e fd 32 ab 4c 96 03   }.@[.......2.L..
    00b0 - e4 ae 71 8b a5 2b 44 88-a4 90 b5 c4 77 48 36 f9   ..q..+D.....wH6.
    00c0 - 0c 28 9d 0a 00 7f 4e 0b-31 2e 1e ba f5 06 0f c2   .(....N.1.......

    Start Time: 1761667198
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
    Extended master secret: no
    Max Early Data: 0
---
read R BLOCK
* OK [CAPABILITY IMAP4rev1 LOGIN-REFERRALS ID ENABLE IDLE SASL-IR LITERAL+ AUTH=PLAIN AUTH=LOGIN] Dovecot ready.
BYE Disconnected for inactivity.
closed
Riniko ★★★
() автор топика
Ответ на: комментарий от Riniko

riniko auth failed, потому как тут нет аккаунта в unix системе, только виртуальные пользователи.

Ну покажи для валидного виртуального пользователя.

Dimez ★★★★★
()
Ответ на: комментарий от Dimez

Я создал пользователя, указал пароль. Получил ошибку auth failed. Изменил /etc/dovecot/conf.d/auth-sql.conf.ext, добавив туда:

userdb {
driver = passwd
}

passdb {
args = %{protocol}
driver = pam
}

Поля закомментированы:

#sql_driver = mysql

#mysql 127.0.0.1 {
#user = mailuser
#password = Dr8SpDl23WqSCf
#dbname = mailserver
#}

#passdb sql {
#query = SELECT password, email AS user  FROM virtual_users WHERE email='%{user}'
#}

А Dovecot ругается что:

doveconf: Fatal: Error in configuration file /etc/dovecot/conf.d/auth-sql.conf.ext line 201: userdb { } is missing section name

Riniko ★★★
() автор топика
Ответ на: комментарий от Riniko

добавив туда

Старую фигню из 2.3 добавил, судя по всему.

И в https://doc.dovecot.org/2.4.1/core/config/auth/userdb.html и в закоментированном у тебя же примере указан другой синтаксис.

Dimez ★★★★★
()
Последнее исправление: Dimez (всего исправлений: 1)
Ответ на: комментарий от Riniko

userdb { }

Этого уже нет!!!

passdb pam {

session = yes

service_name = dovecot

}

service auth {

user = $SET:default_internal_user

}

userdb passwd {

use_worker = yes

}

/etc/pam.d/dovecot

#%PAM-1.0

auth include common-auth

account include common-account

password include common-password

session include common-session

попробуй так…

demo13
()
Ответ на: комментарий от demo13

Изменил файл /etc/dovecot/conf.d/auth-sql.conf.ext:

 passdb pam {
 session = yes
 service_name = dovecot
}

service auth {
 user = $SET:default_internal_user
}

userdb passwd {
 use_worker= yes
}

В файле /etc/pam.d/dovecot

#%PAM-1.0
auth include common-auth
account include common-account
password include common-password
session include common-session

@include common-auth
@include common-account
@include common-session

Без изменений, auth failed

Riniko ★★★
() автор топика
Ответ на: комментарий от Dimez

Разницу вижу только в разных паролях, в первом посте он отредактирован только.

Riniko ★★★
() автор топика

Нету там отличий. Как файлы сертификатов указывались со знаком меньше (<) так и указываются. Верните в зад. Читайте доки

libert0
()
Ответ на: комментарий от Riniko

Поправил синтаксис use_worker = yes, без изменений. Может стоит подключить репы bookworm, установить Dovecot версии 2.3, настроить его, а потом уже обновляться и разбираться почему не выходит?

Riniko ★★★
() автор топика
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.