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