LINUX:Postfix-Configuration des serveurs de messagerie latérale
→ Postfix et Dovecot-Configuration de gestion
But
Cet article traite de la configuration des autres serveurs de messagerie Postfix qui vont envoyer leurs messages au serveur central. Dans le schéma, c'est ma machine B (ou C et suivantes) qui est concernée.
Rappelons que le but est de transférer les messages de gestion locaux vers la machine maître (A). Il n'a pas pour objectif d'envoyer des messages vers un autre prestataire d'Internet ni entre utilisateurs de notre famille ou entreprise. On n'accepte que les messages de la machine; donc le serveur SMTP n'est pas actif (port 25).
Fichiers de configuration
Comme vu précédemment, les fichiers de configuration de Postfix se trouvent dans le répertoire "/etc/postfix". Nous n'utiliserons que des trois fichiers strictement nécessaires:
- main.cf : contenant les paramètres généraux de Postfix
- master.cf : contenant la liste des programmes intervenant dans le fonctionnement de Postfix
Le fichier "/etc/aliases" qui intervient dans "main.cf", sera traité en fin d'article.
Leur configuration est fort similaire à celle du maître.
Si vous n'avez pas de serveur DNS local, il faut déclarer les serveurs locaux dans le fichier "/etc/hosts".
Par exemple:
192.168.1.100 server1.home.dom mail.home.dom home.dom 192.168.1.110 server2.externe.dom
Configuration du fichier "main.cf"
Après nettoyage du fichier "/etc/postfix/main.cf", on garde la partie suivante:
compatibility_level = 3.9
queue_directory = /var/spool/postfix
command_directory = /usr/bin
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
mail_owner = postfix
unknown_local_recipient_reject_code = 550
debugger_command =
PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
ddd $daemon_directory/$process_name $process_id & sleep 5
sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
setgid_group = postdrop
#html_directory = no
meta_directory = /etc/postfix
shlib_directory = /usr/lib64/postfix
mail_spool_directory = /var/spool/mail
#sample_directory = /usr/share/doc/postfix/samples
#manpage_directory = /usr/share/man
#readme_directory = /usr/share/doc/postfix/README_FILES
debug_peer_level = 2
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
Les lignes suivante sont modifiées ou ajoutées.
inet_protocols = ipv4 mynetworks = 127.0.0.1 192.168.1.110 inet_interfaces = all home_mailbox = Maildir/ smtpd_tls_cert_file = /etc/pki/externe/certs/mail.externe.chaine.pem smtpd_tls_key_file = /etc/pki/externe/private/externe.key
Explications:
- inet_interfaces : permet d'accepter les messages venant de tous les interfaces réseaux (ici: 192.168.1.110).
- mynetworks : accepte les connexions de la machine locale et de l'interface local.
- inet_protocols : est aussi optionnel. Elle permet de se limiter à IPV4.
- home_mailbox : définit que les messages non délivrés sur la machine centrale, seront dans l'espace disque le l'utilisateur destinataire. Normalement, tous les messages devraient se retrouver sur le serveur central, donc les boîtes locales devraient rester vides.
- les deux dernières définissent les clé et certificat pour l'accès SSL.
Configuration du fichier "master.cf"
Après un léger nettoyage, nous gardons le contenu suivant:
# ========================================================================== # service type private unpriv chroot wakeup maxproc command + args # (yes) (yes) (no) (never) (100) # ========================================================================== pickup unix n - n 60 1 pickup cleanup unix n - n - 0 cleanup qmgr unix n - n 300 1 qmgr tlsmgr unix - - n 1000? 1 tlsmgr rewrite unix - - n - - trivial-rewrite bounce unix - - n - 0 bounce defer unix - - n - 0 bounce trace unix - - n - 0 bounce verify unix - - n - 1 verify flush unix n - n 1000? 0 flush proxymap unix - - n - - proxymap proxywrite unix - - n - 1 proxymap smtp unix - - n - - smtp. #relay unix - - n - - smtp # -o syslog_name=postfix/$service_name showq unix n - n - - showq error unix - - n - - error retry unix - - n - - error discard unix - - n - - discard local unix - n n - - local #virtual unix - n n - - virtual lmtp unix - - n - - lmtp anvil unix - - n - 1 anvil scache unix - - n - 1 scache postlog unix-dgram n - n - 1 postlogd
On désactive les services "relay" et "virtual", non nécessaires. Car nous n'utiliserons pas de serveur intermédiaire pour envoyer le message. Et nous n'hébergeons pas de domaines virtuels, seul le domaine correspondant au nom de la machine est actif.
Par contre, on ajoute les deux services suivants:
# SMTP(serveur) - port 25 - STARTTLS - NOLOGIN smtp inet n - n - - smtpd # cryptage -o smtpd_tls_security_level=may -o smtpd_tls_wrappermode=no -o smtpd_tls_auth_only=no -o smtpd_tls_loglevel=2 # SMTP(client) - port 25 - STARTTLS smtp unix - - n - - smtp # cryptage -o smtp_tls_security_level=may -o smtp_tls_wrappermode=no -o smtp_tls_loglevel=2
- Le premier: le service d'écoute SMTP sur le port 25 de type STARTTLS pour la réception des mails venant sur l'interface réseau. Il propose une réception en claire ou cryptée SSL/TLS de préférence. Il n'y a pas d'authentification.
- La seconde: le service SMTP d'envoi de mails via le port 25 de type STARTTLS. Si le serveur distant accepte un envoi crypté SSL/TLS, il est préféré sinon il sera en clair.
Les options "smtpd_tls_loglevel=2" et "smtp_tls_loglevel=2" permet de suivre cet échange SSL/TLS dans le fichier journal "/var/log/maillog".
La commande:
netstat -ntpl | grep master
donne:
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 2450741/master
Un message sera destiné à une adresse mail résidant sur la même machine déclarée dans le fichier "/etc/hosts".
Remarques
Comme vu lors de la présentation de Postfix, dès que la configuration est terminée, il faut activer Postfix si ce n'est pas fait:
systemctl enable postfix
et relancer le service:
systemctl restart postfix
De même dans le Firewall "iptables", il faut ouvrir en sortie le port "smtp" (25) vers la machine maître A et en entrée sur le port "smtp" (25) de la machine locale.
Ceci se fait dans le fichier "/etc/sysconfig/iptables":
-A OUTPUT -p tcp -m tcp --dport 25 -d 192.168.1.100 -j ACCEPT -A INPUT -p tcp -m tcp --sport 25 -s 192.168.1.110 -m conntrack --ctstate NEW -j ACCEPT
Mais souvent, la configuration en sortie est ouverte à tout et donc la première ligne est inutile.
Configuration du fichier "aliases"
Le but final c'est de transférer tout message à la machine A à l'utilisateur "pdupont" créé précédemment via son adresse mail "pdupont@home.dom".
On ajoute une ligne au fichier "/etc/aliases" qui va assurer ce transfert:
root: pdupont@home.dom
Dans ce cas, tous les messages arrivants ou redirigés vers l'utilisateur "root" seront redirigés vers l'utilisateur "pdupont" se trouvant sur la machine A. Faites de même pour tout autre utilisateur concerné par la réception de messages.
On aurait pu mettre à la place:
root: root@home.dom
Le transfert se serait fait en deux étapes mais le résultat aurait été identique.
Il faut activer cette modification en "compilant" ce fichier par la commande:
newaliases
ou plus simplement en redémarrant le service Postfix:
systemctl restart postfix
Vérification
A titre de vérification, nous envoyons un message à l'utilisateur "root" en ligne de commande sur cette machine secondaire que nous venons de configurer:
mail root
Interactivement on nous demande de remplir le sujet:
Essai
et ensuite le corps du message clôturé par une ligne ne comportant qu'un point:
Essai de message distant .
On vérifie que le message est bien arrivé dans le répertoire "/home/pdupont/Maildir/new" de la machine A "mail.home.dom".
→ Postfix et Dovecot-Configuration de gestion