# Installation Serveur Mail ## Installation de Postfix ```console root@serveur:~# apt-get install postfix-mysql ``` ### Verification du contenu de master.cf ```console root@serveur:~# vim /etc/postfix/master.cf ``` Dans le fichier (master.cf) il faut verifier que la premiere ligne ne contienne que un seul "n". La ligne doit ressembler a ceci: ```console smtp inet n - - - - smtpd ``` ### Creation de la base de donnees MySQL * On cree une base de donnees **postfix**, on ajoute un utilisateur postfix en passant par les privileges. Bien noter le mot de passe generer. * On cree les trois tables avec le code suivant: ~~~~sql USE postfix; CREATE TABLE `domaines` ( `domaine` varchar(255) NOT NULL default '', `etat` tinyint(1) NOT NULL default '1', PRIMARY KEY (`domaine`) ) ENGINE=MyISAM; CREATE TABLE `comptes` ( `email` varchar(255) NOT NULL default '', `password` varchar(255) NOT NULL default '', `quota` int(10) NOT NULL default '0', `etat` tinyint(1) NOT NULL default '1', `imap` tinyint(1) NOT NULL default '1', `pop3` tinyint(1) NOT NULL default '1', PRIMARY KEY (`email`) ) ENGINE=MyISAM; CREATE TABLE `alias` ( `source` varchar(255) NOT NULL default '', `destination` text NOT NULL, `etat` tinyint(1) NOT NULL default '1', PRIMARY KEY (`source`) ) ENGINE=MyISAM; ~~~~ ### Edition des 5 fichiers de configuration suivants: * Contenu de `mysql-virtual_domaines.cf` ```text hosts = 127.0.0.1 user = postfix password = **Mot de passe Mysql Postfix** dbname = postfix select_field = 'virtual' table = domaines where_field = domaine additional_conditions = AND etat=1 ``` * Contenu de `mysql-virtual_comptes.cf` ```text hosts = 127.0.0.1 user = postfix password = **Mot de passe Mysql Postfix** dbname = postfix table = comptes select_field = CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') where_field = email additional_conditions = AND etat=1 ``` * Contenu de `mysql-virtual_aliases.cf` ```text hosts = 127.0.0.1 user = postfix password = **Mot de passe Mysql Postfix** dbname = postfix table = alias select_field = destination where_field = source additional_conditions = AND etat=1 ``` * Contenu de `mysql-virtual_aliases_comptes.cf` ```text hosts = 127.0.0.1 user = postfix password = **Mot de passe Mysql Postfix** dbname = postfix table = comptes select_field = email where_field = email additional_conditions = AND etat=1 ``` * Contenu de `mysql-virtual_quotas.cf` ```text hosts = 127.0.0.1 user = postfix password = **Mot de passe Mysql Postfix** dbname = postfix table = comptes select_field = quota where_field = email ``` ### Ajout du groupe et de l'utilisateur `vmail` ```console root@serveur:~# groupadd -g 5000 vmail root@serveur:~# useradd -g vmail -u 5000 vmail -d /var/spool/vmail -m ``` ### Configuration du `main.cf` Editer le `main.cf` ```console root@serveur:~# vim /etc/postfix/main.cf ``` ~~~~ini # Bannière afficher lorsqu'on se connecte en SMTP sur le port 25 smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU) # Service qui envoie des notifications "nouveau message" biff = no # Desactive la commande SMTP VRFY. Arrête certaine technique pour avoir des adresses email disable_vrfy_command = yes # Impose au client SMTP de démarrer la session SMTP par une commande Helo (ou ehlo) smtpd_helo_required = yes # Avec le courier local ça ajoute .NDD aux adresses incomplètes (seulement le nom d'hote) append_dot_mydomain = no # Le nom de la machine du système de messagerie # Par défaut c'est host.domain.tld mais on peut mettre un reverse dns myhostname = DOMAINNAME (Not reverse DNS) # Le domaine utilisé par defaut pour poster les message local myorigin = REVERSE_DNS # Liste des domaines pour lequel le serveur doit accepter le courrier mydestination = REVERSE_DNS, localhost.localdomain, localhost # Pour effectuer des livraisons de courrier avec un relay (ici non) relayhost = # Liste des réseaux locaux autorisés mynetworks = 127.0.0.0/8, IP_PUBLIQUE_SERVEUR # Taille des boîtes au lettre (0 = illimité) mailbox_size_limit = 0 # Séparateur entre le nom d'utilisateur et les extensions d'adresses recipient_delimiter = + # Interfaces réseaux à écouter (ici toutes) inet_interfaces = all # Gestion des boites mails virtuelle # Contient les fichiers qui permettent de relier postfix mysql virtual_alias_maps = mysql:/etc/postfix/mysql-virtual_aliases.cf,mysql:/etc/postfix/mysql-virtual_aliases_comptes.cf virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual_domaines.cf virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual_comptes.cf # Le dossier ou seront contenu les mails (=home de l'user vmail) virtual_mailbox_base = /var/spool/vmail/ # L'id du groupe et de l'utilisateur vmail créé précédement virtual_uid_maps = static:5000 virtual_gid_maps = static:5000 # Créer un dossier par comte email virtual_create_maildirsize = yes # A activer si vous souhaitez ajouter des quotas virtual_mailbox_extended = yes # Impose les limites au niveau des mails, dans notre cas aucune virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql-virtual_quotas.cf # Ajouter une limite sur la taille des messages pour les boites virtuelles virtual_mailbox_limit_override = yes virtual_maildir_limit_message = "La boite mail de votre destinataire est pleine, merci de reessayez plus tard." virtual_overquota_bounce = yes # adresses d'expedition smtpd_sender_restrictions = permit_mynetworks, warn_if_reject reject_unverified_sender # adresses de destination smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination, reject_non_fqdn_recipient # client smtpd_client_restrictions = permit_mynetworks ~~~~ ### Modification des droits sur les fichiers de configuration ```console root@serveur:~# chmod 640 /etc/postfix/mysql-virtual_*.cf root@serveur:~# chgrp postfix /etc/postfix/mysql-virtual_*.cf ``` ### Restart postfix ```console root@serveur:~# /etc/init.d/postfix restart ``` ## Ajout d'un compte ### Insertion d'un nouveau domaine dans la base de donnees Selectionner la table `domaines`et inserer un nouveau domaine Ex: "domaine.tld" et mettre l'etat a "1". ### Insertion d'un nouvel utilisateur Une fois la base de donnees `postfix`selectionnee (normalement c'est deja le cas), il faut executer le code SQL suivant: ~~~~sql INSERT INTO `comptes`(`email`, `password`, `quota`, `etat`, `imap`, `pop3`) VALUES ('test@domaine.tld', ENCRYPT('motdepasse'), '0', '1', '1', '1'); ~~~~ ### Test par Telnet (Creation des repertoires mail par la meme occasion) Executer la commande suivante: ```console root@serveur:~# telnet 127.0.0.1 25 ``` Puis dans Telnet executer les commandes suivantes: ```text ehlo domaine.tld mail from: rcpt to: (l'email doit figurer dans la table comptes) data (Puis ecrire le body du mail, ensuite faire Enter et terminer par ".") quit (Pour sortir de Telnet) ``` ## Courier ### Installation de `Courier` ```console root@serveur:~# apt-get install courier-base courier-authdaemon courier-authlib-mysql courier-imap courier-pop ``` ### Configuration de `Courier` Editer `/etc/courier/authdaemonrc` ```console root@serveur:~# vim /etc/courier/authdaemonrc ``` Modifier la ligne: `authmodulelist = authpam` -> `authmodulelist = authmysql` Editer `/etc/courier/authmysqlrc` ```console root@serveur:~# vim /etc/courier/authmysqlrc ``` **Modifier:** ```text `MYSQL_USERNAME` `MYSQL_PASSWORD` `MYSQL_DATABASE` -> postfix `MYSQL_USER_TABLE` -> comptes `MYSQL_CRYPT_PWFIELD` -> password `MYSQL_UID_FIELD` -> 5000 `MYSQL_GID_FIELD` -> 5000 `MYSQL_LOGIN_FIELD` -> email `MYSQL_HOME_FIELD` -> "/var/spool/vmail" ``` **Commenter:** `MYSQL_NAME_FIELD` **Ajouter:** `MYSQL_MAILDIR_FIELD` -> CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') ### Redemarrage des services ```console root@serveur:~# /etc/init.d/courier-authdaemon restart root@serveur:~# /etc/init.d/courier-pop restart root@serveur:~# /etc/init.d/courier-imap restart ``` ## RoundCube ### Telecharger la derniere version de Roundcube Se rendre [ici](https://roundcube.net/) pour telecharger roundcube. Creer un VirtualHost sur le serveur Web et l'associer a Roundcube. ### Base de donnees Roundcube Creer une base de donnees `roundcube` ajouter un utilisateur (roundcube par exemple) et generer un mot de passe (a conserver pour la suite de l'installation.) Creer les tables necessaires au bon fonctionnement de Roundcube avec la commande suivante: ```console root@serveur:~# mysql -u root -p roundcube < /var/www/domaine.tld/roundcube/SQL/mysql.initial.sql ``` ### Configuration de Roundcube Se rendre a l'adresse ou Roundcube est accessible, (par exemple [https://mail.domaine.tld/](https://mail.domaine.tld/)) et rajouter `installer` a la fin de l'url. Ce qui donnerait par exemple: [https://mail.domaine.tld/installer](https://mail.domaine.tld/installer) Verifier les options de configuration: * Mysql Database Roundcube db_addr * Mysql Database Roundcube db_name * Mysql Database Roundcube db_user * Mysql Database Roundcube db_pass Certaines extentions peuvent manquer, verifier et les installer. (D'autres sont facultatives.) **NE PAS OUBLIER DE RETIRER LE DOSSIER `installer/` DU REPERTOIRE WEB DE ROUNDCUBE** ## Configuration SPF Inserer cet enregistrement dans le fichier de configuration DNS de `domaine.tld`: ```dns @ IN TXT "v=spf1 a mx -all" ``` * Le `a` signifie que les serveurs qui possedent un enregistrement `A` sont des serveurs SMTP autorises. * Le `mx` signifie que les serveurs qui possedent un enregistrement `MX` sont des serveurs SMTP autorises. (Il me semble que c'est tout pour le SPF... :/) ## Retirer le header avec l'IP du client Il peut etre bien de retirer l'IP du client qui s'est connecté au serveur SMTP (autrement dit, le lieu depuis lequel on a envoyé notre email) Pour ce faire, il faut ajouter cette ligne: ``` -o header_checks=pcre:/etc/postfix/header_checks ``` juste apres : ``` cleanup unix n - n - 0 cleanup ``` Ensuite il faut pas oublier d'installer `postfix-pcre` ``` sudo apt install postfix-pcre ``` Puis restart postfix ``` systemctl restart postfix ``` ## Gestion des utilisateurs via les utilisateurs unix Si l'on a choisi d'utiliser les utilisateurs comme facon de gerer les comptes emails, ces derniers ne portent pas comme nom `user@domain.tld` mais plutot `user` ou `user-AT-domain-DOT-tld`. Pour faire la correspondance entre le user utilisé lors de la connexion et le sender qui va envoyer les emails, il faut definir une correspondance entre les deux. Les emails peuvent etre envoyés sans faire la correspondance par defaut. Mais si on applique la regle ``` -o smtpd_sender_restrictions=reject_sender_login_mismatch ``` dans le fichier `master.cf` alors il faudra faire la correspondance sinon l'utilisateur ne sera pas autorisé à envoyer des mail avec un sender qui vaut `user@domain.tld` alors que son username est simplement `user`.