From b00e91b0be57dec3d5fe4d659c3ab04ae39fcce0 Mon Sep 17 00:00:00 2001
From: shirenn <shirenn@crans.org>
Date: Sat, 24 Jul 2021 21:36:03 +0200
Subject: [PATCH] [critical/mail] Ajout de dovecot.md

---
 critical/mail/dovecot.md | 165 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 165 insertions(+)
 create mode 100644 critical/mail/dovecot.md

diff --git a/critical/mail/dovecot.md b/critical/mail/dovecot.md
new file mode 100644
index 0000000..9b41e1e
--- /dev/null
+++ b/critical/mail/dovecot.md
@@ -0,0 +1,165 @@
+# Dovecot
+Dovecot est entre autre une implémentation de serveur IMAP, de serveur POP3 et 
+de serveur d'authentification SASL. Les deux premiers protocoles permettent à un 
+utilisateur de consulter ces mails (soit en les consultant sur le serveur pour 
+IMAP, soit en les téléchargeant localement pour POP3) tandis que le dernier sert 
+à authentifié l'utilisateur, authentification qui pourra être utilisé par 
+d'autre logiciels comme par exemple postfix pour vérifier l'idendité d'une 
+personne souhaitant envoyer un mail.
+
+## Installation
+On tire les différents composants logiciels des repository debian : `sudo apt 
+install dovecot-imapd dovecot-ldap dovecot-pop3d dovecot-sieve`
+
+## Configuration
+La configuration initiale packagée par debian est morcellée en une série de 
+fichier commentée dans `/etc/dovecot/conf.d` qui permette de segmenter la 
+configuration en fonction des différents mécanismes du logiciel.
+
+### 10-auth.conf
+Ce fichier contrôle l'authentification des utilisateurs au serveur. On configure 
+dans le fichier directement les options de connexions puis en incluant des 
+fichiers 'auth-{{ mecanisme }}.conf.ext' on précise les différents bas 
+d'utilisateurs et de mot de passe à utiliser.
+```
+# On autorise les clients à utiliser une authentification en claire car on 
+# configurera par la suite le fait que tous les échanges entre le client 
+# et le serveur soient chiffrées par TLS.
+disable_plaintext_auth = no
+# On configure deux méthodes d'authentification pour le client plain et login.
+auth_mechanisms = plain login
+# On souhaite tirer les utilisateurs du ldap. On inclue donc le fichier de 
+# backend ldap qui va définir les bases d'utilisateurs et de mot de passes.
+!include auth-ldap.conf.ext
+```
+
+Le fichier `auth-ldap.conf.ext` va lui même inclure le fichier de configuration 
+de connexion au ldap.
+```
+# Addresse du serveur ldap
+uris = ldap://172.16.10.157/
+# Nom d'utilisateur et mot de passe utilisés pour s'authentifer auprès du 
+# serveurs
+dn = cn=Utilisateurs,dc=crans,dc=org
+dnpass = "erdnaxe_aime_debian"
+# Base de noms en dessous de laquelle se trouve les utilisateurs dans le ldap
+base = cn=Utilisateurs,dc=crans,dc=org
+# Les options de configurations user_filter et pass_filter permettent de filtrer 
+# les ojets ldap à inclure dans les bases d'utilisateurs et de mot de passes.
+user_filter = (&(objectClass=posixAccount)(uid=%u))
+pass_filter = (&(objectClass=posixAccount)(uid=%u))
+# Les options de configurations user_attrs et pass_attrs permettent de savoir 
+# quels champs récupérer de l'objet ldap et d'altérer certains pour qu'ils 
+# correspondent mieux à l'installation de la machine.
+user_attrs = homeDirectory=home={{ dovecot.home_path }}/%u,uidNumber=uid,gidNumber=gid
+pass_attrs = uid=user,userPassword=password
+```
+
+### 10-logging.conf
+C'est le fichier de configuration qui gère l'écriture des logs du daemon. Il 
+permet de séléctionner quels événèments doivent être loggé et quels champs de 
+l'objet doivent être inclus dans les logs.
+```
+plugin {
+  mail_log_events = delete undelete expunge copy mailbox_delete mailbox_renam
+  mail_log_fields = uid box msgid size
+}
+log_timestamp = "%Y-%m-%d %H:%M:%S "
+```
+
+### 10-mail.conf
+Dans ce fichier de configuration on définit les boites mails avec lesquels 
+deovecot va travailler.
+```
+# Emplacement des boites mails et des indexes de dovecot
+mail_location = maildir:~/Mail:INBOX=/var/mail/%u/:INDEX=/var/dovecot-indexes/%u
+# Structure initiale à donner à une boite mail
+namespace inbox {
+  inbox = yes
+}
+# Nom du groupe gérant les boites mails
+mail_privileged_group = mail
+# Listes de plugins génériques à charger. On inclue mail_plugins pour ajouter 
+# des plugins dans la liste et pas écraser le contenu actuel de la variable. Le 
+# plugin notify est une dépendance du plugin mail_log qui a été configuré dans 
+# le fichier 10-logging.conf
+mail_plugins = $mail_plugins mail_log notify
+# Limite le nombre de connections qu'un utilisateur peut réaliser au serveur
+mail_max_userip_connections = 15
+```
+TODO: documenter ce que font mail_log et notify; documenter la dernière ligne de 
+la conf
+
+### 10-master.conf
+C'est le fichier de configuration principal de dovecot. C'est ici qu'on va 
+définir les différents services que proposeront notre installation. Au crans il 
+s'agit d'un serveur IMAP(s), d'un serveur POP3(s) et d'un serveur SASL.
+
+#### IMAP
+La configuration du service se décompose en deux partie : le service 
+de connexion et d'authentification au daemon imap et la configuration imap.
+```
+service imap-login {
+# Notre service écoute en clair sur le port 143 seulement sur le réseaux 
+# d'administration (pour les webmails) et il écoute en chiffré sur le 993 pour 
+# le reste du monde.
+  inet_listener imap {
+    address = 127.0.0.1, [::1], 172.16.10.126, [fd00::10:0:ff:fe01:2610]
+    port = 143
+  }
+  inet_listener imaps {
+    address = *, [::]
+    port = 993
+    ssl = yes
+  }
+  service_count = 0
+  process_min_avail = 6
+}
+service imap {
+  process_limit = 16384
+}
+
+```
+
+#### POP3
+Le service pop3 se configure de manière analogue.
+```
+service pop3-login {
+  inet_listener pop3 {
+    address = 127.0.0.1, [::1], 172.16.10.126, [fd00::10:0:ff:fe01:2610]
+    port = 110
+  }
+  inet_listener pop3s {
+    address = *, [::]
+    port = 995
+    ssl = yes
+  }
+  process_min_avail = 6
+  service_count = 0
+}
+service pop3 {
+  process_limit = 16384
+}
+```
+
+#### SASL
+Pour le service d'authentification SASL, on souhaite qu'il ne soit accessible 
+qu'en local et en clair. On ne définit donc qu'un seul bloc d'écoute en local 
+sur le port `4242` (il n'y a pas de port réservé par l'IANA pour le protocole).
+```
+service auth {
+  client_limit = 1024
+  inet_listener {
+     address = 127.0.0.1, [::1], {{ dovecot.inet_listener }}
+     port = 4242
+  }
+}
+```
+
+### 10-ssl.conf
+Dans ce fichier on se contente de dire à dovecot où trouver nos certificats pour 
+les connextions chiffrées :
+```
+ssl_cert = </etc/letsencrypt/live/crans.org/fullchain.pem
+ssl_key = /etc/letsencrypt/live/crans.org/privkey.pem
+```
-- 
GitLab