Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| pratique:informatique:mail:serveur_mail3 [01/06/2026 17:27] – [Web] Zatalyz | pratique:informatique:mail:serveur_mail3 [06/06/2026 13:13] (Version actuelle) – [Postfix] Zatalyz | ||
|---|---|---|---|
| Ligne 99: | Ligne 99: | ||
| ff02::2 ip6-allrouters</ | ff02::2 ip6-allrouters</ | ||
| + | ===== Alias avec joker ===== | ||
| + | |||
| + | Gandi a une fonctionnalité épatante : l' | ||
| + | |||
| + | Extrait de leur doc : | ||
| + | <WRAP center round box 100%> | ||
| + | Entrez le nom de d' | ||
| + | </ | ||
| + | Un peu plus d' | ||
| + | * nom.prenom@example.org | ||
| + | * autrealias@example.org | ||
| + | * news.*@example.org | ||
| + | * marchand.*@example.org | ||
| + | * wtf.*@example.org | ||
| + | |||
| + | Les deux premiers ('' | ||
| + | |||
| + | Je peux non seulement recevoir des mails à ces adresses avec joker, mais aussi répondre avec au besoin, bien que dans ce cas je sois dans l' | ||
| + | |||
| + | Voilà la killer feature de Gandi, si difficile à trouver ailleurs. | ||
| + | |||
| + | La meilleure alternative est [[https:// | ||
| + | |||
| + | J'ai donc fait quelques hacks pour que ce soit possible. Cela demandera quelques bidouilles sur Postfix et Dovecot (détaillées au fil de l' | ||
| ===== Installation des paquets ===== | ===== Installation des paquets ===== | ||
| Configuration classique avec postfix, dovecot, mariadb, et postfixadmin pour gérer graphiquement les détails. Ainsi que phpmyadmin le temps des bidouilles (désactivé ensuite pour réduire les surfaces d' | Configuration classique avec postfix, dovecot, mariadb, et postfixadmin pour gérer graphiquement les détails. Ainsi que phpmyadmin le temps des bidouilles (désactivé ensuite pour réduire les surfaces d' | ||
| Ligne 294: | Ligne 318: | ||
| // Comment on chiffre les mots de passe. Faudrait que je vérifie l' | // Comment on chiffre les mots de passe. Faudrait que je vérifie l' | ||
| - | // $CONF[' | + | $CONF[' |
| - | // Mais ça fait planter postfixadmin si je met ça... | + | $CONF[' |
| - | + | ||
| - | // Nombre d' | + | |
| - | $CONF[' | + | |
| - | + | ||
| - | // Valeurs par défaut des boîtes. Quota en MB. 5120=5GB, 10240=10GB | + | |
| - | $CONF[' | + | |
| - | $CONF[' | + | |
| - | $CONF[' | + | |
| - | $CONF[' | + | |
| - | // Activer les quotas | + | |
| - | $CONF[' | + | |
| - | + | ||
| - | // Ne pas permettre l' | + | |
| - | $CONF[' | + | |
| </ | </ | ||
| - | Il y aura d' | + | Il y aura d' |
| Se rendre ensuite sur https:// | Se rendre ensuite sur https:// | ||
| Ligne 319: | Ligne 329: | ||
| En rafraichissant https:// | En rafraichissant https:// | ||
| + | |||
| ==== Sécurité ==== | ==== Sécurité ==== | ||
| <WRAP center round todo 60%> | <WRAP center round todo 60%> | ||
| Ligne 333: | Ligne 344: | ||
| sudo lvcreate -L 10g -s -n snap_root_$(date --iso)_logicielsOK / | sudo lvcreate -L 10g -s -n snap_root_$(date --iso)_logicielsOK / | ||
| + | ===== Paramétrage des paquets ===== | ||
| + | ==== Postfixadmin, | ||
| + | <WRAP center round todo 60%> | ||
| + | Peut-être que c'est plus intéressant d'y revenir tout à la fin, mais je copie les modifs du fichier ici, pour que ce soit noté. | ||
| + | </ | ||
| + | |||
| + | Diverses modifications sur '' | ||
| + | <code php config.local.php><? | ||
| + | // Ce qui est ici surcharge config.inc.php. | ||
| + | // Modifier " | ||
| + | // Chercher " | ||
| + | // Montrer qu'on a compris : | ||
| + | $CONF[' | ||
| + | $CONF[' | ||
| + | |||
| + | // Les trucs de la BDD | ||
| + | $CONF[' | ||
| + | $CONF[' | ||
| + | $CONF[' | ||
| + | $CONF[' | ||
| + | $CONF[' | ||
| + | |||
| + | // Comment on chiffre les mots de passe. Faudrait que je vérifie l' | ||
| + | $CONF[' | ||
| + | $CONF[' | ||
| + | |||
| + | // Valeurs par défaut des boîtes. Quota en MB. 5120=5GB, 10240=10GB | ||
| + | $CONF[' | ||
| + | $CONF[' | ||
| + | $CONF[' | ||
| + | $CONF[' | ||
| + | // Activer les quotas (lié à Dovecot) | ||
| + | $CONF[' | ||
| + | $CONF[' | ||
| + | $CONF[' | ||
| + | |||
| + | // Structure des Maildir du type / | ||
| + | $CONF[' | ||
| + | $CONF[' | ||
| + | |||
| + | // Transport postfix (quand on utilise autre chose qu'un user system) | ||
| + | $CONF[' | ||
| + | $CONF[' | ||
| + | |||
| + | // Vérifier que le domaine est autorisé (name server look-up) | ||
| + | $CONF[' | ||
| + | // Et qu'il est géré par postfix localement | ||
| + | $CONF[' | ||
| + | |||
| + | // Alias par défaut créés avec un domaine mail. | ||
| + | // adresse complète (pour envoyer vers le domaine maitre) ou juste local (alias de la boite) | ||
| + | // On ne garde que abuse (RFC 2142) et postmaster (RFC 822/ | ||
| + | // TODO : mettre le bon domaine ! | ||
| + | $CONF[' | ||
| + | ' | ||
| + | ' | ||
| + | ); | ||
| + | |||
| + | // Pas d' | ||
| + | $CONF[' | ||
| + | |||
| + | // TODO : ceci quand on a configuré le reste du serveur mail et que " | ||
| + | // Compte admin pour envoyer les notifs | ||
| + | $CONF[' | ||
| + | $CONF[' | ||
| + | $CONF[' | ||
| + | |||
| + | // SMTP Client, évite les erreurs " | ||
| + | // TODO : mettre le bon domaine ! | ||
| + | $CONF[' | ||
| + | |||
| + | // Ne pas permettre l' | ||
| + | // | ||
| + | |||
| + | // Personnalisation de l' | ||
| + | // Parce que j'aime causer en français | ||
| + | $CONF[' | ||
| + | |||
| + | // Nombre d' | ||
| + | $CONF[' | ||
| + | |||
| + | // Footer : pas besoin d'un lien vers le domaine de base. | ||
| + | $CONF[' | ||
| + | |||
| + | // MOTD (" | ||
| + | // Si besoin à un moment, c'est là. Peut se configurer par type d' | ||
| + | $CONF[' | ||
| + | $CONF[' | ||
| + | $CONF[' | ||
| + | |||
| + | // Message envoyé lors de la création d'une nouvelle mailbox. | ||
| + | $CONF[' | ||
| + | Bienvenue, | ||
| + | Votre nouvelle boite mail est active ! | ||
| + | |||
| + | Lisez notre guide de l' | ||
| + | pour éviter tout problème sur nos services ! | ||
| + | |||
| + | EOM; | ||
| + | |||
| + | </ | ||
| + | |||
| + | ==== Dovecot ==== | ||
| + | Ça devrait aller assez vite, ce n'est pas lui qui demande le plus de bidouilles. En théorie ce que j'ai fait sur l' | ||
| + | |||
| + | Toutes les commandes en sudo/root. | ||
| + | |||
| + | === Organisation des fichiers === | ||
| + | * ''/ | ||
| + | * Cela évitera des conflits lors des mises à jour et c'est plus rapide à paramétrer avec Ansible sans tout péter. Il restera tout de même à tester, à ces moments, si certaines syntaxes n'ont pas changé ; la commande '' | ||
| + | * Ce fichier est prévu pour ça dans Dovecot : tout à la fin de ''/ | ||
| + | * ''/ | ||
| + | * Il y aura quand même, je crois, quelques modifs à faire dans ''/ | ||
| + | |||
| + | <WRAP center round tip 60%> | ||
| + | Les fichiers Dovecot se terminant par " | ||
| + | </ | ||
| + | |||
| + | Nous allons aussi créer un utilisateur et son répertoire pour stocker les boites mails sur /var/vmail, que Dovecot va en grande partie gérer. | ||
| + | |||
| + | < | ||
| + | useradd --system --gid vmail vmail | ||
| + | mkdir -p /var/vmail | ||
| + | chown -R vmail:vmail /var/vmail | ||
| + | chmod u=rwx, | ||
| + | |||
| + | <WRAP center round info 100%> | ||
| + | * '' | ||
| + | </ | ||
| + | |||
| + | === local.conf === | ||
| + | Oui, ce tuto méritera que j' | ||
| + | |||
| + | Sinon : | ||
| + | * Authentification : visiblement tout passera par mysql à présent ? | ||
| + | * Les modifs de la BDD sont pour maridab+Postfixadmin, | ||
| + | * SSL : c'est simplifié par rapport à la version précédente. Pensez évidement à indiquer le bon certificat. Ma partie '' | ||
| + | * Pour les plugins : | ||
| + | * la compression ([[https:// | ||
| + | * l' | ||
| + | * la gestion de sieve avec [[https:// | ||
| + | |||
| + | SIEVE permet de créer des règles de filtre sur le serveur et donc de trier automatiquement les emails sans lien avec le client courriel. Pratique quand on switche entre webmail et divers thunderbird. Snappymail permet de gérer ces filtres ; il y avait un module thunderbird mais actuellement indisponible. Je l' | ||
| + | |||
| + | <code bash / | ||
| + | # En cas de doute, doc de ref : | ||
| + | # https:// | ||
| + | # https:// | ||
| + | |||
| + | # Équivalent 10-mail.conf. Boites mails gérés à / | ||
| + | #### | ||
| + | mail_driver = maildir | ||
| + | mail_home = / | ||
| + | mail_path = ~/Maildir | ||
| + | mail_uid = vmail | ||
| + | mail_gid = vmail | ||
| + | mail_inbox_path = ~/Maildir/ | ||
| + | |||
| + | # Permettre à Postfix d' | ||
| + | #### | ||
| + | service auth { | ||
| + | unix_listener / | ||
| + | mode = 0660 | ||
| + | user = postfix | ||
| + | group = postfix | ||
| + | } | ||
| + | } | ||
| + | |||
| + | # Connexion à la BDD | ||
| + | #### | ||
| + | sql_driver = mysql | ||
| + | |||
| + | mysql / | ||
| + | user = postfixadmin | ||
| + | ## Todo à changer ;) | ||
| + | password = 'HO LE BEAU MOT DE PASSE' | ||
| + | dbname = postfixadmin | ||
| + | host = 127.0.0.1 | ||
| + | } | ||
| + | |||
| + | userdb sql { | ||
| + | query = SELECT username AS user, \ | ||
| + | CONCAT(' | ||
| + | FROM mailbox WHERE username = ' | ||
| + | iterate_query = SELECT username AS user FROM mailbox WHERE active = 1 | ||
| + | } | ||
| + | |||
| + | passdb sql { | ||
| + | # La requête doit retourner le champ ' | ||
| + | query = SELECT password FROM mailbox WHERE username = ' | ||
| + | } | ||
| + | |||
| + | # SSL (10-ssl.conf) | ||
| + | #### | ||
| + | ssl = required | ||
| + | ssl_server { | ||
| + | ## Todo à changer ;) | ||
| + | cert_file = / | ||
| + | key_file = / | ||
| + | } | ||
| + | ssl_min_protocol = TLSv1.2 | ||
| + | ssl_cipher_list = HIGH: | ||
| + | |||
| + | |||
| + | # Plugins | ||
| + | #### | ||
| + | mail_plugins = quota zlib quota_clone | ||
| + | |||
| + | protocol imap { | ||
| + | mail_plugins = $mail_plugins imap_zlib imap_quota imap_sieve | ||
| + | } | ||
| + | |||
| + | # Pour utiliser lmtp, plus robuste que LDA dans la délivrance des mails | ||
| + | # LMTP gère la réception et la livraison des e-mails dans les boîtes aux lettres. | ||
| + | #### | ||
| + | service lmtp { | ||
| + | unix_listener / | ||
| + | mode = 0600 | ||
| + | user = postfix | ||
| + | group = postfix | ||
| + | } | ||
| + | } | ||
| + | |||
| + | protocol lmtp { | ||
| + | auth_username_format = | ||
| + | mail_plugins = $mail_plugins sieve | ||
| + | } | ||
| + | |||
| + | # SIEVE | ||
| + | #### | ||
| + | service managesieve-login { | ||
| + | # Listen only on localhost | ||
| + | inet_listener sieve { | ||
| + | listen= 127.0.0.1 | ||
| + | port = 4190 | ||
| + | } | ||
| + | |||
| + | # Disable the deprecated listener | ||
| + | inet_listener sieve_deprecated { | ||
| + | port = 0 | ||
| + | } | ||
| + | ## Limite les fuites mémoires tout en laissant plusieurs processus s' | ||
| + | restart_request_count = 50 | ||
| + | ## Garde un processus en attente (limite la latence) | ||
| + | process_min_avail = 1 | ||
| + | } | ||
| + | |||
| + | # Quota | ||
| + | #### | ||
| + | ## TODO : Vérifier que " | ||
| + | |||
| + | quota "User quota" { | ||
| + | driver = count | ||
| + | } | ||
| + | |||
| + | dict_server { | ||
| + | dict mysql_quota { | ||
| + | driver = sql | ||
| + | sql_driver = mysql | ||
| + | |||
| + | dict_map priv/ | ||
| + | sql_table = quota2 | ||
| + | username_field = username | ||
| + | value_field messages { | ||
| + | } | ||
| + | } | ||
| + | |||
| + | dict_map priv/ | ||
| + | sql_table = quota2 | ||
| + | username_field = username | ||
| + | value_field bytes { | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | |||
| + | quota_clone { | ||
| + | dict proxy { | ||
| + | name = mysql_quota | ||
| + | } | ||
| + | } | ||
| + | |||
| + | # Alias avec joker | ||
| + | #### | ||
| + | |||
| + | recipient_delimiter = . | ||
| + | </ | ||
| + | |||
| + | |||
| + | === Quota === | ||
| + | Il y a actuellement un [[https:// | ||
| + | |||
| + | Dans la BDD : | ||
| + | <code mysql> | ||
| + | sudo mariadb -u root | ||
| + | |||
| + | -- Aller dans la bonne base | ||
| + | USE postfixadmin; | ||
| + | |||
| + | -- Vérifier si le trigger existe | ||
| + | SELECT TRIGGER_NAME, | ||
| + | FROM INFORMATION_SCHEMA.TRIGGERS; | ||
| + | HOW TRIGGERS WHERE `Table` = ' | ||
| + | |||
| + | -- S'il y a une réponse, on vire, sinon tout ira bien. | ||
| + | DROP TRIGGER quota2_before_insert; | ||
| + | </ | ||
| + | |||
| + | <WRAP center round todo 60%> | ||
| + | TODO : il faudra vérifier comment tout marche et si ça marche bien ; je délègue beaucoup à postfixadmin mais est-ce que je ne délègue pas " | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | === Gestion des droits, commandes de base === | ||
| + | S' | ||
| + | chown root:root / | ||
| + | chmod go= / | ||
| + | |||
| + | On vérifie que la configuration n'a pas d' | ||
| + | |||
| + | doveconf -n | ||
| + | |||
| + | Et après ça on peut redémarrer Dovecot. | ||
| + | |||
| + | service dovecot restart | ||
| + | |||
| + | Si besoin de plus de détail, la [[https:// | ||
| + | |||
| + | |||
| + | ==== Postfix ==== | ||
| + | Ce qu'il y a réellement à modifier : | ||
| + | * check/ | ||
| + | * mycfg : les divers fichiers de config | ||
| + | * dynamicmaps.cf | ||
| + | * main.cf | ||
| + | * master.cf | ||
| + | |||
| + | === Échanges entre Postfix et la base de donnée === | ||
| + | [[https:// | ||
| + | |||
| + | Par exemple '' | ||
| + | < | ||
| + | password = MOTDEPASSE | ||
| + | hosts = 127.0.0.1 | ||
| + | dbname = mailserver | ||
| + | query = SELECT 1 FROM virtual_domains WHERE name=' | ||
| + | </ | ||
| + | |||
| + | Sauf que je trouve cela redondant et amène à mettre les infos de connexion à la base de donnée à plusieurs endroits. Donc si on change le mot de passe, faut toucher à plusieurs fichiers. Je préfèrerais du DRY (Don't Repeat Yourself). | ||
| + | |||
| + | On pouvait en réalité déclarer une fois les infos dans main.cf, puis la " | ||
| + | |||
| + | < | ||
| + | server_sql_query = SELECT 1 FROM virtual_domains WHERE name=' | ||
| + | </ | ||
| + | |||
| + | C'est plus lisible, mais c'est déprécié, | ||
| + | |||
| + | Postfixadmin propose un script (même s'il s' | ||
| + | |||
| + | Mieux vaut un utilisateur Postfix pour la BDD qui n'a que les droits en lecture (postfix n'a pas à écrire). | ||
| + | |||
| + | ===== TODO ===== | ||
| + | ==== Revoir ces histoires de droits ==== | ||
| + | Concernant les droits, / | ||
| + | Mais dans le même temps, / | ||
| + | |||
| + | Ce qui est assez absurde. | ||
| + | |||
| + | Ok, pour postfix... | ||
| + | |||
| + | Pour postfixadmin on tentera un fichier avec les infos dans db-secret.php (chmod 640, root: | ||
| + | |||
| + | Pour dovecot, même principe : / | ||
| + | |||
| + | À tester mais ça semblerait plus propre. | ||
| {{tag> | {{tag> | ||