Ci-dessous, les différences entre deux révisions de la page.
| Prochaine révision | Révision précédente | ||
|
informatique:linux:postfix [2007/09/21 15:33] 127.0.0.1 édition externe |
informatique:linux:postfix [2018/10/17 12:59] (Version actuelle) benoit [Tests] |
||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| + | |||
| + | |||
| + | ====== 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 ===== | ===== Installation ===== | ||
| - | Installer le package suivant: | + | ==== Introduction ==== |
| - | postfix | + | 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 | ||
| - | sous Redhat pour le lancer au demarrage du système: | + | Pour relancer l'envoi les messages en attente dans la file : |
| - | chkconfig --add postfix | + | postqueue -f |
| - | chkconfig postfix on | + | |
| + | Pour effacer un message de la file d'attente : | ||
| + | postsuper -d 3EA3E17CC4 | ||
| - | ===== Configuration ===== | + | Pour effacer tous les messages : |
| - | Paramètres à modifier dans /etc/postfix/main.cf | + | postsuper -d ALL |
| - | # Nom ud serveur affiché lors de la connexion SMTP | + | |
| - | myhostname = smtp.zikdomain.com | + | |
| - | # domaine principal | + | |
| - | mydomain = zikdomain.com | + | |
| - | # domain source | + | |
| - | myorigin = $mydomain | + | |
| - | # interfaces d'ecoute | + | |
| - | inet_interfaces = all | + | |
| - | #inet_interfaces = localhost | + | |
| - | # machines autorisées a se connecter | + | |
| - | mynetworks = 10.0.0.0/24 | + | |