====== Postfix - Dovecot - Mysql - Postfixadmin sous debian lenny ====== ===== Présentation de l'architecture du système de messagerie ===== Le système de messagerie se base sur un certain nombre de composants : * **Postfix** : pour la remise et le routage des courriels entrants (SMTP) * **Dovecot** : pour récupérer les courriels en POP3, IMAP ou POP3s et IMAPs * **Mysql** : pour stocker les comptes utilisateurs de la messagerie, mais également les informations nécessaire au fonctionnement du Webmail. * **Postfixadmin** : Interface HTTP pour créer et supprimer des comptes de messagerie * **Webmail** : Interface HTTP sous **Squirrel Mail**, **IMP Horde** ou **groupOffice** pour que les utilisateurs puissent consulter leurs courriels depuis un navigateur **Ci-dessous le diagramme des flux internes et externes du système de messagerie entre les différents composants :** {{informatique:linux:postfix.png?800}} Dans la section d'installation nous allons mettre en place cette solution ===== Installation ===== ==== Introduction ==== L'installation sera effectué dans l'ordre suivant : - Installation de MySQL et création de la base postfix et droits d'accès à la base - Installation de apache avec PHP5 avec connecteur MySQL - Installation et configuration de postfixadmin - Création du stockage des courriels - Installation et configuration de postfix avec MySQL - Installation et configuration de Dovecot avec MySQL 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é. ==== Pré-requis ==== 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. ==== Choses à savoir avant installation ==== 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 ==== Mysql ==== 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 : * créer la base **postfix** * créer un utilisateur **postfix@localhost** * donner tous les droits à l'utilisateur **postfix@localhost** sur base **postfix** CREATE DATABASE postfix; CREATE USER 'postfix'@'localhost' IDENTIFIED BY 'definir_un_mdp'; GRANT ALL PRIVILEGES ON `postfix` . * TO 'postfix'@'localhost'; quit ==== Apache ==== 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 ==== Postfixadmin ==== 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. ==== Espace de stockage ==== 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 ==== Postfix ==== 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 ==== Dovecot ==== 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' ==== Tests ==== Voir : [[telnet_test_mail|Tests protocoles mail en telnet]] ===== Installation de modules complémentaires ===== ==== ClamAV ==== === Description === 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. {{informatique:linux:postfix-clamav.png?300}} === Installation du produit === Lancer la commande suivante pour installer les paquetages : apt-get install clamsmtp clamav-freshclam === Configuration === 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 ==== Spamassassin ==== ===== Exploitation de postfix ===== 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