Le système de messagerie se base sur un certain nombre de composants :
Ci-dessous le diagramme des flux internes et externes du système de messagerie entre les différents composants :
Dans la section d'installation nous allons mettre en place cette solution
L'installation sera effectué dans l'ordre suivant :
L'ensemble de la procédure est réalisée dans la console en tant que root (accès par SSH), l'utilisation du navigateur dans certains cas vous sera précisé.
Le dépôt debian pour apt doit être configuré de façon à pouvoir récupérer des paquetages soit sur le CD soit sur Internet.
Si vous rencontrez des problèmes pendant l'installation vous pouvez consulter les logs dans :
/var/log/mail.err /var/log/mail.info /var/log/mail.log /var/log/mail.warn
Installer MySQL par la commande suivante :
apt-get install mysql-client mysql-server
Répondre aux questions relative à l'installation de MySQL
Se connecter au serveur pour créer la base postfix :
mysql -u root -p
Ici allons :
CREATE DATABASE postfix; CREATE USER 'postfix'@'localhost' IDENTIFIED BY 'definir_un_mdp'; GRANT ALL PRIVILEGES ON `postfix` . * TO 'postfix'@'localhost'; quit
Installer Apache et PHP par la commande suivante :
apt-get install apache2 php5 php5-mysql php5-imap
Redémarrer apache :
/etc/init.d/apache2 restart
Télécharger postfixadmin chez l'éditeur :
cd /tmp wget http://sourceforge.net/projects/postfixadmin/files/postfixadmin/postfixadmin-2.2.1.1.tar.gz/download
Décompacter l'archive :
tar xzf /tmp/postfixadmin-2.2.1.1.tar.gz
Déplacer et renommer le répertoire décompecté dans le répertoire d'apache:
mv /tmp/postfixadmin-2.2.1.1 /var/www/postfixadmin
Lancer la commande vi /var/www/postfixadmin/config.inc.php
pour éditer la configuration de postfixadmin et changer les paramètres suivants:
$CONF['configured'] = true; ... $CONF['database_type'] = 'mysqli'; $CONF['database_host'] = 'localhost'; $CONF['database_user'] = 'postfix'; $CONF['database_password'] = 'passwd4postfix'; $CONF['database_name'] = 'postfix'; $CONF['database_prefix'] = ''; ... $CONF['admin_email'] = 'postmaster@domain.com'; ... $CONF['default_aliases'] = array ( 'abuse' => 'abuse@host.domain.com', 'hostmaster' => 'hostmaster@mailhost.domain.com', 'postmaster' => 'postmaster@mailhost.domain.com', 'webmaster' => 'webmaster@mailhost.domain.com' ); $CONF['domain_path'] = 'YES'; ... $CONF['domain_in_mailbox'] = 'NO'; ... $CONF['emailcheck_resolve_domain']='NO';
Nous allons maintenant terminer la configuration depuis votre navigateur : http://mailhost.domain.com/postfixadmin/setup.php
Normalement lorsque la page est chargée, tout doit être “OK” il ne doit y avoir aucune erreur. Il vous est proposé de créer un compte administrateur, créez le librement.
Une fois le compte administrateur créer, retourner sur la console et supprimer le fichier setup.php
rm /var/www/postfixadmin/setup.php
Vous pouvez désormais créer des domaines de messagerie et des comptes mail sur http://mailhost.domain.com/postfixadmin/
Attention ces comptes ne seront pas fonctionnels tant que postfix et dovecot ne seront pas installés.
Pour créer un utilisateur, groupe et répertoire pour l'espace de stockage des mails lancer les commandes suivantes :
groupadd -g 5000 vmail useradd -g vmail -u 5000 vmail -d /home/vmail -m
Installer Postfix et son module Mysql :
apt-get install postfix postfix-mysql
A la question choisir :
pas de configuration
Pour configurer postfix créer et éditer le fichier /etc/postfix/main.cf de façon à obtenir le contenu suivant :
# Nom d'hote du serveur , veiller à ce que ce nom soit fqdn et qu'il soit existant dans le domaine (reverse dns) myhostname=mailhost.domain.com # Destinations locales gérés par postfix Attention à ne pas mettre un domaines que vous allez gérer virtuellement mydestination=mailhost.domain.com, localhost.domain.com, localhost # Permet de definir un relais pour vos mails sortant exemple : [smtp.nordnet.fr] vide par defaut relayhost=smtp.orange.fr # mynetworks permet de définir le/les réseaux qui sont autorisé à envoyer des mails mynetworks=127.0.0.0/8 192.168.40.0/24 # mydomain permet de définir le domaine internet du système de messagerie mydomain=domain.com # smtpd_recipient_restrictions permet d'ajouter des restrictions sur les mails entrant smtpd_recipient_restrictions= permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, reject_non_fqdn_recipient, # reject_unknown_sender_domain, # reject_non_fqdn_sender, # reject_unknown_recipient_domain, # reject_invalid_helo_hostname, # reject_unlisted_recipient, # reject_unlisted_sender, # reject_non_fqdn_helo_hostname, # reject_rbl_client list.dsbl.org, # reject_rhsbl_sender dsn.rfc-ignorant.org # message_size_limit correspond à la taille maximale d'un message en octets message_size_limit=10240000 # Fichier de requete SQL pour les alias et redirections mails virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf # Fichier de requete SQL pour les domaines pris en charges virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf # Fichier de requete SQL pour les comptes de messagerie virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf local_transport = virtual local_recipient_maps = $virtual_mailbox_maps # UID et GID à fixer pour le stockage de mail virtual_uid_maps = static:5000 virtual_gid_maps = static:5000 # Répertoire de base où sont stockés les mails virtual_mailbox_base = /home/vmail
Nous allons maintenant créer les 3 fichiers de requêtes SQL :
Lancer vi /etc/postfix/mysql-virtual-alias-maps.cf
et insérer le contenu suivant :
user = postfix password = mdp_defini_dans_mysql hosts = 127.0.0.1 dbname = postfix query= SELECT goto FROM alias WHERE address='%s'
Lancer vi /etc/postfix/mysql-virtual-mailbox-domains.cf
et insérer le contenu suivant :
user = postfix password = mdp_defini_dans_mysql hosts = 127.0.0.1 dbname = postfix query= SELECT domain FROM domain WHERE domain='%s'
Lancer vi /etc/postfix/mysql-virtual-mailbox-maps.cf
et insérer le contenu suivant :
user = postfix password = mdp_defini_dans_mysql hosts = 127.0.0.1 dbname = postfix query= SELECT maildir FROM mailbox WHERE username='%s' AND active='1'
Redémarrer Postfix par le commande :
/etc/init.d/postfix restart
Lancer la commande suivante pour installer dovecot :
apt-get install dovecot-common dovecot-imapd dovecot-pop3
Faire une sauvegarde du fichier de configuration de dovecot :
mv /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.bkp
Recréer le fichier de configuration en lançant la commande : vi /etc/dovecot/dovecot.conf
et insérer le contenu suivant :
protocols = imap pop3 imaps pop3s listen = [::] disable_plaintext_auth = no log_timestamp = "%Y-%m-%d %H:%M:%S " ssl_listen = [::] mail_location = maildir:/home/vmail/%d/%n mail_privileged_group = mail protocol imap { mail_plugins = quota imap_quota } protocol pop3 { pop3_uidl_format = %08Xu%08Xv mail_plugins = quota } protocol lda { mail_plugins = quota } auth default { mechanisms = plain passdb sql { args = /etc/dovecot/dovecot-sql.conf } userdb sql { args = /etc/dovecot/dovecot-sql.conf } user = root count = 2 } dict { } plugin { #exemple pour un stockage de 5Gb par compte et/ou 1000000000000 mails quota = maildir:storage=5242880:messages=1000000000000 }
Nous allons créer le fichier de requête SQL pour l'authentification par SQL, lancer la commande vi /etc/dovecot/dovecot-sql.conf
et insérer à la fin le contenu suivant :
# Type de base SQL driver = mysql # Information de connexion à la base MySQL connect = host=127.0.0.1 dbname=postfix user=postfix password=passwd_defini_dans_mysql # md5crypt -> MD5-CRYPT # md5 -> PLAIN-MD5 # cleartext -> PLAIN #Type de cryptage di mot de passe default_pass_scheme = MD5-CRYPT # Requete pour obtenir le mot de passe password_query = SELECT password FROM mailbox WHERE username = '%u' # Requete pour obtenir les informations d'un compte. user_query = SELECT maildir, 5000 AS uid, 5000 AS gid FROM mailbox WHERE username = '%u'
ClamAV est un antivirus libre s'intégrant à Postfix. Les mails entreront dans le serveur par SMTP, postfix redirigera le mail à ClamAV par le port 10025 et ClamAV reinjectera le mail dans Postfix par le port 10026.
Lancer la commande suivante pour installer les paquetages :
apt-get install clamsmtp clamav-freshclam
Nous allons dire à Postfix d'envoyer les messages entrants dans un filtre nommé scan par le port 10025. Pour cela éditer le fichier /etc/postfix/main.cf
et ajouter à la fin la ligne suivante :
content_filter = scan:[127.0.0.1]:10025
Nous allons créer la fonction scan et créer le service de ré-injection des messages vers postfix sur le port 10026. Pour cela éditer le fichier /etc/postfix/master.cf
et ajouter à la fin les lignes suivantes :
# AV scan filter (used by content_filter) scan unix - - n - 16 smtp -o smtp_send_xforward_command=yes -o smtp_enforce_tls=no # For injecting mail back into postfix from the filter 127.0.0.1:10026 inet n - n - 16 smtpd -o content_filter= -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks -o smtpd_helo_restrictions= -o smtpd_client_restrictions= -o smtpd_sender_restrictions= -o smtpd_recipient_restrictions=permit_mynetworks,reject -o mynetworks_style=host -o smtpd_authorized_xforward_hosts=127.0.0.0/8
Nous allons modifier les ports d'écoute de clamsmtpd et l'injection des mail après Scan. Editer le fichier /etc/clamsmtpd.conf
et modifier les lignes suivantes :
OutAddress: 127.0.0.1:10026 #Listen: 127.0.0.1:10026 (à commenter) Header: X-AV-Checked: ClamAV using ClamSMTP
Redémarrer clamsmtp et postfix :
/etc/init.d/postfix stop /etc/init.d/clamsmtp stop /etc/init.d/clamsmtp start /etc/init.d/postfix start
Planifier la mise à jour de la base AntiVirus tous les jours à 1h25, lancer la commande crontab -e
pour éditer la planification :
25 1 * * * /usr/bin/freshclam --quiet
Les commandes suivantes permettent de lister les messages de la file d'attente :
postqueue -p mailq
Pour relancer l'envoi les messages en attente dans la file :
postqueue -f
Pour effacer un message de la file d'attente :
postsuper -d 3EA3E17CC4
Pour effacer tous les messages :
postsuper -d ALL