« LINUX:Postfix-Configuration des serveurs de messagerie latérale » : différence entre les versions
(Page créée avec « __FORCETOC__ ---- ''→ 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 sur la machine maître (A). Il n'a pas pour objectif... ») |
Aucun résumé des modifications |
||
(6 versions intermédiaires par le même utilisateur non affichées) | |||
Ligne 20 : | Ligne 20 : | ||
=Configuration du fichier "main.cf"= | |||
Après nettoyage du fichier "/etc/postfix/main.cf", on garde la partie suivante: | |||
---- | |||
compatibility_level = 3.6 | |||
queue_directory = /var/spool/postfix | |||
command_directory = /usr/sbin | |||
daemon_directory = /usr/libexec/postfix | |||
data_directory = /var/lib/postfix | |||
mail_owner = postfix | |||
mydestination = $myhostname, localhost.$mydomain, localhost | |||
unknown_local_recipient_reject_code = 550 | |||
'''alias_maps = hash:/etc/aliases''' | |||
'''alias_database = hash:/etc/aliases''' | |||
debug_peer_level = 2 | |||
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 | |||
---- | |||
Les lignes suivantes peuvent être désactivées car inutiles ou non nécessaires car liées au cryptage. | |||
---- | |||
#manpage_directory = /usr/share/man | |||
#sample_directory = /usr/share/doc/postfix/samples | |||
#readme_directory = /usr/share/doc/postfix/README_FILES | |||
#smtpd_tls_cert_file = /etc/pki/tls/certs/postfix.pem | |||
#smtpd_tls_key_file = /etc/pki/tls/private/postfix.key | |||
#smtpd_tls_security_level = may | |||
#smtp_tls_CApath = /etc/pki/tls/certs | |||
#smtp_tls_CAfile = /etc/pki/tls/certs/ca-bundle.crt | |||
#smtp_tls_security_level = may | |||
---- | |||
On les met en commentaire ou plus simplement, on les éliminent. | |||
Les lignes suivante sont modifiées ou ajoutées. La première est nécessaire. | |||
---- | |||
'''inet_interfaces = all''' | |||
mynetworks_style = host | |||
inet_protocols = ipv4 | |||
---- | |||
Explications: | |||
* inet_interfaces : permet d'accepter les messages venant de tous les interfaces réseaux alors que la configuration de base n'acceptait que ceux de la machine locale. | |||
* mynetworks_style : permet de n'accepter pour un transfert vers un autre serveur de messagerie que les message de la machine locale. Cette option est optionnelle. | |||
* inet_protocols : est aussi optionnel. Elle permet de se limiter à IPV4. | |||
=Configuration du fichier "master.cf"= | |||
Après un léger nettoyage, nous obtenons le contenu suivant: | |||
---- | |||
# ========================================================================== | |||
# service type private unpriv chroot wakeup maxproc command + args | |||
# (yes) (yes) (no) (never) (100) | |||
# ========================================================================== | |||
'''#smtp inet n - n - - smtpd''' | |||
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 | |||
# A CHOISIR | |||
'''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 | |||
---- | |||
La première ligne n'est pas active: | |||
---- | |||
#smtp inet n - n - - smtpd | |||
---- | |||
La réception de messages venant du réseau est refusée et donc impossible. Le port SMTP (25) ne se retrouve pas dans la liste des ports en écoute, au contraire du maître. | |||
La commande: | |||
netstat -ntpl | grep master | |||
ne donnera rien. | |||
On remarque plus bas la ligne désactivée mise en commentaire comme dans le cas du serveur maître. | |||
---- | |||
#virtual unix - n n - - virtual | |||
---- | |||
Elle est inutile car on n'héberge pas de domaines virtuels, seul le domaine correspondant au nom de la machine est actif. | |||
Ces deux lignes peuvent être effacées. | |||
Un message est soit destiné à une adresse mail résidant sur la même machine sinon il doit être transféré à une autre machine. | |||
Notons que les messages délivrés localement, par défaut, utilisent la méthode de stockage "Mbox". Chaque utilisateur a un fichier à son nom dans le répertoire "/var/spool/mail" ou "/var/mail" (identiques par un lien symbolique). A la fin de cette configuration, ces fichiers resteront vide. | |||
Les trois lignes suivantes permettent le transfert de messages vers un autre serveur de messagerie selon deux méthodes différentes: '''smtp''' direct et smtp '''relay''' (remarque: la troisième ligne défini une option ("-o") pour la méthode "relay"). Une seule méthode est nécessaire mais chacune a besoin d'une configuration spécifique. | |||
---- | |||
smtp unix - - n - - smtp | |||
relay unix - - n - - smtp | |||
-o syslog_name=postfix/$service_name | |||
---- | |||
==Transfert direct== | |||
Le transfert direct n'est possible que si la machine qui héberge le domaine destinataire du message à envoyer est connu. | |||
Par exemple, dans notre cas, si on veut envoyer un message à l'adresse "adebast@servermail.home.dom", il faut connaitre le nom de la machine qui héberge le domaine "servermail.home.dom"; comme ce domaine correspond au nom de la machine, il faut connaître l'adresse IP de cette machine A: 192.169.1.110. | |||
Soit si on a un serveur DNS privé, interne auquel on se réfère et correctement configuré, il n'y a pas de problème. | |||
Mais en général ce n'est pas le cas; il faut donc utiliser une autre approche de base. Il faut ajouter cette correspondance dans le fichier "/etc/hosts": | |||
---- | |||
192.168.1.110 servermail.home.dom | |||
---- | |||
On ajoute le couple "Adresse IP" et "Nom de machine" sur une ligne. | |||
Dans notre fichier "/etc/postfix/master.cf", seule la première ligne est nécessaire dans les trois: | |||
---- | |||
smtp unix - - n - - smtp | |||
#relay unix - - n - - smtp | |||
# -o syslog_name=postfix/$service_name | |||
---- | |||
Les deux suivantes peuvent être éliminées. | |||
==Transfert par RELAY== | |||
Si la machine locale ne sait pas à qui transmettre le message, il délègue le travail à une machine plus capable que lui. C'est la fonction RELAY. | |||
Dans ce cas, on ne touche pas au fichier "/etc/hosts". | |||
Par contre, on ajoute une ligne dans le fichier "/etc/postfix/main.cf" qui reprend l'adresse IP de cette machine qui assure le RELAY: | |||
---- | |||
relayhost = [192.168.1.110] | |||
---- | |||
Dans notre exemple, c'est la machine A qui assure cette fonction. | |||
Par défaut le port de transfert est 25 (smtp); La machine RELAY doit, elle, écouter sur ce port (processus 'smtpd"). | |||
On aurait pu mettre le nom de la machine A mais alors il aurait fallu ajouter la ligne de la méthode précédente dans le fichier "/etc/hosts". Mais alors la méthode de transfert direct aurait prévalu et la méthode RELAY n'aurait pas été utilisée. | |||
Dans notre fichier "/etc/postfix/master.cf", les trois lignes sont alors nécessaires: | |||
---- | |||
smtp unix - - n - - smtp | |||
relay unix - - n - - smtp | |||
-o syslog_name=postfix/$service_name | |||
---- | |||
=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. | |||
Ceci se fait dans le fichier "/etc/sysconfig/iptables": | |||
-A OUTPUT -p tcp -m tcp --dport 25 -d 192.168.1.110 -j ACCEPT | |||
Mais souvent, la configuration en sortie est ouverte à tout et donc cette ligne est inutile. | |||
=Configuration du fichier "aliases"= | |||
Le but final c'est de transférer tout message à la machine A à l'utilisateur "adebast" créé précédemment via son adresse mail "adebast@servermail.home.dom". | |||
On ajoute une ligne au fichier "/etc/aliases" qui va assurer ce transfert: | |||
---- | |||
root: adebast@servermail.home.dom | |||
---- | |||
Dans ce cas, tous les messages arrivants ou redirigés vers l'utilisateur "root" seront redirigés vers l'utilisateur "adebast" 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@servermail.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/adebast/Maildir/new" de la machine A "servermail.home.dom". | |||
Dernière version du 7 février 2023 à 17:30
→ 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 sur 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). De même comme nous travaillons en interne, en vase clos et pas soucis de simplification, nous n'utiliserons pas de cryptage.
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.
Configuration du fichier "main.cf"
Après nettoyage du fichier "/etc/postfix/main.cf", on garde la partie suivante:
compatibility_level = 3.6 queue_directory = /var/spool/postfix command_directory = /usr/sbin daemon_directory = /usr/libexec/postfix data_directory = /var/lib/postfix mail_owner = postfix mydestination = $myhostname, localhost.$mydomain, localhost unknown_local_recipient_reject_code = 550 alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases debug_peer_level = 2 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
Les lignes suivantes peuvent être désactivées car inutiles ou non nécessaires car liées au cryptage.
#manpage_directory = /usr/share/man #sample_directory = /usr/share/doc/postfix/samples #readme_directory = /usr/share/doc/postfix/README_FILES #smtpd_tls_cert_file = /etc/pki/tls/certs/postfix.pem #smtpd_tls_key_file = /etc/pki/tls/private/postfix.key #smtpd_tls_security_level = may #smtp_tls_CApath = /etc/pki/tls/certs #smtp_tls_CAfile = /etc/pki/tls/certs/ca-bundle.crt #smtp_tls_security_level = may
On les met en commentaire ou plus simplement, on les éliminent.
Les lignes suivante sont modifiées ou ajoutées. La première est nécessaire.
inet_interfaces = all mynetworks_style = host inet_protocols = ipv4
Explications:
- inet_interfaces : permet d'accepter les messages venant de tous les interfaces réseaux alors que la configuration de base n'acceptait que ceux de la machine locale.
- mynetworks_style : permet de n'accepter pour un transfert vers un autre serveur de messagerie que les message de la machine locale. Cette option est optionnelle.
- inet_protocols : est aussi optionnel. Elle permet de se limiter à IPV4.
Configuration du fichier "master.cf"
Après un léger nettoyage, nous obtenons le contenu suivant:
# ========================================================================== # service type private unpriv chroot wakeup maxproc command + args # (yes) (yes) (no) (never) (100) # ========================================================================== #smtp inet n - n - - smtpd 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 # A CHOISIR 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
La première ligne n'est pas active:
#smtp inet n - n - - smtpd
La réception de messages venant du réseau est refusée et donc impossible. Le port SMTP (25) ne se retrouve pas dans la liste des ports en écoute, au contraire du maître. La commande:
netstat -ntpl | grep master
ne donnera rien.
On remarque plus bas la ligne désactivée mise en commentaire comme dans le cas du serveur maître.
#virtual unix - n n - - virtual
Elle est inutile car on n'héberge pas de domaines virtuels, seul le domaine correspondant au nom de la machine est actif.
Ces deux lignes peuvent être effacées.
Un message est soit destiné à une adresse mail résidant sur la même machine sinon il doit être transféré à une autre machine.
Notons que les messages délivrés localement, par défaut, utilisent la méthode de stockage "Mbox". Chaque utilisateur a un fichier à son nom dans le répertoire "/var/spool/mail" ou "/var/mail" (identiques par un lien symbolique). A la fin de cette configuration, ces fichiers resteront vide.
Les trois lignes suivantes permettent le transfert de messages vers un autre serveur de messagerie selon deux méthodes différentes: smtp direct et smtp relay (remarque: la troisième ligne défini une option ("-o") pour la méthode "relay"). Une seule méthode est nécessaire mais chacune a besoin d'une configuration spécifique.
smtp unix - - n - - smtp relay unix - - n - - smtp -o syslog_name=postfix/$service_name
Transfert direct
Le transfert direct n'est possible que si la machine qui héberge le domaine destinataire du message à envoyer est connu. Par exemple, dans notre cas, si on veut envoyer un message à l'adresse "adebast@servermail.home.dom", il faut connaitre le nom de la machine qui héberge le domaine "servermail.home.dom"; comme ce domaine correspond au nom de la machine, il faut connaître l'adresse IP de cette machine A: 192.169.1.110.
Soit si on a un serveur DNS privé, interne auquel on se réfère et correctement configuré, il n'y a pas de problème.
Mais en général ce n'est pas le cas; il faut donc utiliser une autre approche de base. Il faut ajouter cette correspondance dans le fichier "/etc/hosts":
192.168.1.110 servermail.home.dom
On ajoute le couple "Adresse IP" et "Nom de machine" sur une ligne.
Dans notre fichier "/etc/postfix/master.cf", seule la première ligne est nécessaire dans les trois:
smtp unix - - n - - smtp #relay unix - - n - - smtp # -o syslog_name=postfix/$service_name
Les deux suivantes peuvent être éliminées.
Transfert par RELAY
Si la machine locale ne sait pas à qui transmettre le message, il délègue le travail à une machine plus capable que lui. C'est la fonction RELAY.
Dans ce cas, on ne touche pas au fichier "/etc/hosts".
Par contre, on ajoute une ligne dans le fichier "/etc/postfix/main.cf" qui reprend l'adresse IP de cette machine qui assure le RELAY:
relayhost = [192.168.1.110]
Dans notre exemple, c'est la machine A qui assure cette fonction.
Par défaut le port de transfert est 25 (smtp); La machine RELAY doit, elle, écouter sur ce port (processus 'smtpd"). On aurait pu mettre le nom de la machine A mais alors il aurait fallu ajouter la ligne de la méthode précédente dans le fichier "/etc/hosts". Mais alors la méthode de transfert direct aurait prévalu et la méthode RELAY n'aurait pas été utilisée.
Dans notre fichier "/etc/postfix/master.cf", les trois lignes sont alors nécessaires:
smtp unix - - n - - smtp relay unix - - n - - smtp -o syslog_name=postfix/$service_name
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.
Ceci se fait dans le fichier "/etc/sysconfig/iptables":
-A OUTPUT -p tcp -m tcp --dport 25 -d 192.168.1.110 -j ACCEPT
Mais souvent, la configuration en sortie est ouverte à tout et donc cette ligne est inutile.
Configuration du fichier "aliases"
Le but final c'est de transférer tout message à la machine A à l'utilisateur "adebast" créé précédemment via son adresse mail "adebast@servermail.home.dom".
On ajoute une ligne au fichier "/etc/aliases" qui va assurer ce transfert:
root: adebast@servermail.home.dom
Dans ce cas, tous les messages arrivants ou redirigés vers l'utilisateur "root" seront redirigés vers l'utilisateur "adebast" 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@servermail.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/adebast/Maildir/new" de la machine A "servermail.home.dom".
→ Postfix et Dovecot-Configuration de gestion