Service de messagerie entrante IMAP

De OpenWikiBSD
Aller à : navigation, rechercher

Cette page résulte du split de la doc messagerie.


Dovecot pour l'IMAPS

Installation

  • Paquet (celui avec la gestion des filtres Sieve)
pkg_add dovecot-pigeonhole
  • Adaptez le fichier
/etc/ssl/dovecot-openssl.cnf
  • Lancez le script
/usr/local/sbin/dovecot-mkcert.sh


  • Dans tous les cas, les deux fichiers sont :
/etc/ssl/dovecotcert.pem
/etc/ssl/private/dovecot.pem

Ou alors

  • La config est dans /etc/dovecot/
  • /etc/dovecot/dovecot.conf
protocols = imap pop3 
  • /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:~/Maildir

ou bien

mail_location = maildir:/var/mail/%u/Maildir


  • /etc/dovecot/conf.d/10-ssl.conf
ssl=required
  • Ajouter à /etc/login.conf
  dovecot:\
                :openfiles-cur=512:\
                :openfiles-max=2048:\
                :tc=daemon: 

Puis recréer la db (Très important! Le fichier login.conf n'est directement lu):

 [ -f /etc/login.conf.db ]&&  cap_mkdb /etc/login.conf
 usermod -L dovecot _dovecot

Tour de sécu

On vire les algos de chiffrement faibles Dans

/etc/dovecot/conf.d/10-ssl.conf

on remplace par

ssl_protocols = !SSLv2 !SSLv3

Attention, il est possible que votre MUA ne supporte pas cette suite crypto Pour | thunderbird Ce qui donne dans les logs :

 TLS handshaking: SSL_accept() failed: error :SSL routines:SSL3_GET_CLIENT_HELLO:no shared cipher

Et rien sur le client!

AJouter un user

adduser USER
mkdir -p /var/mail/USER/Maildir
chown -R UID_LDAP.GID_LDAP /var/mail/USER

Obsolète

  • Chemins et droits
mkdir -p /var/mail/USER/Maildir
chown -R UID_LDAP.GID_LDAP /var/mail/USER

Avec UID_LDAP et GID_LDAP les uidNumber et gidNumber LDAP de l'utilisateur

et dans /etc/dovecot.conf :

mail_location = maildir:/var/mail/%u/Maildir

Dans un premier temps (Avant LDAP)

mkdir -p /var/mail/USER
chown -R USER.USER /var/mail/USER/

pour chaque user du système

Il est très fortement conseillé de modifier le système comme suit (par ex):

ulimit -n 1024

Sinon :

Authentification LDAP

Changer les deux modes suivants dans /etc/dovecot.conf

 userdb ldap {
   args = /etc/dovecot/dovecot-ldap.conf
              }
 passdb ldap {
   args = /etc/dovecot/dovecot-ldap.conf
      }


mkdir /etc/dovecot
  • Créer /etc/dovecot/dovecot-ldap.conf
echo "
hosts = 127.0.0.1
auth_bind = yes
ldap_version = 3
auth_bind_userdn = cn=%u,ou=people,dc=openbsd,dc=net
base = ou=people,dc=openbsd,dc=net
base= cn=%u,ou=people,dc=openbsd,dc=net
user_filter = (&(objectClass=posixAccount)(cn=%u)) 
pass_attrs = cn=user
pass_filter = (&(objectClass=posixAccount)(cn=%u)
" > /etc/dovecot/dovecot-ldap.conf
  • Autoriser les protocoles non-chiffrés (IMAP et POP3) :

Modifier la ligne dans /etc/dovecot.conf: (yes en no):

disable_plaintext_auth = no

Authentification cliente par certificat

Fichier : conf.d/10-ssl.conf

ssl = required

ssl_cert = </etc/ssl/certs/imap.openbsd-edu.net.crt
ssl_key = </etc/ssl/private/imap.openbsd-edu.net.key
ssl_ca = </etc/ssl/certs/ca.crt
ssl_require_crl = yes # La non-vérification de la CRL échoue même avec "no". De toutes façons, c'est une mauvaise pratique que de ne pas checker les CRL..

Attention, c'est assez mal documenté; la crl doit être incluse de la manière suivante[1] :

cat cacert.pem ./crl/crl.pem > cacrl.pem

et la ligne de la CA doit donc devenir :

 ssl_ca = </etc/ssl/certs/cacrl.crt

au lieu de ssl_ca = </etc/ssl/certs/ca.crt

On exige un certificat client :

ssl_verify_client_cert = yes

On durcit les suites crypto :

#ssl_protocols = !SSLv2
#ssl_cipher_list = ALL:!LOW:!SSLv2:!EXP:!aNULL

devient:

ssl_protocols = !SSLv2 !SSLv3 !TLSv1  
ssl_cipher_list = ALL:HIGH:!SSLv2:!MEDIUM:!LOW:!EXP:!RC4:!MD5:!aNULL:@STRENGTH

Oui, votre oeil averti remarque que TLS 1.1 est autorisé...Dovecot ne permet as encore son exclusion..

Enfin on se prémunit contre les attaques type CRIME :

ssl_options = no_compression


Fichier : conf.d/10-auth.conf

auth_ssl_username_from_cert=yes
ssl_cert_username_field = commonName

et choisissez la méthode 'Certificat TLS' au lieu de mot de passe comme méthode d'authentification. Plus de base d'utilisateur à gérer en local !!!


Debug spécifique TLS
Disconnected (client sent an invalid cert)

En activant les logs verbeux, vous voyez que le problème est lié à l'absence de CRL.

imap-login: Invalid certificate: unable to get certificate CRL:

Debugs

doveadm log find
Looking for log files from /var/log
Debug: Not found
Info: /var/log/maillog
Warning: /var/log/maillog
Error: /var/log/maillog
Fatal: /var/log/maillog

Tests

Ici

  • On commence en local en clair
telnet  localhost 143
Trying @IP...
Connected to @IP
Escape character is '^]'.
* OK  Dovecot ready.
a login USER  PASS
* BAD [ALERT] Plaintext authentication not allowed without SSL/TLS, but your client did it anyway. If anyone was listening, the password was exposed.
a NO [CLIENTBUG] Plaintext authentication disallowed on non-secure (SSL/TLS) connections.

Et oui, pas possible de taper son mdp sur un canal en clair,; bien bien..

  • A distance en chiffré
openssl s_client -connect @IP:993

sans AC

openssl s_client -CAfile /home/phil/Cert_AC.pem -connect @IP:993

Avec son AC

Dans le second cas, le client openssl râle beaucoup moins..

....
a login toto titi
a NO [AUTHENTICATIONFAILED] Authentication failed.

et la communication avec l'annuaire LDAP fonctionne.

b select INBOX
  • Avec un client et son certificat
openssl s_client -cert Mon.crt  -key Mon.key  -connect mail.serveur:imaps
OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE AUTH=PLAIN AUTH=LOGIN AUTH=EXTERNAL] Dovecot ready.

Et si on filtrait les mails directement sur le serveur : SIEVE

Doc et Redoc

pkg_add dovecot-pigeonhole

Sur le client

  • Sur le client, avec Thunderbird, télécharger le xpi à jour, celui des dépôts TBird (version 0.22) ne fonctionne pas :[2]
  • Cliquez sur Filtres Sieve
  • Cliquez sur Avancé

Serveur : Imap, Compte et mot de passe du serveur, port TCP/4190, connection sécurisée.

  • Eventuellement, vous aurez une alerte sur l'AC du certificat

Sur le serveur

Dès la connexion faite, vous aurez apparition d'un dossier sieve dans le répertoire perso de l'utilisateur, avec recopie des filtres Sieve qui auront été sauvegardés sur le client.

Bon, maintenant il faut que ce soit le MDA (dovecot) et non le MTA (OpenSMTPd) qui délivre les mails. Il faut donc transformer la ligne de smtpd.conf :

accept from any for domain "openbsd-edu.net" alias <aliases> deliver to maildir "/var/mail/%{user.username}/Maildir"

en

accept from any for domain "openbsd-edu.net" deliver to mda "/usr/lib/dovecot/deliver -f %{sender} -d %{dest}"

A tester !


Désinstall

pkg_delete dovecot
/usr/sbin/userdel _dovecot
/usr/sbin/groupdel _dovecot


Debug

[3]

Ajouter à dovecot.conf

##DEBUG
auth_verbose=yes
auth_debug=yes
auth_debug_passwords=yes
mail_debug=yes 
verbose_ssl=yes
auth_verbose_passwords=plain ####WARNING =sha1 est mieux, car plain vous fournit le mdp en clair, tandis que sha1 vous fournit le condensat...Pour des logs c'est mieux..
Le Fatal n'était qu'un warning...
dovecot: deliver(USER): Fatal: postmaster_address setting not given

Il faut ajouter à /etc/dovecot.conf

postmaster_address = Une vraie adresse


Le chemin des maildir est incorrect

Il faut ajouter à /etc/dovecot.conf

mail_location = maildir:/var/mail/%u/Maildir


Pour les logs :
 perl -pi -e 's/#log_path =/log_path = \/var\/log\/dovecot.log/' /etc/dovecot.conf 
 perl -pi -e 's/#auth_verbose = no/auth_verbose = yes/' /etc/dovecot.conf 
Voire, pour le debug (donc temporaire) 
perl -pi -e 's/#auth_debug = no/auth_debug = yes/' /etc/dovecot.conf

Attention, il faut bien que les démons aient le droit d'écrire dans ce fichier !! Un kill HUP plus tard, vous aurez les logs


Vous avez oublié le chemin des boites :
dovecot: IMAP(USER): mail_location not set and autodetection failed: Mail storage autodetection failed with home=/home/USER
dovecot: IMAP(USER): Fatal: Namespace initialization failed

Avec un peu de lecture, on apprend qu'il faut dire explicitement à Dovecot où sont les boites. Normalement il les découvre seul, mais là, on a affaire à un utilisateur LDAP qui n'a pas de compte local, donc pas de /home/USER...


Et dans les logs, cette fois :

dovecot: imap-login: Login: user=<USER>, method=PLAIN, rip=IP_client, lip=IP_Serveur, TLS


Depuis le client, on se reconnecte et après cette fois on pose des questions :

b select inbox
* FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
* OK [PERMANENTFLAGS (\Answered \Flagged \Deleted \Seen \Draft \*)] Flags permitted.
* 0 EXISTS
* 0 RECENT
* OK [UIDVALIDITY 1293058568] UIDs valid
* OK [UIDNEXT 1] Predicted next UID
* OK [HIGHESTMODSEQ 1] Highest
b OK [READ-WRITE] Select completed.
Droits sur les boites :
IMAP(USER): mkdir(/var/mail/USER/Maildir/cur) failed: Permission denied (euid=UID(<unknown>) egid=GID(<unknown>) missing +w perm: /var/mail)

Il faut corriger :

  • Droits sur les boites :
deliver(USER): mkdir(/var/mail/USER/Maildir/cur) failed: Permission denied (euid=UID(USER) egid=GID(USER) missing +w perm: /var/mail)

Il faut corriger :

 mkdir -p /var/mail/USER
 chown -R USER.USER /var/mail/USER/

avec un USER créé dans le système.



Il manque des attributs à l'utilisateur LDAP.
Internal login failure (auth failed, 1 attempts): ... User XXXXX is missing UID (see mail_uid setting)

Ajoutez les attributs suivants pour chaque user :

mail_uid: 666

gidNumber: 666

uidNumber: 666


Dovecot se plante avec :
dovecot: dovecot: pipe() failed: Too many open files
dovecot: dovecot: pipe() failed: Too many open files

Et pourtant, il vous avait bien prévenu à chaque lancement... :

dovecot
Warning: fd limit 128 is lower than what Dovecot can use under full load (more than 768). Either grow the limit or change login_max_processes_count    and max_mail_processes settings


Solution :

ulimit -n 1024

Avez-vous lu le paragraphe relatif à cap_mkdb au dessus ???

auth-worker: Fatal: pool_system_realloc Out of memory
 auth: Error: auth worker: Aborted request: Worker process died unexpectedly
Fatal: master: service(auth-worker): child  returned error 83 (Out of memory (service auth-worker { vsz_limit=512 MB }, you may need to increase it) - set CORE_OUTOFMEM=1 environment to get core dump)

En fait, ce n'est pas un souci. Ca ne fait que remplir les logs lorsque q'un compte mal configuré (mail ou password) tente une connection. Pas très explicites les logs... [4]


* Renaming not supported across conflicting directory permissions lorsque vous tentez de modifier un dossier sur votre client Mail

En fait les permissions dudit Dossier sur le serveur Dovecot sont à modifier :

chmod 755 .Dossier