# 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 ``` ### Insertion d'un nouveau domaine dans labase de donnees Selectionner la table `domaines`et inserer un nouveau domaine Ex: "romanet.fr" 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@romanet.fr', 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 romanet.fr 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) ``` ### 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 ``` ### Telecharger la derniere version de Roundcube Se rendre [ici](https://roundcube.net/)