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_mail2 [22/09/2024 11:42] – [Dovecot] ajout de plugins Zatalyz | pratique:informatique:mail:serveur_mail2 [04/06/2026 10:20] (Version actuelle) – [Dovecot] Zatalyz | ||
|---|---|---|---|
| Ligne 2: | Ligne 2: | ||
| ===== Pas à pas ===== | ===== Pas à pas ===== | ||
| <WRAP center round todo 60%> | <WRAP center round todo 60%> | ||
| - | Version en travail reprenant les points clés vu dans les divers tutos et adaptés à ma propre façon de fonctionner. | + | <del>Version en travail</ |
| + | |||
| + | Voir [[pratique: | ||
| </ | </ | ||
| Ligne 28: | Ligne 30: | ||
| poste.example.org. | poste.example.org. | ||
| poste.example.org. | poste.example.org. | ||
| - | example.org. | + | example.org. |
| </ | </ | ||
| Ligne 47: | Ligne 49: | ||
| L'un et l' | L'un et l' | ||
| + | <WRAP center round info 60%> | ||
| + | === IPV6 et fournisseurs === | ||
| + | La gestion d'ipv6 dépend entièrement du bon vouloir du fournisseur. Pas évident de savoir en amont, sauf à déjà avoir des machines chez ce fournisseur et accès à l' | ||
| + | |||
| + | Quand on monte un serveur mail en local, cela dépend du FAI, mais aussi des capacités de la box. | ||
| + | * Chez OVH, ma box (jamais remplacée et assez vieille) ne permettais pas de faire de l' | ||
| + | * Chez Free, la box ne le gère pas non plus et ça reste un problème relevé sur les forums en 2026. De toute façon, les IP de Free seront résidentielles, | ||
| + | </ | ||
| ===== Ports et nftables ===== | ===== Ports et nftables ===== | ||
| Ligne 71: | Ligne 81: | ||
| On ouvre les ports sur le proxy quand tout le reste est fini... | On ouvre les ports sur le proxy quand tout le reste est fini... | ||
| + | |||
| + | <WRAP center round info 100%> | ||
| + | Avec la config paramétrée dans [[pratique: | ||
| + | * ''/ | ||
| + | * ''/ | ||
| + | * ''/ | ||
| + | </ | ||
| ===== Vérifier l'host ===== | ===== Vérifier l'host ===== | ||
| Ligne 105: | Ligne 122: | ||
| * dovecot-managesieved : permet aux utilisateurs de définir leurs règles de filtre. | * dovecot-managesieved : permet aux utilisateurs de définir leurs règles de filtre. | ||
| - | La chasse aux spams se fera avec rspamd, un logiciel tiers qui traite les spams. Il gère aussi la signature automatique des clés de domaine (DKIM). | + | La chasse aux spams se fera avec <del>rspamd, un logiciel tiers qui traite les spams. Il gère aussi la signature automatique des clés de domaine (DKIM)</ |
| + | |||
| + | <WRAP center round help 60%> | ||
| + | Rspamd est certes plebiscité mais... j'ai des misères à le faire tourner, et puis ça m' | ||
| + | |||
| + | La chasse au spam reste donc un point en suspens pour le moment, attendant plus d' | ||
| + | </ | ||
| Mariadb ne sert qu'à stocker les utilisateurs donc très peu de données, sa perfomance ne sera pas un souci. Je vais avoir la surcouche graphique avec [[https:// | Mariadb ne sert qu'à stocker les utilisateurs donc très peu de données, sa perfomance ne sera pas un souci. Je vais avoir la surcouche graphique avec [[https:// | ||
| Ligne 117: | Ligne 141: | ||
| Le certificat SSL sera géré avec certbot, classique et fonctionnel. | Le certificat SSL sera géré avec certbot, classique et fonctionnel. | ||
| - | On va avoir un peu d' | + | On va avoir un peu d' |
| Finalement : | Finalement : | ||
| Ligne 132: | Ligne 156: | ||
| Mon apt est configuré pour ne pas installer par défaut les recommandés et suggérés, ce qui demande de voir la liste et de compléter au besoin. Ici, à installer en complément pour se simplifier la vie : | Mon apt est configuré pour ne pas installer par défaut les recommandés et suggérés, ce qui demande de voir la liste et de compléter au besoin. Ici, à installer en complément pour se simplifier la vie : | ||
| sudo apt install shared-mime-info xdg-user-dirs php-curl php-gd php-cli | sudo apt install shared-mime-info xdg-user-dirs php-curl php-gd php-cli | ||
| - | | + | |
| + | |||
| + | <WRAP center round help 60%> | ||
| + | Par ailleurs, il faudrait que je gère un chouïa mieux DMARC. C'est paramétré mais : | ||
| + | * Je n' | ||
| + | * Je n' | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | [[https:// | ||
| + | </ | ||
| + | |||
| et enfin (parce qu'il est un chouïa pénible sinon) | et enfin (parce qu'il est un chouïa pénible sinon) | ||
| sudo apt install rkhunter | sudo apt install rkhunter | ||
| Ligne 145: | Ligne 181: | ||
| ===== Un peu de web ===== | ===== Un peu de web ===== | ||
| Avec Apache, parce que je le connais, mais vu ce qu'il y a à faire, Nginx suffira aussi. Ou Lighttpd. Faites votre vie, adaptez. En vrai faudra que je vois à mettre Lighttpd qui serait parfait pour le job. | Avec Apache, parce que je le connais, mais vu ce qu'il y a à faire, Nginx suffira aussi. Ou Lighttpd. Faites votre vie, adaptez. En vrai faudra que je vois à mettre Lighttpd qui serait parfait pour le job. | ||
| + | |||
| + | <WRAP center round tip 60%> | ||
| + | Si on utilise Apache, | ||
| + | </ | ||
| + | |||
| C'est plus pour voir si ça marche... et par la suite, si un bot (voir une vraie curieuse) regarde la page principale, y'aura un bout d' | C'est plus pour voir si ça marche... et par la suite, si un bot (voir une vraie curieuse) regarde la page principale, y'aura un bout d' | ||
| Ligne 379: | Ligne 420: | ||
| Primo créer un user spécialement pour gérer les mails, et stocker ces derniers sur /var/vmail : | Primo créer un user spécialement pour gérer les mails, et stocker ces derniers sur /var/vmail : | ||
| - | | + | < |
| - | useradd -g vmail -u 5000 vmail -d / | + | useradd --system --gid vmail vmail |
| - | chown -R vmail:vmail /var/vmail | + | mkdir -p / |
| + | chown -R vmail:vmail /var/vmail | ||
| + | chmod u=rwx, | ||
| + | |||
| + | <WRAP center round info 100%> | ||
| + | * '' | ||
| + | </ | ||
| Ensuite on va modifier des fichiers. Veiller à ce que les lignes suivantes existent et soient commentés/ | Ensuite on va modifier des fichiers. Veiller à ce que les lignes suivantes existent et soient commentés/ | ||
| Ligne 523: | Ligne 571: | ||
| </ | </ | ||
| + | |||
| + | ==== 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. | ||
| Activer la gestion de sieve via lmtp | Activer la gestion de sieve via lmtp | ||
| Ligne 530: | Ligne 581: | ||
| } | } | ||
| </ | </ | ||
| + | |||
| + | Et indiquer que Sieve a le droit de marcher : | ||
| + | <code bash / | ||
| + | protocols = $protocols sieve | ||
| + | |||
| + | service managesieve-login { | ||
| + | inet_listener sieve { | ||
| + | port = 4190 | ||
| + | } | ||
| + | |||
| + | service_count = 1 | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Relancer Dovecot, puis vérifier que les ports sont bien ouverts : | ||
| + | |||
| + | < | ||
| + | lsof -i :4190 -P</ | ||
| + | |||
| + | Cela devrait donner ce genre de retour | ||
| + | < | ||
| + | COMMAND | ||
| + | dovecot 371602 root | ||
| + | dovecot 371602 root | ||
| + | </ | ||
| + | |||
| + | <WRAP center round todo 60%> | ||
| + | TODO : il va falloir ouvrir le port 4190 mais je garde ça sur la partie pare-feu. | ||
| + | </ | ||
| ==== Quotas ==== | ==== Quotas ==== | ||
| Ligne 716: | Ligne 796: | ||
| Postfixadmin étant un clicodrôme parfait, je vous laisse explorer. | Postfixadmin étant un clicodrôme parfait, je vous laisse explorer. | ||
| + | |||
| + | ===== Paramétrer les alias systèmes vers admin@ ===== | ||
| + | C'est bien beau tout ça, mais quand un mail interne au système (par exemple à root) est envoyé, il arrive où ? Nul part, et cette fois pas question de jouer avec [[pratique: | ||
| + | |||
| + | On commence par éditer ''/ | ||
| + | <code txt / | ||
| + | mailer-daemon: | ||
| + | postmaster: root | ||
| + | nobody: root | ||
| + | hostmaster: root | ||
| + | usenet: root | ||
| + | news: root | ||
| + | webmaster: root | ||
| + | www: root | ||
| + | ftp: root | ||
| + | abuse: root | ||
| + | noc: root | ||
| + | security: root | ||
| + | default: admin@example.org | ||
| + | root: admin@example.org | ||
| + | </ | ||
| + | |||
| + | Oui, sans le @ à la fin des alias, cette fois. Et vers admin@example.org ou autre, hein, tant que c'est un utilisateur présent sur le système. | ||
| + | |||
| + | Puis on régénère le fichier de postfix à propos des alias : | ||
| + | postalias / | ||
| + | |||
| + | Et on peut tester l' | ||
| + | echo " | ||
| + | |||
| + | Cela arrive bien dans la boite mail configurée ! | ||
| ===== Tester ===== | ===== Tester ===== | ||
| - | À ce stade, on va pouvoir voir à quel point ça marche (ou pas). | + | On va pouvoir voir à quel point ça marche (ou pas). |
| + | |||
| + | <WRAP center round tip 60%> | ||
| + | Les infos ici peuvent être utilisées à divers stade du tutoriel pour voir ce qui marche. | ||
| + | </ | ||
| Ajoutez un domaine sur l' | Ajoutez un domaine sur l' | ||
| Ligne 740: | Ligne 855: | ||
| * Vérifier que ''/ | * Vérifier que ''/ | ||
| - | À ce stade, tout s'est passé en interne, et c'est déjà pas si mal. | + | Jusque là, tout s'est passé en interne, et c'est déjà pas si mal. |
| Pour tester les limites de quota, créez un utilisateur avec un quota très bas (par exemple 1 Mo), puis créer un fichier à joindre " | Pour tester les limites de quota, créez un utilisateur avec un quota très bas (par exemple 1 Mo), puis créer un fichier à joindre " | ||
| Ligne 753: | Ligne 868: | ||
| mutt -f imaps:// | mutt -f imaps:// | ||
| - | Prochain test : envoyer un mail à l'extérieur. | + | <WRAP center round tip 100%> |
| + | Envie de tester encore et encore, en changeant le sujet seulement pour voir ce qui passe ou pas ? J'ai un petit script bash pour ça : | ||
| + | <code bash mailtest.sh> | ||
| + | # | ||
| + | |||
| + | # Vérifie si le sujet a été fourni en argument | ||
| + | if [ -z " | ||
| + | echo " | ||
| + | exit 1 | ||
| + | fi | ||
| + | |||
| + | # Assigne le sujet à une variable | ||
| + | subject=" | ||
| + | # Définis le corps du message | ||
| + | body=" | ||
| + | # Chemin vers le fichier à joindre (quand on teste les quotas) | ||
| + | # | ||
| + | |||
| + | # Adresse e-mail du destinataire | ||
| + | recipient=" | ||
| + | |||
| + | # Envoie l' | ||
| + | # echo " | ||
| + | # OU sans la pièce jointe | ||
| + | echo " | ||
| + | echo " | ||
| + | |||
| + | </ | ||
| + | |||
| + | Il suffit ensuite de lancer le script en lui filant un sujet entre guillemets : | ||
| + | < | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | ==== Todo ==== | ||
| + | < | ||
| + | |||
| + | Il va falloir configurer dkim et tout l' | ||
| + | |||
| + | Tester aussi si je peux envoyer un message avec un de mes alias ET si je suis bloquée si je tente d' | ||
| + | |||
| + | Problème pour envoyer un message à " | ||
| + | |||
| + | |||
| + | Dans les trucs à intégrer : | ||
| + | * ARC (Authenticated Received Chain) : transferts de mail. Voir OpenARC ? (les mêmes que opendkim et opendmarc, les trois logiciels se répondent bien). | ||
| + | * MTA-STS (Strict Transport Security) : force le chiffrement TLS. Mais ça va demander de bien creuser... Parce que ça risque de bloquer des copains ? Va avec TLS-RPT (TLS Reporting) qui fait des rapports sur les échecs de chiffrement | ||
| + | * DANE, DNSSEC : DANE utilise DNSSEC pour publier l' | ||
| + | |||
| + | Dans les trucs " | ||
| + | * BIMI : ajoute son logo à côté des emails, ça sert à rassurer la populace mais ça demande de passer par une certification tiers et ce n'est pas gratuit, pour un truc qui me semble quand même un peu gadget à côté du reste. En plus faut une marque déposée. Bref, un truc clinquant pour les riches, espérons que cela ne devienne pas une obligation... | ||
| + | |||
| + | ARC, MTA-STS, TLS-RPT, BIMI, DANE et SMTP TLS SRV | ||
| ===== vieux tuto ===== | ===== vieux tuto ===== | ||
| Ligne 778: | Ligne 946: | ||
| - | ==== Quota ==== | ||
| - | Je personnalise en français le message aux utilisateurs : | ||
| - | |||
| - | <code bash / | ||
| - | #!/bin/sh | ||
| - | PERCENT=$1 | ||
| - | USER=$2 | ||
| - | cat << EOF | / | ||
| - | From: postmaster@webmail.example.org | ||
| - | Subject: Quota warning - $PERCENT% reached | ||
| - | |||
| - | FR : | ||
| - | Votre boîte aux lettres ne peut stocker qu'un nombre limité d' | ||
| - | Actuellement, | ||
| - | les nouveaux courriels ne pourront plus être stockés. Merci de votre compréhension. | ||
| - | |||
| - | EN : | ||
| - | Your mailbox can only store a limited amount of emails. | ||
| - | Currently it is $PERCENT% full. If you reach 100% then | ||
| - | new emails cannot be stored. Thanks for your understanding. | ||
| - | EOF</ | ||
| - | |||
| - | Et pour qu' | ||
| - | sudo nano / | ||
| - | |||
| - | Avoir la ligne suivante : | ||
| - | mail_plugins = $mail_plugins imap_quota imap_sieve | ||
| - | |||
| - | J'ai aussi affiné via Dovecot les valeurs par défaut. Modifier ''/ | ||
| - | |||
| - | < | ||
| - | plugin { | ||
| - | quota = maildir: | ||
| - | # Mettre 5G de quota par défaut | ||
| - | quota_rule = *: | ||
| - | # Ajouter 100M pour ce qui est dans la corbeille, ça permet de faire du tri sans " | ||
| - | quota_rule2 = Trash: | ||
| - | quota_status_success = DUNNO | ||
| - | quota_status_nouser = DUNNO | ||
| - | quota_status_overquota = "452 4.2.2 Mailbox is full and cannot receive any more emails" | ||
| - | } | ||
| - | |||
| - | service quota-status { | ||
| - | executable = / | ||
| - | unix_listener / | ||
| - | user = postfix | ||
| - | } | ||
| - | } | ||
| - | |||
| - | </ | ||
| - | ===== Paramétrer les alias systèmes vers admin@ ===== | ||
| - | C'est bien beau tout ça, mais quand un mail interne au système (par exemple à root) est envoyé, il arrive où ? Nul part, et cette fois pas question de jouer avec [[pratique: | ||
| - | |||
| - | On commence par éditer ''/ | ||
| - | <code txt / | ||
| - | mailer-daemon: | ||
| - | postmaster: root | ||
| - | nobody: root | ||
| - | hostmaster: root | ||
| - | usenet: root | ||
| - | news: root | ||
| - | webmaster: root | ||
| - | www: root | ||
| - | ftp: root | ||
| - | abuse: root | ||
| - | noc: root | ||
| - | security: root | ||
| - | default: admin@example.org | ||
| - | root: admin@example.org | ||
| - | </ | ||
| - | |||
| - | Oui, sans le @ à la fin des alias, cette fois. Et vers admin@example.org ou autre, hein, tant que c'est un utilisateur présent sur le système. | ||
| - | |||
| - | Puis on régénère le fichier de postfix à propos des alias : | ||
| - | postalias / | ||
| - | |||
| - | Et on peut tester l' | ||
| - | echo " | ||
| - | |||
| - | Cela arrive bien dans la boite mail configurée ! | ||
| Ligne 1270: | Ligne 1358: | ||
| Un petit '' | Un petit '' | ||
| - | ===== ISPMail pour gérer domaines et users ===== | ||
| - | C'est quand même plus pratique que de bidouiller la base de donnée, bien que la solution mérite d' | ||
| - | |||
| - | En profiter (si ce n'est déjà fait) pour sécuriser Apache d' | ||
| - | |||
| - | En principe on a déjà un admin pour la base de donnée Mailuser si on a suivi le tuto plus haut. | ||
| - | |||
| - | Télécharger [[https:// | ||
| - | |||
| - | Dans '' | ||
| - | - Modifier '' | ||
| - | - Décommenter '' | ||
| - | - Modifier '' | ||
| - | |||
| - | Dans la config apache de ''/ | ||
| - | < | ||
| - | < | ||
| - | Options FollowSymLinks MultiViews | ||
| - | AllowOverride All | ||
| - | Order allow,deny | ||
| - | allow from all | ||
| - | </ | ||
| - | < | ||
| - | Require all denied | ||
| - | </ | ||
| - | |||
| - | </ | ||
| - | |||
| - | Se rendre sur index.php (chemin vers isp) et admirer une interface plus commode pour ajouter users, domaines, etc. | ||
| - | |||
| - | Une fois ISPMail installé, adminer ne sert à rien et présente une faille potentielle, | ||
| - | sudo apt remove adminer | ||
| ===== Rspamd (à faire) ===== | ===== Rspamd (à faire) ===== | ||
| Ligne 1337: | Ligne 1393: | ||
| https:// | https:// | ||
| - | ===== Filtres SIEVE ===== | ||
| - | Cela va permettre 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. | ||
| - | |||
| - | En principe ce qu'on a déjà fait suffit en bonne partie, mais il vient le moment de le tester, et surtout de permettre de gérer ces filtres via un client mail (et ce sera plutôt via notre webmail snappymail que via thunderbird dont l' | ||
| - | |||
| - | Il faut modifier ''/ | ||
| - | < | ||
| - | protocols = $protocols sieve | ||
| - | |||
| - | service managesieve-login { | ||
| - | inet_listener sieve { | ||
| - | port = 4190 | ||
| - | } | ||
| - | |||
| - | service_count = 1 | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | Décommenter aussi cette ligne dans ''/ | ||
| - | < | ||
| - | </ | ||
| - | |||
| - | Relancer Dovecot, puis vérifier que les ports sont bien ouverts : | ||
| - | service dovecot restart | ||
| - | lsof -i :4190 -P | ||
| - | |||
| - | Cela devrait donner ce genre de retour | ||
| - | < | ||
| - | COMMAND | ||
| - | dovecot 371602 root | ||
| - | dovecot 371602 root | ||
| - | </ | ||
| - | Il faut qu' | ||
| - | |||
| - | iptables -A INPUT -p tcp --dport 4190 -j ACCEPT | ||
| - | netfilter-persistent save | ||
| - | |||
| - | Il faut aussi permettre à ce port d' | ||
| - | Et voilà, plus qu'à configurer le port et la possibilité d' | ||
| ===== Encore à faire ===== | ===== Encore à faire ===== | ||
| * Paramétrage de rspamd, juste pour gérer les spams. | * Paramétrage de rspamd, juste pour gérer les spams. | ||