LINUX:Postfix-Configuration des serveurs de messagerie latérale

De WIKI sur Linux (ADB)
Aller à la navigation Aller à la recherche

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