Problème accès Dovecot vers Mariadb - Postfix admin

Tags: #<Tag:0x00007f63f2e38ef8>

Bonjour,

J’essaye d’installer mon propre serveur de courriel, en utilisant postfixadmin, dovecot et postfix.
En mode debug, j’ai les messages de log suivants lorsque je tente de me connecter sur le serveur imap :

> Dec  4 00:10:28 maison dovecot: auth: Debug: Loading modules from directory: /usr/lib/dovecot/modules/auth
> Dec  4 00:10:28 maison dovecot: auth: Debug: Module loaded: /usr/lib/dovecot/modules/auth/lib20_auth_var_expand_crypt.so
> Dec  4 00:10:28 maison dovecot: auth: Debug: Module loaded: /usr/lib/dovecot/modules/auth/libdriver_mysql.so
> Dec  4 00:10:28 maison dovecot: auth: Debug: Read auth token secret from /var/run/dovecot//auth-token-secret.dat
> Dec  4 00:10:28 maison dovecot: auth: Debug: auth client connected (pid=0)
> Dec  4 00:10:28 maison dovecot: auth: Debug: client in: AUTH#0111#011PLAIN#011service=imap#011resp=anonymisé (previous base64 data may contain sensitive data)
> Dec  4 00:10:28 maison dovecot: auth-worker(22882): Debug: Loading modules from directory: /usr/lib/dovecot/modules/auth
> Dec  4 00:10:28 maison dovecot: auth-worker(22882): Debug: Module loaded: /usr/lib/dovecot/modules/auth/lib20_auth_var_expand_crypt.so
> Dec  4 00:10:28 maison dovecot: auth-worker(22882): Debug: Module loaded: /usr/lib/dovecot/modules/auth/libdriver_mysql.so
> Dec  4 00:10:28 maison dovecot: auth-worker(22882): Debug: sql(anonymisé@anonymisé): query: SELECT username AS user, password, '/var/vmail/domaine.anonymisé/utilisateur' as userdb_home, '/var/vmail/domaine.anonymisé/utilisateur' as userdb_mail, 500 as userdb_uid, 8 as userdb_gid FROM mailbox WHERE username = 'anonymisé@anonymisé' AND active = '1'
> Dec  4 00:10:28 maison dovecot: auth-worker(22882): sql(anonymisé@anonymisé): Password mismatch (given password: ---)
> Dec  4 00:10:28 maison dovecot: auth-worker(22882): Debug: sql(anonymisé@anonymisé): MD5-CRYPT(---) != '---'
> Dec  4 00:10:30 maison dovecot: auth: Debug: client passdb out: FAIL#0111#011user=anonymisé@anonymisé

Manifestement, dovecot n’arrive pas à se connecter sur mariadb.
Je sèche sur le moyen de dépanner cela. Comment faire ?

Merci d’avance.

Il y a un probleme de mot de passe apparement.

Ou un problème de format de stockage des mots de passe :

Il faudrait vérifier que le hachage du mot de passe commence bien par $1$

Le problème ne me semble pas concerner les hachage de mots de passe ;
image
Est-ce qu’il n’y aurait pas un moyen simple et réversible de suivre les requêtes et tentatives de connections faites sur mariadb ?

Merci.

Activer les logs détaillées des requetes (query)

Il était inutile de mettre une image pour cela, un copier/coller aurait été plus efficace.
La connexion à la base de données se fait bien, ce n’est pas le problème.

Les logs disent bien que le mot de passe ne correspond pas. Donc si c’est bien du MD5, c’est que tu fais une erreur de saisie du mot de passe.
Dans les logs :

Password mismatch (given password: ---)

Est-ce le bon mot de passe en clair de l’utilisateur anonymisé@anonymisé ?

sql(anonymisé@anonymisé): MD5-CRYPT(---) != '---'

Est-ce le bon mot de passe en clair qui est comparé à son hash MD5 ?

Dovecot est-il bien configuré avec :

default_pass_scheme = MD5-CRYPT

A toutes les questions ci-dessus, la réponse est oui : Mot de passe OK, Type de hachage OK, Résultat du hachage OK.

