« LINUX:Postfix-Configuration des serveurs de messagerie latérale » : différence entre les versions

Aucun résumé des modifications
Balise : Révocation manuelle
Aucun résumé des modifications
 
(7 versions intermédiaires par le même utilisateur non affichées)
Ligne 6 : Ligne 6 :
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.
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.  
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).
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.




Ligne 18 : Ligne 17 :


Leur configuration est fort similaire à celle du maître.
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
----




Ligne 23 : Ligne 30 :
Après nettoyage du fichier "/etc/postfix/main.cf", on garde la partie suivante:
Après nettoyage du fichier "/etc/postfix/main.cf", on garde la partie suivante:
----
----
  compatibility_level = 3.6
  compatibility_level = 3.9
  queue_directory = /var/spool/postfix
  queue_directory = /var/spool/postfix
  command_directory = /usr/sbin
  command_directory = /usr/bin
  daemon_directory = /usr/libexec/postfix
  daemon_directory = /usr/libexec/postfix
  data_directory = /var/lib/postfix
  data_directory = /var/lib/postfix
  mail_owner = postfix
  mail_owner = postfix
mydestination = $myhostname, localhost.$mydomain, localhost
  unknown_local_recipient_reject_code = 550
  unknown_local_recipient_reject_code = 550
'''alias_maps = hash:/etc/aliases'''
'''alias_database = hash:/etc/aliases'''
debug_peer_level = 2
  debugger_command =
  debugger_command =
          PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
        PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
          ddd $daemon_directory/$process_name $process_id & sleep 5
        ddd $daemon_directory/$process_name $process_id & sleep 5
  sendmail_path = /usr/sbin/sendmail.postfix
  sendmail_path = /usr/sbin/sendmail.postfix
  newaliases_path = /usr/bin/newaliases.postfix
  newaliases_path = /usr/bin/newaliases.postfix
  mailq_path = /usr/bin/mailq.postfix
  mailq_path = /usr/bin/mailq.postfix
  setgid_group = postdrop
  setgid_group = postdrop
  html_directory = no
  #html_directory = no
  meta_directory = /etc/postfix
  meta_directory = /etc/postfix
  shlib_directory = /usr/lib64/postfix
  shlib_directory = /usr/lib64/postfix
----
mail_spool_directory = /var/spool/mail
 
#sample_directory = /usr/share/doc/postfix/samples
 
Les lignes suivantes peuvent être désactivées car inutiles ou non nécessaires car liées au cryptage.
----
  #manpage_directory = /usr/share/man
  #manpage_directory = /usr/share/man
#sample_directory = /usr/share/doc/postfix/samples
  #readme_directory = /usr/share/doc/postfix/README_FILES
  #readme_directory = /usr/share/doc/postfix/README_FILES
  #smtpd_tls_cert_file = /etc/pki/tls/certs/postfix.pem
  debug_peer_level = 2
#smtpd_tls_key_file = /etc/pki/tls/private/postfix.key
  '''alias_maps = hash:/etc/aliases'''
  #smtpd_tls_security_level = may
  '''alias_database = hash:/etc/aliases'''
#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.
Les lignes suivante sont modifiées ou ajoutées.  
----
----
'''inet_interfaces = all'''
mynetworks_style = host
  inet_protocols = ipv4
  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:
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.
* inet_interfaces : permet d'accepter les messages venant de tous les interfaces réseaux (ici: 192.168.1.110).
* 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.
* mynetworks : accepte les connexions de la machine locale et de l'interface local.
* inet_protocols : est aussi optionnel. Elle permet de se limiter à IPV4.
* 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"=
=Configuration du fichier "master.cf"=
Après un léger nettoyage, nous obtenons le contenu suivant:
Après un léger nettoyage, nous gardons le contenu suivant:
----
----
  # ==========================================================================
  # ==========================================================================
Ligne 81 : Ligne 83 :
  #              (yes)  (yes)  (no)    (never) (100)
  #              (yes)  (yes)  (no)    (never) (100)
  # ==========================================================================
  # ==========================================================================
