Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
pratique:informatique:mail:serveur_mail3 [01/06/2026 11:55] Zatalyzpratique:informatique:mail:serveur_mail3 [06/06/2026 13:13] (Version actuelle) – [Postfix] Zatalyz
Ligne 99: Ligne 99:
 ff02::2 ip6-allrouters</code> ff02::2 ip6-allrouters</code>
  
 +===== Alias avec joker =====
 +
 +Gandi a une fonctionnalité épatante : l'alias avec joker. 
 +
 +Extrait de leur doc : 
 +<WRAP center round box 100%>
 +Entrez le nom de d'alias, sans inclure le @. Vous pouvez également utiliser le caractère joker "*" pour, par exemple, avec "pierre*", rediriger tout ce qui commence par pierre dans votre boite (ex.: pierre@ -> pierremartin@, pierreafeu@, etc.). Cette option ne fonctionne toutefois qu'avec un minimum de 2 caractères avant ou après le joker.
 +</WRAP>
 +Un peu plus d'exemples. J'ai la boite mail ''vilain@example.org'', qui me sert à recevoir les inscriptions des sites, newsletters, commandes internet... autant dire que c'est bien rempli. ''vilain@'' n'est jamais exposé sur le net((Enfin ça apparait si je répond à un mail mais qui regarde la source ?)), au lieu de ça, je donne des alias, dont voici une liste :
 +  * nom.prenom@example.org
 +  * autrealias@example.org
 +  * news.*@example.org
 +  * marchand.*@example.org
 +  * wtf.*@example.org
 +
 +Les deux premiers (''nom.prenom@'' et ''autrealias@'') n'ont pas de joker, il faut avoir l'adresse exacte pour leur écrire. Les suivants par contre, je les adapte à la volée ; je donne ''marchand.site1@example.org'' à un premier site marchand et ''marchand.site2@example.org'' à un second site marchand, sans avoir besoin de créer les alias explicitement. Ensuite je m'en sert pour filtrer ce que je reçois dans ma boite mail et voir qui a revendu mon adresse (elles le sont rarement, en fait). 
 +
 +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'obligation de déclarer l'alias dans Thunderbird (mais pas chez le fournisseur mail !).
 +
 +Voilà la killer feature de Gandi, si difficile à trouver ailleurs.
 +
 +La meilleure alternative est [[https://addy.io/]]. C'est libre (une configuration un peu spécifique d'un serveur mail), donc on peut l'installer chez soi, ou déléguer ça en payant le service en question. De mon côté je paie *mais* j'ai encore des adresses sur mon serveur de base qui ont besoin de ces alias avec joker. Coup de bol pour moi, tous mes alias fonctionnels sont de la forme ''chaine.joker'' ; sans le point, j'allais avoir des soucis. 
 +
 +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'eau).
 ===== 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'attaque). 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'attaque).
Ligne 125: Ligne 149:
 On peut tout de même se paramétrer un user "superadmin" (avec un autre nom que "root") et un user pour postfixadmin, ce sera fait.  On peut tout de même se paramétrer un user "superadmin" (avec un autre nom que "root") et un user pour postfixadmin, ce sera fait. 
  
 +<WRAP center round info 100%>
 +  * phpmyadmin va créer un utilisateur “phpmyadmin” avec le mot de passe entré de la configuration initiale ; utilisateur qui n'a pas le droit de faire grand chose. Notre "superadmin" sera plus pratique pour bidouiller les tables, et avec un nom moins commun((Évidement, il faut l'appeler autrement que "superadmin". Soyez inventif.)).
 +  * postfixadmin va attendre un utilisateur et une bdd de ce nom ; autant les faire et ne pas se complexifier la tâche, bien que cela offre une surface d'attaque (nom "commun"). On verra peut-être comment changer, à un moment, si c'est faisable sans trop de galères.
 +</WRAP>
  
 +Ce qui suit est un demi-script bash. Juste le copier tel quel ne fonctionnera pas. 
 <code bash> <code bash>
 DB_ROOT_PASS=""  DB_ROOT_PASS="" 
