LAB02 : part 04 : RHEL7 : procédure d'ajout pour un nouveau serveur d'application

De Pegasus45

La procédure ci-dessous décrit les différentes manipulations à faire pour que la plate-forme traite les mails en provenance d'un serveur d'applications. Pour que le traitement puisse se faire correctement, il faut obligatoirement que l'adresse IP du serveur d'applications vue par le serveur qp-ari-relay01 doit être différente de celles déjà définies dans la configuration de Postfix.

Pour décrire cette procédure, nous allons prendre pour exemple les éléments suivants :

  • adresse IP du serveur d'application SRV01 = 172.29.69.19
  • adresse IP du serveur qp-ari-backend01 = 172.29.69.60
  • domaine de messagerie = domaine-srv01.lan
  • nom de l'instance Postfix = postfix-srv01
  • nom de LV = lv_domaine-srv01
  • IP et port du serveur backend01


Création du LV pour ce domaine de messagerie

On commence par créer un Logical Volume dédié pour le stockage des BALs pour ce domaine de messagerie. L'idée est de faire en sorte que des envois massifs ne saturent pas totalement le serveur. Ainsi, la saturation sera cloisonnée à un seul File System qui n'est utilisé que pour ce domaine de messagerie.

Sur le serveur BACKEND01, on commence par vérifier qu'il reste de l'espace disponible dans le Volume Group :

Command
vgdisplay vg_mail

  Free  PE / Size       5118 / 19,99 GiB

Puisqu'il reste de l'espace libre, on va pouvoir créer un nouveau Logical Volume :

Command
lvcreate -n lv_domaine-srv01 -L 5G vg_mail

  Logical volume "lv_domaine-srv01" created.

  • -n <nom_LV>
  • -L <taille_LV>

Ensuite, on crée un File System sur ce LV :

Command
mkfs.xfs /dev/vg_mail/lv_domaine-srv01

Pour finir, on crée le point de montage, on le monte dessus et on modifie le fichier fstab :

Command
mkdir /srv/vmail/domaine-srv01.lan
mount /dev/vg_mail/lv_domaine-srv01 /srv/vmail/domaine-srv01.lan
chown vmail.vmail /srv/vmail/domaine-srv01.lan
chmod 700 /srv/vmail/domaine-srv01.lan

echo "/dev/vg_mail/lv_domaine-srv01   /srv/vmail/domaine-srv01.lan    xfs     defaults        0 0" >> /etc/fstab

Le fichier fstab doit ressembler à ceci :

Command
cat /etc/fstab

[...]
/dev/vg_mail/lv_domaine-srv01   /srv/vmail/domaine-srv01.lan    xfs     defaults        0 0

La commande suivante permet de voir le LV est bien monté :

Command
df -h /srv/vmail/domaine-srv01.lan

Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg_mail-lv_domaine--srv01
                      5,0G   10M  4,7G   1% /srv/vmail/domaine-srv01.lan


Création d'une instance Postfix

Il faut créer une nouvelle instance Postfix pour qu'elle réceptionne et traite les mails venant du serveur d'applications :

Command
postmulti -I postfix-srv01 -e create

Une erreur apparaît car il a créé une nouvelle instance qui essaie d'utiliser l'IPv6 mais ce protocole n'est pas actif. On résoudra ce pb un peu plus loin dans cette procédure.

A la suite de cette commande, les répertoires suivantes ont été créées :

Command
ll -d /etc/postfix-srv01
ll -d /var/spool/postfix-srv01
ll -d /var/lib/postfix-srv01

Suite à l'erreur précédente, le propriétaire du dernier répertoire n'est pas correcte. On va le corriger maintenant :

Command
chown postfix.root /var/lib/postfix-srv01


Configuration de l'instance Postfix

Il est temps de la configurer. En supprimant toutes les lignes en commentaire, le fichier devrait ressembler à ceci :

Command
cd /etc/postfix-srv01
cp main.cf main.cf_ori

Configuration File vi /etc/postfix-srv01/main.cf
#soft_bounce = no
queue_directory = /var/spool/postfix-h2m
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix-h2m
mail_owner = postfix
inet_interfaces = all
inet_protocols = ipv4
mydestination =
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
manpage_directory = /usr/share/man
sample_directory = /usr/share/doc/postfix-2.10.1/samples
readme_directory = /usr/share/doc/postfix-2.10.1/README_FILES
enable_long_queue_ids = yes
mytransport_destination_recipient_limit = 1

smtpd_banner = ESMTP pour srv01
transport_maps = hash:/etc/postfix-srv01/transport
virtual_maps   = regexp:/etc/postfix-srv01/virtual-regexp
mynetworks = <ip_qp-ari-relay01>

# 1er ccontrole: Client restrictions:
# Seule l'IP de mynetworks est autorisée à envoyer des mails vers ce Postfix.
# mynetworks: IP du serveur Postfix Relay
smtpd_client_restrictions =
   reject_unauth_pipelining
   permit_mynetworks
   reject