'''#smtp      inet  n      -      n      -      -      smtpd'''
  pickup    unix  n      -      n      60      1      pickup
  pickup    unix  n      -      n      60      1      pickup
  cleanup  unix  n      -      n      -      0      cleanup
  cleanup  unix  n      -      n      -      0      cleanup
Ligne 94 : Ligne 95 :
  proxymap  unix  -      -      n      -      -      proxymap
  proxymap  unix  -      -      n      -      -      proxymap
  proxywrite unix -      -      n      -      1      proxymap
  proxywrite unix -      -      n      -      1      proxymap
  # A CHOISIR
  smtp      unix  -      -      n      -      -      smtp.
'''smtp      unix  -      -      n      -      -      smtp'''
  #relay    unix  -      -      n      -      -      smtp
  '''relay    unix  -      -      n      -      -      smtp'''
  #       -o syslog_name=postfix/$service_name
  '''       -o syslog_name=postfix/$service_name'''
#
  showq    unix  n      -      n      -      -      showq
  showq    unix  n      -      n      -      -      showq
  error    unix  -      -      n      -      -      error
  error    unix  -      -      n      -      -      error
Ligne 104 : Ligne 103 :
  discard  unix  -      -      n      -      -      discard
  discard  unix  -      -      n      -      -      discard
  local    unix  -      n      n      -      -      local
  local    unix  -      n      n      -      -      local
  '''#virtual  unix  -      n      n      -      -      virtual'''
  #virtual  unix  -      n      n      -      -      virtual
  lmtp      unix  -      -      n      -      -      lmtp
  lmtp      unix  -      -      n      -      -      lmtp
  anvil    unix  -      -      n      -      1      anvil
  anvil    unix  -      -      n      -      1      anvil
Ligne 110 : Ligne 109 :
  postlog  unix-dgram n  -      n      -      1      postlogd
  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.




La première ligne n'est pas active:
Par contre, on ajoute les deux services suivants:
----
#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(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
  smtp      unix  -      -      n      -      -      smtp
  relay    unix -       -       n      -      -      smtp
  # cryptage
        -o syslog_name=postfix/$service_name
  -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".




==Transfert direct==
La commande:
Le transfert direct n'est possible que si la machine qui héberge le domaine destinataire du message à envoyer est connu.
  netstat -ntpl | grep master
Par exemple, dans notre cas, si on veut envoyer un message à l'adresse "adebast@mail.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.100.
donne:
 
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.100  mail.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
  tcp        0     0 0.0.0.0:25              0.0.0.0:*              LISTEN      2450741/master
#relay    unix  -      -      n      -      -      smtp
#        -o syslog_name=postfix/$service_name
----
----
Les deux suivantes peuvent être éliminées.




==Transfert par RELAY==
Un message sera destiné à une adresse mail résidant sur la même machine déclarée dans le fichier "/etc/hosts".
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.100]
----
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
----




Ligne 194 : Ligne 153 :




De même dans le Firewall "iptables", il faut ouvrir en sortie le port "smtp" (25) vers la machine maître A.
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":
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 OUTPUT -p tcp -m tcp --dport 25 -d 192.168.1.100 -j ACCEPT
Mais souvent, la configuration en sortie est ouverte à tout et donc cette ligne est inutile.
-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"=
=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@mail.home.dom".
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:
On ajoute une ligne au fichier "/etc/aliases" qui va assurer ce transfert:
----
----
  root: adebast@mail.home.dom
  root: pdupont@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.  
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:
On aurait pu mettre à la place:
----
----
  root: root@mail.home.dom
  root: root@home.dom
----
----
Le transfert se serait fait en deux étapes mais le résultat aurait été identique.
Le transfert se serait fait en deux étapes mais le résultat aurait été identique.
Ligne 231 : Ligne 191 :
  .
  .


On vérifie que le message est bien arrivé dans le répertoire "/home/adebast/Maildir/new" de la machine A "mail.home.dom".
On vérifie que le message est bien arrivé dans le répertoire "/home/pdupont/Maildir/new" de la machine A "mail.home.dom".