Ligne 199: Ligne 228:
 Je vais avoir la surcouche graphique avec [[https://github.com/postfixadmin/postfixadmin|Postfixadmin]], qui permettra à mes utilisateurs de gérer leurs propres alias et mot de passe. Je vais avoir la surcouche graphique avec [[https://github.com/postfixadmin/postfixadmin|Postfixadmin]], qui permettra à mes utilisateurs de gérer leurs propres alias et mot de passe.
  
-Il y aura aussi phpmyadmin le temps des bidouilles, mais faut penser à l'enlever à la fin, ça fait une surface d'attaque en moins.+Il y aura aussi phpmyadmin le temps des bidouilles((Ou pas. Je ne l'ai pas mis, là, je vais tenter d'installer/gérer sans.)), mais faut penser à l'enlever à la fin, ça fait une surface d'attaque en moins
 + 
 +Paramétrer postfixadmin est l'un des premiers trucs qu'on va faire histoire que la base de donnée soit utilisable ensuite par les autres logiciels. 
 + 
 +=== Apache et certbot === 
 + 
 +On commence par paramétrer Apache, installer ce qu'il faut. 
 +  sudo apt install apache2 php certbot php-curl php-gd php-cli php-sqlite3  
 + 
 +Pour la configuration d'apache, cf script Ansible (ouais, ça pourrait être sur une forge ; peut-être un jour).  
 + 
 +Demander un certificat let's encrypt  
 +  sudo certbot certonly --standalone -d mondomain.org --pre-hook "service apache2 stop" --post-hook "service apache2 restart" 
 + 
 +Créer ensuite une page index basique histoire de vérifier si tout va bien. Ou utiliser celle sur /var/www/html (par défaut) pour le moment. 
 + 
 +<WRAP center round todo 60%> 
 +TODO : c'est bien de faire une page qui présente le nom de domaine. Dire que c'est un serveur mail, indiquer comment reporter les abuse, etc. Faudrait que je fasse une page en kit pour ça, respectant les bonnes pratiques (car il y a des attendus). En attendant, osef, c'est pas vital du tout. 
 +</WRAP> 
 + 
 + 
 +<code bash /etc/apache2/sites-available/org.example.poste.conf> 
 +<VirtualHost *:80> 
 +  ServerName poste.example.org 
 +  DocumentRoot /var/www/html 
 + 
 +RewriteEngine On 
 +RewriteCond %{REQUEST_URI} !.well-known/acme-challenge 
 +RewriteRule ^(.*)$ https://%{SERVER_NAME}$1 [R=301,L] 
 + 
 +</VirtualHost> 
 + 
 +<VirtualHost *:443> 
 +  ServerName poste.example.org 
 +  DocumentRoot /var/www/html 
 +  Alias /postfixadmin /srv/postfixadmin/public 
 +   
 +  <Directory /srv/postfixadmin/public> 
 +      Require all granted 
 +  </Directory> 
 + 
 +SSLEngine on 
 +SSLCertificateFile /etc/letsencrypt/live/poste.example.org/fullchain.pem 
 +SSLCertificateKeyFile /etc/letsencrypt/live/poste.example.org/privkey.pem 
 +  
 +</VirtualHost> 
 +</code> 
 + 
 + 
 +Désactiver le site de base, activer le "notre"
 + 
 +<code>sudo a2dissite 000-default.conf  
 +sudo a2ensite org.example.poste.conf 
 +sudo apachectl -t 
 +sudo apachectl graceful</code> 
 + 
 +=== Postfixadmin === 
 +Lors de l'étape de Mariadb, on lui a déjà préparé la base de donnée. 
 + 
 +Pour l'installer, on va passer par github plutôt que par le paquet, ce sera plus à jour. La doc d'installation officielle [[https://github.com/postfixadmin/postfixadmin/blob/master/INSTALL.md|est là]], je résume ici mes étapes en français. 
 + 
 +Télécharger la [[https://github.com/postfixadmin/postfixadmin/releases|dernière release]] (pas forcément jouer avec master qui est la version dev !) et la dézipper :  
 +<code> 
 +wget https://github.com/postfixadmin/postfixadmin/archive/refs/tags/v4.0.1.zip 
 +unzip v4.0.1.zip 
 +mv postfixadmin-4.0.1 /srv/postfixadmin 
 +cd /srv/postfixadmin 
 +sudo chmod a+x install.sh 
 +./install.sh 
 +</code> 
 + 
 +Modifier ''/srv/postfixadmin/config.local.php'' (voir ''/srv/postfixadmin/config.inc.php'' pour les options pertinentes) : 
 +<code php /srv/postfixadmin/config.local.php> 
 +<?php 
 +// Ce qui est ici surcharge config.inc.php. 
 + 
 +// Montrer qu'on a compris : 
 +$CONF['configured'] = true; 
 + 
 +// Parce que j'aime causer en français 
 +$CONF['default_language'] = 'fr'; 
 + 
 +// Les trucs de la BDD 
 +$CONF['database_type'] = 'mysqli'; 
 +$CONF['database_host'] = 'localhost'; 
 +$CONF['database_user'] = 'postfixadmin'; 
 +$CONF['database_password'] = 'HO JE SAIS PLUS'; 
 +$CONF['database_name'] = 'postfixadmin'; 
 + 
 +// Comment on chiffre les mots de passe. Faudrait que je vérifie l'idéal... La doc propose : 
 +$CONF['encrypt'] = 'dovecot:SHA512'; 
 +$CONF['dovecotpw'] = "/usr/bin/doveadm pw"; 
 + 
 +</code> 
 +Il y aura d'autres trucs à voir par la suite (transport, autoreply, les alias automatiques (abuse ok, mais les autres ?), etc, mais on voit ça en détail après. Là on met le minimum pour se connecter et le paramétrer. 
 + 
 +Se rendre ensuite sur https://poste.example.org/postfixadmin/setup.php : on devrait pouvoir générer le mot de passe et ajouter dans ''config.local.php'' quelque chose de ce genre :  
 + 
 +<code>$CONF['setup_password'] = 'Un truc chiffré';</code> 
 + 
 +En rafraichissant https://poste.example.org/postfixadmin/setup.php , on peut alors corriger d'éventuelles erreurs et créer le premier compte admin (l'identifiant doit être une adresse mail, le mot de passe doit être avec chiffres etc), puis se connecter
  
 ==== Sécurité ==== ==== Sécurité ====
Ligne 215: Ligne 344:
   sudo lvcreate -L 10g -s -n snap_root_$(date --iso)_logicielsOK /dev/VgPoste/root   sudo lvcreate -L 10g -s -n snap_root_$(date --iso)_logicielsOK /dev/VgPoste/root
  
 +===== Paramétrage des paquets =====
 +==== Postfixadmin, épisode 2 ====
 +<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é. 
 +</WRAP>
 +
 +Diverses modifications sur ''config.local.php'' qui me semblent pertinentes, avec un commentaire en français pour s'y retrouver.
 +<code php config.local.php><?php
 +// Ce qui est ici surcharge config.inc.php.
 +// Modifier "poste.example.org" par le nom du relai.
 +// Chercher "TODO" pour voir les modifs importantes ;)
 +// Montrer qu'on a compris :
 +$CONF['configured'] = true;
 +$CONF['setup_password'] = 'TODO!!!Quelque chose généré par setup.php';
 +
 +// Les trucs de la BDD
 +$CONF['database_type'] = 'mysqli';
 +$CONF['database_host'] = 'localhost';
 +$CONF['database_user'] = 'postfixadmin';
 +$CONF['database_password'] = 'TODO!!!';
 +$CONF['database_name'] = 'postfixadmin';
 +
 +// Comment on chiffre les mots de passe. Faudrait que je vérifie l'idéal... La doc propose :
 +$CONF['encrypt'] = 'dovecot:SHA512';
 +$CONF['dovecotpw'] = "/usr/bin/doveadm pw";
 +
 +// Valeurs par défaut des boîtes. Quota en MB. 5120=5GB, 10240=10GB
 +$CONF['aliases'] = '100';
 +$CONF['mailboxes'] = '10';
 +$CONF['maxquota'] = '5120';
 +$CONF['domain_quota_default'] = '10240';
 +// Activer les quotas (lié à Dovecot)
 +$CONF['quota'] = 'YES';
 +$CONF['used_quotas'] = 'YES';
 +$CONF['new_quota_table'] = 'YES';
 +
 +// Structure des Maildir du type /usr/local/virtual/domain.tld/username@domain.tld
 +$CONF['domain_path'] = 'YES';
 +$CONF['domain_in_mailbox'] = 'NO';
 +
 +// Transport postfix (quand on utilise autre chose qu'un user system)
 +$CONF['transport'] = 'YES';
 +$CONF['transport_default'] = 'virtual';
 +
 +// Vérifier que le domaine est autorisé (name server look-up)
 +$CONF['emailcheck_resolve_domain']='YES';
 +// Et qu'il est géré par postfix localement
 +$CONF['emailcheck_localaliasonly'] = 'YES';
 +
 +// 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/2822/5322)
 +// TODO : mettre le bon domaine !
 +$CONF['default_aliases'] = array (
 +    'abuse' => 'abuse@poste.example.org',
 +    'postmaster' => 'postmaster@poste.example.org',
 +);
 +
 +// Pas d'expiration de mot de passe, c'est pénible, et à terme ce sera géré via le LDAP.
 +$CONF['password_expiration'] = 'NO';
 +
 +// TODO : ceci quand on a configuré le reste du serveur mail et que "postmaster" (ou autre) existe.
 +// Compte admin pour envoyer les notifs
 +$CONF['admin_email'] = 'postmaster@poste.example.org';
 +$CONF['admin_smtp_password'] = '';
 +$CONF['admin_name'] = 'Postmaster';
 +
 +// SMTP Client, évite les erreurs "HELO" lorsque que postfiadmin envoie un truc.
 +// TODO : mettre le bon domaine !
 +$CONF['smtp_client'] = 'poste.example.org';
 +
 +// Ne pas permettre l'envoi de mail via cette interface
 +//$CONF['sendmail'] = 'NO';
 +
 +// Personnalisation de l'interface
 +// Parce que j'aime causer en français
 +$CONF['default_language'] = 'fr';
 +
 +// Nombre d'entrée par page. On peut mettre plus que le défaut...
 +$CONF['page_size'] = '30';
 +
 +// Footer : pas besoin d'un lien vers le domaine de base.
 +$CONF['show_footer_text'] = 'NO';
 +
 +// MOTD ("Motto of the day")
 +// Si besoin à un moment, c'est là. Peut se configurer par type d'user.
 +$CONF['motd_user'] = '';
 +$CONF['motd_admin'] = '';
 +$CONF['motd_superadmin'] = '';
 +
 +// Message envoyé lors de la création d'une nouvelle mailbox.
 +$CONF['welcome_text'] = <<<EOM
 +Bienvenue,
 +Votre nouvelle boite mail est active !
 +
 +Lisez notre guide de l'email ( https://alinea.ninm.net/dokuwiki/pratique:informatique:checklist:guide_debutant_mail )
 +pour éviter tout problème sur nos services !
 +
 +EOM;
 +
 +</code>
 +
 +==== 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'ancien tuto va être bon. 
 +
 +Toutes les commandes en sudo/root.
 +
 +=== Organisation des fichiers ===
 +  * ''/etc/dovecot/local.conf'' va lister toutes nos modifs, au lieu de modifier les fichiers systèmes dans ''/etc/dovecot/conf.d/''.
 +    * 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 ''doveconf -n'' devrait permettre de gérer ça.
 +    * Ce fichier est prévu pour ça dans Dovecot : tout à la fin de ''/etc/dovecot/dovecot.conf'', la ligne ''!include_try local.conf'' indique que le fichier sera inclus (et surchargera tout ce qu'il y a pu y avoir avant).
 +  * ''/etc/dovecot/dovecot-sql.conf.ext'' contient les infos de connexion à la BDD.
 +  * Il y aura quand même, je crois, quelques modifs à faire dans ''/etc/dovecot/conf.d/'', pour commenter des options dont on ne veut pas ?
 +
 +<WRAP center round tip 60%>
 +Les fichiers Dovecot se terminant par "ext" sont [[https://doc.dovecot.org/2.3/configuration_manual/config_file/#external-config-files|analysés différemment par le logiciel]]. On ne touche pas à l'extension et on n'essaie pas de mettre n'importe quoi, n'importe où...
 +</WRAP>
 +
 +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.
 +
 +<code>groupadd --system vmail
 +useradd --system --gid vmail vmail
 +mkdir -p /var/vmail
 +chown -R vmail:vmail /var/vmail
 +chmod u=rwx,g=rx,o= /var/vmail</code>
 +
 +<WRAP center round info 100%>
 +  * ''--system'' crée un utilisateur explicitement "système", spécialement réservé aux services et daemons. L'ID sera choisi automatiquement dans ce qui est dispo sur la plage réservée aux utilisateurs systèmes.
 +</WRAP>
 +
 +=== local.conf ===
 +Oui, ce tuto méritera que j'explique quoi et pourquoi. Mais le fichier local.conf devrait être bon avec Dovecot 2.4 (pas avant). Les commentaires devraient être assez parlant.
 +
 +Sinon : 
 +  * Authentification : visiblement tout passera par mysql à présent ?
 +  * Les modifs de la BDD sont pour maridab+Postfixadmin, si vous utilisez autre chose, adaptez...
 +  * SSL : c'est simplifié par rapport à la version précédente. Pensez évidement à indiquer le bon certificat. Ma partie ''ssl_cipher_list'' est plus exigente que la version de base, je me base sur les recommandations de [[https://rodolphe.breard.tf/article/mettre-en-place-un-serveur-mail-perso/#tls|Tycho]].
 +  * Pour les plugins : 
 +    * la compression ([[https://doc.dovecot.org/2.3/settings/plugin/imap-zlib-plugin/|imap_zlib]]), ce qui va économiser la bande passante,
 +    * l'affichage des quotas dans les clients qui le permettent ([[https://doc.dovecot.org/2.3/configuration_manual/quota_plugin/#quota-plugin|quota, imap_quota, quota_clone]])
 +    * la gestion de sieve avec [[https://doc.dovecot.org/main/core/plugins/imap_sieve.html|imap_sieve]]
 +
 +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'active donc chez moi.
 +
 +<code bash /etc/dovecot/local.conf># Modifs locales à Dovecot.
 +# En cas de doute, doc de ref : 
 +# https://doc.dovecot.org/
 +# https://workaround.org/ispmail-trixie/dovecot/
 +
 +# Équivalent 10-mail.conf. Boites mails gérés à /var/vmail/domain/user.
 +####
 +mail_driver = maildir
 +mail_home = /var/vmail/%{user | domain}/%{user | username}
 +mail_path = ~/Maildir
 +mail_uid = vmail
 +mail_gid = vmail
 +mail_inbox_path = ~/Maildir/
 +
 +# Permettre à Postfix d'utiliser Dovecot pour l'authentification
 +####
 +service auth {
 +  unix_listener /var/spool/postfix/private/dovecot-auth {
 +    mode = 0660
 +    user = postfix
 +    group = postfix
 +  }
 +}
 +
 +# Connexion à la BDD
 +####
 +sql_driver = mysql
 +
 +mysql /var/run/mysqld/mysqld.sock {
 +  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('*:bytes=', quota 'M') AS quota_rule \
 +    FROM mailbox WHERE username = '%{user}' AND active = 1
 +  iterate_query = SELECT username AS user FROM mailbox WHERE active = 1
 +}
 +
 +passdb sql {
 +  # La requête doit retourner le champ 'password'
 +  query = SELECT password FROM mailbox WHERE username = '%{user}' AND active = 1
 +}
 +
 +# SSL (10-ssl.conf)
 +####
 +ssl = required
 +ssl_server {
 +  ## Todo à changer ;)
 +  cert_file = /etc/letsencrypt/live/poste.example.org/fullchain.pem
 +  key_file = /etc/letsencrypt/live/poste.example.org/privkey.pem
 +}
 +ssl_min_protocol = TLSv1.2
 +ssl_cipher_list = HIGH:!eNULL:!LOW:!MEDIUM:!EXP:!RC4:!3DES:!MD5:!SHA1:!SHA256:!SHA384:!PSK:!kRSA:!SRP:-DH:+ECDH
 +
 +
 +# 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 /var/spool/postfix/private/dovecot-lmtp {
 +    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'éxécuter quand même
 +  restart_request_count = 50
 +  ## Garde un processus en attente (limite la latence)
 +  process_min_avail = 1
 +}
 +
 +# Quota
 +#### 
 +## TODO : Vérifier que "quota2_before_insert" n'existe plus sur la base postfixadmin
 +
 +quota "User quota" {
 +  driver = count
 +}
 +
 +dict_server {
 +  dict mysql_quota {
 +    driver = sql
 +    sql_driver = mysql
 +
 +    dict_map priv/quota/messages {
 +      sql_table = quota2
 +      username_field = username
 +      value_field messages {
 +      }
 +    }
 +
 +    dict_map priv/quota/storage {
 +      sql_table = quota2
 +      username_field = username
 +      value_field bytes {
 +      }
 +    }
 +  }
 +}
 +
 +quota_clone {
 +  dict proxy {
 +    name = mysql_quota
 +  }
 +}
 +
 +# Alias avec joker
 +#### 
 +
 +recipient_delimiter = .
 +</code>
 +
 +
 +=== Quota ===
 +Il y a actuellement un [[https://github.com/postfixadmin/postfixadmin/issues/935|conflit]] avec les quotas sur Dovecot 2.4 (pas avant) et Postfixadmin (c'est ballot). Cependant, je ne semble pas avoir le trigger en question sur la release que j'utilise...
 +
 +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, EVENT_OBJECT_TABLE 
 +FROM INFORMATION_SCHEMA.TRIGGERS;
 +HOW TRIGGERS WHERE `Table` = 'quota2'\G
 +
 +-- S'il y a une réponse, on vire, sinon tout ira bien.
 +DROP TRIGGER quota2_before_insert;
 +</code>
 +
 +<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 "trop" ? À tester. Sinon reprendre le vieux tuto...
 +</WRAP>
 +
 +
 +
 +=== Gestion des droits, commandes de base ===
 +S'assurer que les droits empêcheront des malveillants de lire le mot de passe de la BDD : 
 +chown root:root /etc/dovecot/local.conf
 +chmod go= /etc/dovecot/local.conf
 +
 +On vérifie que la configuration n'a pas d'erreur ; si tout va bien, elle s'affiche en retour, sinon ça liste les erreurs à corriger :
 +
 +  doveconf -n
 +
 +Et après ça on peut redémarrer Dovecot.
 +
 +  service dovecot restart
 +
 +Si besoin de plus de détail, la [[https://doc.dovecot.org/|doc officielle est là]]. 
 +
 +
 +==== Postfix ====
 +Ce qu'il y a réellement à modifier : 
 +  * check/header_checks_out ? (sur mon ancien serveur, pas sur base neuve)
 +  * mycfg : les divers fichiers de config
 +  * dynamicmaps.cf
 +  * main.cf
 +  * master.cf
 +
 +=== Échanges entre Postfix et la base de donnée ===
 +[[https://workaround.org|ISPMail Guide]] propose une solution où nous référençons un fichier dans ''main.cf'', ce dernier ayant les infos de connexion à la base de donnée et la requête (query) à faire pour l'action demandée. 
 +
 +Par exemple ''virtual_mailbox_maps = mysql:/etc/postfix/mycfg/mysql-virtual-mailbox-maps.cf'' dans ''main.cf''. Le fichier mysql-virtual-mailbox-maps.cf a la forme suivante : 
 +<code>user = mailserver
 +password = MOTDEPASSE
 +hosts = 127.0.0.1
 +dbname = mailserver
 +query = SELECT 1 FROM virtual_domains WHERE name='%s'
 +</code>
 +
 +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 "query" dans ce même fichier((Cf https://www.postfix.org/sqlite_table.5.html )). Ce qui ressemble à ceci :
 +
 +<code>virtual_mailbox_maps = sqlite:server_sql
 +server_sql_query = SELECT 1 FROM virtual_domains WHERE name='%s'
 +</code>
 +
 +C'est plus lisible, mais c'est déprécié, car main.cf a des droits plus permissifs que ce qu'on peut mettre dans les fichiers du type mycfg. Donc, on expose plus le mot de passe de la bdd... 
 +
 +Postfixadmin propose un script (même s'il s'appelle txt) pour [[https://github.com/postfixadmin/postfixadmin/blob/master/DOCUMENTS/POSTFIX_CONF.txt|créer les petits fichiers de connexion à sa BDD]]. Ça a le mérite d'être fait... Et reste donc à mettre les bons droits. Je vais finalement configurer mes fichiers en ce sens...
 +
 +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, /etc/postfix/main.cf doit être lu par d'autres logiciels (pourquoi ?) et donc assez permissif en lecture. Donc ce qui concerne sa connexion à la BDD est dans un dossier séparé avec les droits de lecture pour root/postfix seulement. Postfix ne consulte la base qu'en lecture.
 +Mais dans le même temps, /srv/postfixadmin/config.local.php expose les infos de connexion à la BDD avec en plus un user qui peut écrire. De même que dovecot via /etc/dovecot/local.conf. 
 +
 +Ce qui est assez absurde. 
 +
 +Ok, pour postfix... 
 +
 +Pour postfixadmin on tentera un fichier avec les infos dans db-secret.php (chmod 640, root:www-data), puis ''include '/etc/postfixadmin/db-secret.php';'' dans ''config.local.php''.
 +
 +Pour dovecot, même principe : /etc/dovecot/dovecot-sql.conf avec droits 0640 (root:dovecot). ''!include /etc/dovecot/dovecot-sql.conf'' dans ''local.conf''.
 +
 +À tester mais ça semblerait plus propre.
  
 {{tag>mail sysadmin}} {{tag>mail sysadmin}}
pratique/informatique/mail/serveur_mail3.1780307726.txt.gz · Dernière modification : 01/06/2026 11:55 de Zatalyz