# 2e controle: Recipient restrictions:
smtpd_recipient_restrictions =
   reject_non_fqdn_recipient
   permit_mynetworks
   reject_unauth_destination

master_service_disable =
authorized_submit_users =
multi_instance_name = postfix-srv01

Remarque: Dans mynetworks, il faut indiquer l'adresse IP du serveur qp-ari-relay01.

On crée le fichier transport :

Configuration File vi /etc/postfix-srv01/transport
domaine2-srv01.lan      mytransport:

Remarque : il faut obligatoirement mettre un nom de domaine différent de celui ajouté dans la base SQL. Sinon, il y aura un pb d'échanges de mails entre les instances Postfix.

On crée la version Berkeley de ce fichier :

Command
postmap /etc/postfix-srv01/transport

On crée le fichier virtual-regex :

Configuration File vi /etc/postfix-srv01/virtual-regexp
/(.+)@(.+)/ $1@domaine2-srv01.lan

Remarque : mettre le même nom de domaine qu'on a indiqué dans le fichier transport.

Et on crée la version Berkeley :

Command
postmap /etc/postfix-srv01/virtual-regexp

On définit un nouveau port d'écoute pour cette instance (de 25101 à 25499):

Configuration File vi /etc/postfix-srv01/master.cf
mytransport     unix  -       n       n       -       -       pipe
  flags=DRhu user=vmail argv=/appli/dispatch-smtp/traitement-srv01.py ${user} ${sender}

25101      inet  n       -       n       -       -       smtpd
#smtp      inet  n       -       n       -       -       smtpd

Remarque : chaque instance devra avoir un nom de script différent et un port différent.


Déclarer le nom de domaine dans MySQL

Le nouveau de domaine de messagerie devra être enregistré dans la base MySQL :

Command
mysql -h 127.0.0.1 -u mailuser -p mailserver -e "INSERT INTO virtual_domains (name) VALUES ('domaine-srv01.lan')"

Dans la base SQL, comme le champ ID est un auto-incrément, il faut récupérer l'ID que MySQL a affecté à ce nouveau domaine :

Command
mysql -h 127.0.0.1 -u mailuser -p mailserver -e "SELECT ID FROM virtual_domains WHERE name='domaine-srv01.lan'"

+----+
| ID |
+----+
|  1 |
+----+

Cette valeur est nécessaire pour la configuration du script Python.


Dupliquer le script Python

A partir du modèle du script déjà présent sur le serveur, il faut le dupliquer et le nommer du même nom qu'on a indiqué dans le fichier master.cf :

Command
cp /appli/dispatch-smtp/traitement.py /appli/dispatch-smtp/traitement-srv01.py

Configuration File vi /appli/dispatch-smtp/traitement-srv01.py
domaineID = 1
domaineNom = "domaine-srv01.lan"
passwdBAL = "summersun01"
DomaineID : mettre la valeur qu'on a récupéré de la commande SQL précédente
domaineNom : indiquer le nom de domaine de messagerie (toujours entre double quote)
passwdBAL : saisir un mot de passe (toujours entre double quote)

On le rend exécutable :

Command
chmod 755 /appli/dispatch-smtp/traitement-srv01.py


Activer l'instance Postfix

Il reste à activer cette instance :

Command
postmulti -i postfix-srv01 -e enable

La ligne suivante a été modifiée :

Command
cat /etc/postfix-srv01/main.cf

[...]
multi_instance_enable = yes


De même que Postfix indique qu'elle est activée :

Command
postmulti -l

[...]
postfix-srv01   -               y         /etc/postfix-srv01

On peut maintenant relancer Postfix :

Command
systemctl restart postfix

On peut voir qu'un nouveau port est en écoute :

Command
ss -lnt

LISTEN      0      100        *:25101            *:*


Configuration de relay01

Pour finir, il ne reste plus qu'à configurer le serveur qp-ari-relay01 pour qu'il traite les mails venant du serveur d'application et qu'il renvoie les mails vers le nouveau port qu'on vient d'activer sur qp-ari-backend01.

Pour cela, on ajoute l'adresse IP du serveur d'application dans la configuration de Postfix :

Configuration File vi /etc/postfix-relay/main.cf
mynetworks = 172.29.69.19

Remarque : 192.168.26.129 = adresse IP du serveur d'application

Et on modifie le fichier de configuration du script Python en ajoutant une nouvelle ligne :

Configuration File vi /appli/dispatch-smtp/dispatch-smtp.conf
[...]
172.29.69.19,172.29.69.60:25101

  • 172.29.69.19 = ex. d'une adresse IP du serveur d'applications
  • 172.29.69.60:25101 = adresse IP et port du serveur backend01

le séparateur doit être la virgule

Si nécessaire, on change les droits du fichier :

Command
chmod 644 /appli/dispatch-smtp/dispatch-smtp.conf

Et on relance Postfix :

Command
systemctl restart postfix


Listes des articles associés: