Mail_Server_Install/MailServerInstall.md
2019-11-11 17:59:44 +01:00

8.5 KiB

Installation Serveur Mail

Installation de Postfix

root@serveur:~# apt-get install postfix-mysql 

Verification du contenu de master.cf

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:

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:
        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

        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

        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

        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

        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

        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

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

root@serveur:~# vim /etc/postfix/main.cf 
# 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

root@serveur:~# chmod 640 /etc/postfix/mysql-virtual_*.cf
root@serveur:~# chgrp postfix /etc/postfix/mysql-virtual_*.cf

Restart postfix

root@serveur:~# /etc/init.d/postfix restart 

Insertion d'un nouveau domaine dans labase de donnees

Selectionner la table domaineset inserer un nouveau domaine Ex: "romanet.fr" et mettre l'etat a "1".

Insertion d'un nouvel utilisateur

Une fois la base de donnees postfixselectionnee (normalement c'est deja le cas), il faut executer le code SQL suivant:

    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:

root@serveur:~# telnet 127.0.0.1 25

Puis dans Telnet executer les commandes suivantes:

ehlo romanet.fr
mail from:<peuimporte@domaine.tld>
rcpt to:<test@romanet.fr> (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

root@serveur:~# apt-get install courier-base courier-authdaemon courier-authlib-mysql courier-imap courier-pop

Configuration de 'Courier'

Editer /etc/courier/authdaemonrc

root@serveur:~# vim /etc/courier/authdaemonrc

Modifier la ligne: authmodulelist = authpam -> authmodulelist = authmysql

Editer /etc/courier/authmysqlrc

root@serveur:~# vim /etc/courier/authmysqlrc

Modifier 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

root@serveur:~# /etc/init.d/courier-authdaemon restart
root@serveur:~# /etc/init.d/courier-pop restart
root@serveur:~# /etc/init.d/courier-imap restart