Ce qui me gène plus, c’est le commentaire Debug: client passdb out: FAIL#0111#011.

Je sèche un peu.

A deux lettre près (pass out) on pourrait croire que le serveur rend l’ame après l’orgasme… Ok je sors

IL fallait être sûr que ce n’était pas un bête problème de mot de passe ou de mauvaise fonction de hachage. Il reste à vérifier la configuration de dovecot. Il faudrait voir notamment les sections complètes :

passdb {
…
}
userdb {
…
}

ainsi que les directives auth_mechanisms et default_pass_scheme,
ou mieux la configuration complète avec le retour de :

doveconf -n

Merci pour la réponse. Le résultat de la commande « doveconf -n » est le suivant :

 2.3.4.1 (f79e8e7e4): /etc/dovecot/dovecot.conf
 Pigeonhole version 0.5.4 ()
 OS: Linux 5.8.0-0.bpo.2-amd64 x86_64 Debian 10.6 
 Hostname: nom.hostname
auth_debug_passwords = yes
auth_mechanisms = plain login
auth_verbose = yes
auth_verbose_passwords = yes
base_dir = /var/run/dovecot/
first_valid_gid = 8
hostname = nom.domaine
last_valid_gid = 8
last_valid_uid = 500
mail_gid = mail
mail_home = /var/mail/%n
mail_location = mbox:~/mail:INBOX=/var/mail/vhost/%u
mail_plugins = " quota"
mail_privileged_group = mail
mail_uid = vmail
namespace inbox {
  inbox = yes
  location = 
  mailbox Drafts {
    special_use = \Drafts
  }
  mailbox Junk {
    special_use = \Junk
  }
  mailbox Sent {
    special_use = \Sent
  }
  mailbox "Sent Messages" {
    special_use = \Sent
  }
  mailbox Trash {
    special_use = \Trash
  }
  prefix = 
}
passdb {
  args = /etc/dovecot/dovecot-sql.conf.ext
  driver = sql
}
plugin {
  quota = maildir:User quota
  quota_warning = storage=95%% quota-warning 95 %u
  quota_warning2 = storage=80%% quota-warning 80 %u
  sieve = file:~/sieve;active=~/.dovecot.sieve
}
postmaster_address = postmaster@{{ main_domain }}
protocols = imap imap
service auth {
  unix_listener /var/spool/postfix/private/auth {
    group = postfix
    mode = 0666
    user = postfix
  }
  unix_listener auth-userdb {
    group = mail
    mode = 0660
    user = vmail
  }
}
service quota-warning {
  executable = script /usr/local/bin/quota-warning.sh
  unix_listener quota-warning {
    user = vmail
  }
  user = dovecot
}
ssl = required
ssl_cert = </etc/letsencrypt/live/nom.domaine/fullchain.pem
ssl_cipher_list = ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
ssl_dh = # hidden, use -P to show it
ssl_key = # hidden, use -P to show it
ssl_min_protocol = TLSv1.2
userdb {
  args = /etc/dovecot/dovecot-sql.conf.ext
  driver = sql
}
protocol lda {
  mail_plugins = " quota quota sieve"
}
protocol imap {
  mail_plugins = " quota imap_quota"
}

Il y a quelques trucs qui ne me paraissent pas clairs dans ta configuration :

  • mail_gid = mail : ce n’est pas forcément une bonne idée de nommer un groupe ainsi ;
  • il faut vérifier l’utilisateur vmail, le groupe mail et leur uid, gid :
getent passwd vmail
getent group mail
  • les définitions de mail_home et de mail_location ne me semblent pas cohérentes (normalement non bloquant) ;
  • SSL est obligatoire mais imaps ne semble pas être activé (cf. service imap-login { })

Il faudrait voir le contenu de /etc/dovecot/dovecot-sql.conf.ext

Bonjour,

Merci beaucoup pour l’aide.
Le résultat de la commande getent passwd vmail : vmail:x:500:1002::/home/vmail: bin/sh
Concernant getent group mail : mail:x:8:

