====== Serveur de courriels ====== Présentation d'installation d'un serveur de courriels sur //debian// 11.\\ Dans la suite de cette présentation, nous allons voir comment configurer le serveur //mail.sleto.fr// (ayant l'IP 99.88.77.66) comme serveur SMTP, IMAP et outil de gestion de courriels (le DNS identifie déjà correctement ce serveur). ===== Packages ===== Installation repose sur l'utilisation de [[https://modoboa.org/fr/|Modoboa]]. Pour cela installer avant les packets suivant apt-get install -y git vim ===== Installation ===== L'installation de Modobao est très bien expliqué dans la [[https://modoboa.readthedocs.io/en/latest/installation.html|documentation modoboa]] et dans le [[https://github.com/modoboa/modoboa-installer|README de github]] ==== Prérequis ==== la documentation demande la configuration minimum: 2 CPU / 2Go RAM / 10Go Disk\\ J'ai commencé avec cette configuration et j'ai eu des soucis de RAM. Je recommande donc d'avoir une machine un peu plus puissante (4 CPU / 4Go RAM) Il recommande également d'installer les packages python supplémentaires: sudo apt-get install python-virtualenv python-pip ==== Téléchargement ==== Récupérer l'outil d'installation via git: git clone https://github.com/modoboa/modoboa-installer cd modoboa-installer ==== Configuration ==== Lancer l'outil ainsi: ./run.py --stop-after-configfile-check slerto.fr Éditer alors le fichier de configuration //installer.cfg// pour affiner l'installation.\\ Au minimum, je recommande de modifier les premiers champs liés au certificat SSL en utilisant //letsencrypt//:\\ ... [certificate] generate = true type = letsencrypt [letsencrypt] email = contact@sleto.fr ... ==== RUN ==== Lancer alors simplement la commande: sudo ./run.py sleto.fr Et l'ensemble des outils nécessaires a un serveur de courriels vont s'installer et se configurer pour fonctionner ensemble: c'est magique ! Et alors, il n'y a plus qu'à se connecter sur la nouvelle interface de gestion [[https://mail.sleto.fr]] via les paramètres de connexion initial: admin / password (à changer à la première connexion). ==== Réglages finaux ==== Depuis l'interface de gestion, entant qu'administrateur, il est possible de changer des règlages dans le menu "Modoboa > Paramètres".\\ Noter qu'il existe une nouvelle interface d'administration, plus modèrne, en allant à [[https://mail.sleto.fr/new-admin]]. Globalement, les paramètres par défaut sont très satisfaisant un usage classique.\\ Notons néanmoins: * Possibilité de se connecter à un LDAP pour gérer la connexion. * Modifier les différentes adresses de notification. * Dans "Identifiants en PDF", pour qu'un nouveau compte ait un document PDF de connexion, compléter là les données à transmettre. ===== Gestion d'un domain courriel ===== ==== Configuration d'un domain ==== Dans le menu //domaines//, cliquer simplement sur le bouton "+Ajouter" pour définir le nouveau domaine.\\ Je recommande de cocher "Activer la signature DKIM" afin de faire signer en DKIM vos courriels.\\ On peut également créer un compte administrateur par défaut associé à ce nouveau domaine. Au bout de quelques minutes, Modoboa va analyser les DNS associés à ce domaine.\\ Dans la fiche du domaine, on a alors la possibilité d'éditer les modifications DNS à appliquer pour finaliser sa configuration. gloabalement, il faut ajouter quelque chose de ce genre à son DNS: @ IN MX 10 mail.sleto.fr. @ IN TXT "v=spf1 mx ip4:99.88.77.66 ~all" modoboa._domainkey.sleto.fr. IN TXT ( "v=DKIM1;k=rsa;p=blablablablablablablablablablablablablablablablablablablab" "blablablablablablablablablablablablablablablablablablablablablablablablabl" "blablablablablablablablablablablablablablablablablablablablablablablablabl" "blablablablablablablablablablablablablablablablablablablablablablablablabl" "blablablablablablablablablablablablablablablablablablablablablablablablabl" "blablablablablablablablablablablablablablablablablablablablablablablablabl" "blablablablablablablablablablablablablablablablablablablablablablablablabl" "blablablablablablablablablablablablablablablablablablablablablablablablabl" "blablablablablablablablablablablablablablablablablablablablablablablablabl" "blablablablablablablablablablablablablablablablablablablablablablablablabl" "blablablabla") _dmarc.sleto.fr. IN TXT "v=DMARC1; p=quarantine; pct=100;" autoconfig.sleto.fr. IN CNAME mail.sleto.fr. autodiscover.sleto.fr. IN CNAME mail.sleto.fr. Noter que j'ai précisé dans le SPF l'IP du serveur de courriel. Cela permet à des serveurs recevant les messages de vérifier que l'émetteur et bien celui autorisé. ==== Création de compte === La création d'un compte est très simple. Il faut juste choisir entre 4 types de comptes: * Utilisateur simple * Administrateur du domaine * Revendeur * Super administrateur Un résumé des informations de connexion en PDF est téléchageable alors. ==== Création d'alias === Il est déjà possible de créer un alias directement depuis la création d'un compte.\\ Il est également possible d'en créer un après coup en précisant alors l'adresse de redirection. __Attention:__ il n'est possible d'envoyer un courriel entant qu'expéditeur en alias qu'en se connectant en SMTP avec le compte courriel associé. ==== Migration de compte === Si votre domaine était géré par un autre serveur de courriel, il est possible d'importer les anciens messages via un migration IMAP. Pour cela, l'outil //imapsync// est top pour cela.\\ Deux solutions pour l'utiliser: * Soit en récupérant l'outil Perl sur [[https://github.com/imapsync/imapsync]] et l'executer en ligne de commande * Soit utiliser le petit service web proposé librement par le développeur: [[https://imapsync.lamiral.info/X/]] Il suffit dans les deux cas d'indiquer les serveurs IMAP ainsi que l'utilisateur et mot de passe des comptes à syncroniser. ===== Et pour finir ===== ==== Firewall ==== Configurer un firewall afin de n'autorisé que les ports 80, 25, 143, 443, 587 et 993 (et ssh si besoin, bien sûr).\\ Attention de bien laisser les ports ouverts en interne. ==== Sauvegarde ==== Pour effectuer la sauvegarde, autant se baser sur l'outil d'installation de modoboa.\\ En effet, la commande "run" précédement utilisé propose un mécanisme de backup et de restauration. Créer donc un script ///opt/modoboa-installer/backup_email// ainsi où: * ///opt/modoboa-installer// est le répertoire d'extraction de l'outil * ///opt/email_backup// est un répertoire de sauvegarde #!/bin/bash /opt/modoboa-installer/run.py --backup --silent-backup --backup-path /opt/email_backup/ sleto.fr zip -r /tmp/email_backup.zip /opt/email_backup/ scp /tmp/email_backup.zip user@backup.sleto.net:/opt/backup_dir Ajouter un crontab en root de type: 10 * * * * /opt/modoboa-installer/backup_email 2>&1 > /opt/modoboa-installer/backup_email.log Ainsi, la sauvegarde des courriels et de toutes la configuration sera faite toutes les heures. ==== Compte "envoi tout" ==== Pour des besoins d'hébergement, il peut-être interessant que n'importe quelle adresse d'expédition puisse envoyer un message depuis ce serveur SMTP.\\ Octroyons ce privilège qu'au compte //postmaster@sleto.fr//. Modifier pour cela le fichier ///etc/postfix/sql-sender-login-map.cf// en y ajoutant un clause "union" # This file was generated on July 22, 2023, 1:41 p.m. by running: # manage.py generate_postfix_maps --destdir /etc/postfix --force-overwrite # DO NOT EDIT! user = modoboa password = dbname = modoboa hosts = 127.0.0.1:5432 query = (SELECT email FROM core_user WHERE email='%s' AND is_active) UNION (SELECT mb.address || '@' || dom.name FROM admin_mailbox mb INNER JOIN admin_senderaddress sad ON sad.mailbox_id=mb.id INNER JOIN admin_domain dom ON dom.id=mb.domain_id WHERE sad.address='%s') UNION (SELECT mb.address || '@' || dom.name FROM admin_mailbox mb INNER JOIN modoboa_admin_aliasrecipient alr ON alr.r_mailbox_id=mb.id INNER JOIN admin_domain dom ON dom.id=mb.domain_id INNER JOIN admin_alias al ON alr.alias_id=al.id LEFT JOIN admin_domainalias adoma ON adoma.target_id=al.domain_id LEFT JOIN admin_domain adom ON adom.id=adoma.target_id WHERE al.enabled AND ( al.address='%s' OR ( adoma.name='%d' AND al.address='%u'||'@'||adom.name))) UNION (SELECT mb.address || '@' || dom.name FROM admin_mailbox mb INNER JOIN admin_senderaddress sad ON sad.mailbox_id=mb.id INNER JOIN admin_domain dom ON dom.id=mb.domain_id WHERE sad.address='@'||'%d') UNION (SELECT email FROM core_user WHERE email='postmaster@sleto.fr' AND is_active) relancer le serveur //postfix// sudo service postfix restart et voilà ! Maintenant, en se connectant en SMTP à //postmaster@sleto.fr//, il est possible d'envoyer un message en utilisant l'adresse de son choix comme expéditeur (sans avoir une erreur "Sender address rejected: not owned by user").\\ De même, si l'adresse d'expédition est un alias du serveur //modoboa//, celui-ci sera correctement signé DKIM/SPF/DMARC. ==== VadeSecure ==== Vade Secure est une entreprise française spécialisée dans la conception et l'édition de solutions logicielles de sécurité des emails, détections d'emails abusifs ou malveillants.\\ Comme elle est utilisé par les beaucoup de gros fournisseurs de mails pour gérer leur politique Antispam, il est interessant de s'enregistré chez eux afin de vérifier que nos domaines sont bien en "white list". Avant de se référencer, il est important de vérifier que le "reverse DNS" (rDNS) est correctement configuré. C'est à dire que l'IP du serveur retourne bien (en inverse) le nom du domaine //sleto.fr//. Créer un compte sur [[https://sendertool.vadesecure.com/fr/]] Une fois connecté, l'outil demande de référencer une adresse IP qui envoi en extérieur des courriels. Saissir donc l'IP de //mail.sleto.fr// \\ L'outil utilise le rDNS pour demander confirmation d'une l'adresse courriel de validation sur le domaine associé à l'IP: postmaster@sleto.fr Il faut donc bien sûr valider le lien dans le courriel pour valider son IP. On a alors la possibilité de signaler des faux positifs dans leur interface, si des messages sont rejetés depuis ce serveur. ==== SMTP Relay ==== Un grand nombre d'outil hébergé, on besoin d'un serveur SMTP pour envoyer des courriels.\\ Il est plus simple de ne pas à avoir à spécifier une authentification (serveur en 127.0.0.1:25) voir d'utiliser des outils directe comme //sendmail//. Pour cela, sur les autres serveurs d'hérgement (dans mon exemple //ns3.sleto.net//), il est bien d'installer un SMTP Relay.\\ Installer le paquet exim4 après avoir éventuellement desinstaller postfix: sudo apt-get remove postfix sudo apt-get install exim4 Lancer la configuration sudo dpkg-reconfigure exim4-config Dans l'interface, choisir les choix suivant: * General type of mail configuration: **mail send by smarthost; no local mail** * System mail name: **ns3.sleto.net** * IP-addresses to listen on for incoming SMTP connections: **127.0.0.1** (on peux aussi rajouté l'IP local de la machine.) * Other destinations for which mail is accepted: **ns3.sleto.fr;localhost** * Visible domain name for local users: **sleto.net** * IP address or host name of the outgoing smarthost: **mail.sleto.fr::587** (là, on met le serveur SMTP sécurisé) * Keep number of DNS-queries minimal (Dial-on-Demand)? **No** * Split configuration into small files? **No** Pour finaliser la configuration SMTP, modifier le fichier ///etc/exim4/passwd.client//: *:postmaster@sleto.fr: Là, j'utilise mon compte courriel "envoi tout" pour ne pas me filtrer les adresses d'expédition. A cela, il faut créer une signature SSL: sudo bash /usr/share/doc/exim4-base/examples/exim-gencert Et indiquer dans le fichier ///etc/exim4/exim4.conf.localmacros// AUTH_CLIENT_ALLOW_NOTLS_PASSWORDS = 1 MAIN_TLS_ENABLE = 1 Mettre à jour la configuration via sudo update-exim4.conf sudo service exim4 restart Enfin, il faut éditer 2 fichiers pour assigner des adresses d'expédition et destinataire à nos utilisateurs Linux en cas d'envoie: Pour l'expédition ///etc/email-addresses// (pas grave si le compte courriel n'existe pas là) user: user@ns3.sleto.net Pour la destination ///etc/aliases// user: contact@sleto.net Faire alors un essai d'envoi: echo "Blablabla" | mail -s 'test' contact@sleto.net Bien sûr, ne pas oublier de vérifier que le firewall n'ouvre pas les ports 25, 587 et 993