J’ai corrigé les incohérences entre les définitions de mail_home et `« mail_location ».
Je pense avoir activé imaps (extrait de doveconf -n ):
service imap-login {
inet_listener imaps {
port = 993
ssl = yes
}
J’ai joint le fichier de dovecot-sql.conf.ext.
dovecot-sql.conf.ext.txt (5,9 Ko)
Sinon, dans les logs, dovecot semble faire une comparaison entre le mot de passe non haché, et le résultat de la commande SQL, qui lui représente le mot de passe haché.

Je vois un problème avec l’utilisateur vmail, son groupe primaire a le GID 1002 alors que ce devrait être 8.
Je suggère un :

sudo usermod -g mail vmail

pour que mail soit le groupe primaire de vmail. Suivi d’un redémarrage de dovecot.

Pour le fichier dovecot-sql.conf.ext : je vois dans les requêtes SQL :

    'maildir:/var/mail/vhost/%d/%n' …

or tu utilises mbox dans la configuration de dovecot (maildir est une meilleure idée, AMHA) :

mail_location = mbox:~/mail:INBOX=/var/mail/vhost/%u

Pour le mot de passe je ne suis pas tout à fait sûr, mais normalement tu utilises MD5-CRYPT : le hash MD5 du mot de passe est chiffré (+salage) puis comparé à ce qui est enregistré en base de données.
À vérifier aussi dans la configuration de postfixadmin que tu as bien :

$CONF['encrypt'] = 'md5crypt';

J’ai changé le mot de passe, et là, j’arrive bien à me connecter sur dovecot. Postfix me pose encore des problèmes, je vais vérifier la configuration.

Merci beaucoup pour l’aide.
Pour le paramètre mail_location = maildir:~/Maildir , c’est bien ce qu’il faut faire ?

https://doc.dovecot.org/configuration_manual/mail_location/

C’est l’emplacement de la boîte aux lettres de l’utilisateur. C’est à toi de voir où tu veux stocker les courriels des utilisatrices.

Finalement, j’ai tout basculé en maildir, avec un format de ce type :

  • dovecot.conf : maildir:/var/mail/vhost/%n
  • dovecot-sql.conf : maildir:/var/mail/vhost/%d/%n' as mail
    Je présume que concernant postfix, c’est le format de la requête SQL qui détermine aussi comment sont stockés les boîtes mail, mais cela fonctionne.

Le seul point qui bloque est l’envoi de mail depuis une autre machine que le serveur mail (l’erreur est du type user@domain.com: Sender address rejected: not owned by user user@domain.com.
J’ai recopié les paramètres de sécurité suivants dans le fichier /etc/postfix/main.cf) :

smtpd_client_restrictions =
    permit_mynetworks,
    permit_sasl_authenticated, sleep 1, reject_unauth_pipelining,
    reject_rbl_client bl.spamcop.net,
    reject_rbl_client cbl.abuseat.org,
    reject_rbl_client zen.spamhaus.org,
    permit

# Requirements for the HELO statement
smtpd_helo_restrictions =
    permit_mynetworks,
    permit_sasl_authenticated,
    reject_non_fqdn_hostname,
    reject_invalid_hostname,
    permit

# Requirements for the sender address
smtpd_sender_restrictions =
    reject_sender_login_mismatch,
    permit_mynetworks,
    permit_sasl_authenticated,
    reject_non_fqdn_sender,
    reject_unknown_sender_domain,
    permit

# Requirement for the recipient address
smtpd_recipient_restrictions =
    permit_mynetworks,
    permit_sasl_authenticated,
    reject_non_fqdn_recipient,
    reject_unknown_recipient_domain,
    reject_unauth_destination,
    permit

Je n’ose pas toucher à ces paramètres, j’ai peur de transformer postfix en passoire. Je ne sais pas quel est lequel de ces paramètres qui bloque la connexion depuis une autre machine que la machine locale (permit_mynetworks?).

J’ai trouvé le problème, spécifier le paramètre " smtpd_sender_login_maps".

Quoiqu’il en soit, merci beaucoup pour l’aide.