LINUX:Pacemaker - Paramétrage des services en Failover
→ retour à Pacemaker - Serveurs en Failover
But
Maintenant que le nécessaire est en place, nous allons y placer quelques éléments pratiques: quelques services classiques. Mais avant d'aborder la suite de la configuration de Pacemaker, il nous faut les paramétrer un minimum afin de tester cet ensemble. Pour ne pas alourdir cet article, nous les avons détaillés à part.
Services
Nous allons paramétrer quelques éléments:
- les certificats qui seront utilisés par Apache, Postfix et Dovecot
- PHP, langage de script, utilisé par Apache
- le service Web, Apache
- le service de base de données, Mariadb souvent utilisé dans les applications Web tel WordPress
- le service de messagerie, Postfix
- le service de relevé de courrier, Dovecot
Toutes ces services seront actifs sur la machine qui aura la main, celle où Drbd est à l'état actif ou Primary. Ces paramétrages seront identiques sur les deux machines du cluster afin que l'une ou l'autre puissent prendre la main à tout moment.
Les données de ces services seront placés sur l'espace partagé.
Du côté de la machine en attente, il faut qu'un service minimum de messagerie soit actif pour pouvoir relayer les messages du système. Une configuration minimale de Postfix sera prévue à cet effet.
Certificats
Pour les services Apache, Postfix et Dovecot, il nous faut des certificats, ce seront les mêmes pour ces trois services. Nous nous utiliserons les procédures présentées dans les articles concernant la Création d'une CA privée (V1) et l'Extension de la CA privée (V3).
Dans notre cas, le nom du serveur est "cluster.home.dom" et son adresse IP est "192.168.1.73". Nous allons passer en revue l'ensemble des commandes qui vont générer les fichiers nécessaires.
- Création de la clé de l’autorité de certification (CA): ca.key
openssl genrsa -out ca.key -passout pass:MOTDEPASSESECRET 2048
- Création du certificat de l’autorité de certification (CA): ca.home.crt
openssl req -new -days 3650 -x509 -out ca.home.crt -passin pass:MOTDEPASSESECRET -key ca.key -subj '/CN=CA.home.dom/emailAddress=pdupont@gmail.com/OU=Dupont/O=Home/L=Namur/ST=Belgique/C=BE'
- Création du n° de série des certificats générés
echo "01" > ca.home.srl
- Création de la clé du serveur "cluster.home.dom": cluster.key
openssl genrsa -out cluster.key 2048
- Création du fichier pour la création de certificats de version 3: reqv3.cnf
[ v3_req ] basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment subjectAltName = @alt_names [ alt_names ] DNS = cluster.home.dom IP = 192.168.1.73
- Création de la requête de certificats pour le serveur "cluster.home.dom": cluster.home.csr
openssl req -new -key cluster.key -out cluster.home.csr -subj '/CN=cluster.home.dom/emailAddress=pdupont@gmail.com/OU=Dupont/O=Home/L=Namur/ST=Belgique/C=BE'
- Création du certificat du serveur "cluster.home.dom": cluster.home.crt
openssl x509 -req -days 3650 -extensions v3_req -extfile reqv3.cnf -in cluster.home.csr -out cluster.home.crt -passin pass:MOTDEPASSESECRET -CA ca.home.crt -CAkey ca.key -CAserial ca.home.srl
- Création de la chaîne de certificats (CA et serveur): cluster.home.pem
cat cluster.home.crt ca.home.crt > cluster.home.pem
Au final, nous aurons besoins de deux fichiers:
- la clé du serveur: cluster.key
- la chaîne des deux certificats (CA et serveur): cluster.home.pem
Sur les deux serveurs du cluster, nous créons le répertoire "/etc/pki/WEB" et en dessous les répertoires "private", où on copie la clé, et "certs", où on copie la chaîne des certificats.
PHP
On installe le langage de script PHP
Service Web - Apache
Configuration centrale
Le fichier de configuration principal est "/etc/httpd/conf/httpd.conf". Nous n'y changerons que peu d'options.
En premier, nous désactivons toutes les sections et options qui font référence au répertoire par défaut: "/var/www".
Par défaut, tous les fichiers complémentaires pour les sites et applications se retrouvent dans le répertoire "/etc/httpd/conf.d". Nous avons l'habitude de créer un répertoire latéral où on met ce qui nous est nécessaire, adaptés à nos besoins et en évitant ainsi les configurations inutiles. Nous nommons ce répertoire "/etc/httpd/conf.d.web" avec les droits adaptés.
Dans le fichier "/etc/httpd/conf/httpd.conf", il faut adapter cette inclusion en conséquence. En fin de fichier, la ligne:
IncludeOptional conf.d/*.conf
devient:
IncludeOptional conf.d.web/*.conf
Ne pas oublier d'installer le module qui permet l'utilisation d'HTTPS:
dnf install mod_ssl
Configurations latérales
Ces fichiers de configuration sont mis dans le répertoire "/etc/httpd/conf.d.web".
- On y place le fichier concernant PHP sans modification "php.conf" qui se trouve à l'origine dans le répertoire "/etc/httpd/conf.d".
- Le service Http pourra être crypté; à cet effet, on y place le fichier concerné "ssl.conf" avec peu de modifications. Il se trouve à l'origine dans le répertoire "/etc/httpd/conf.d". Les seules modifications concernent la clé et les certificats créés au début.
Ces lignes deviennent:
SSLCertificateFile /etc/pki/WEB/certs/cluster.home.pem SSLCertificateKeyFile /etc/pki/WEB/private/cluster.key
- On va définir la base de notre site Web dans l'espace partage. On crée le répertoire "/data/web" avec les droits nécessaires.
chown -R apache:apache /data/web
ATTENTION: Faire cette opération seulement sur la machine active quand l'espace partagé est monté sur "/data".
- On crée ensuite le fichier de configuration du point d'entrée du site.
Voici le contenu de ce fichier que nous avons nomme "root.conf" placé dans le répertoire "/etc/httpd/conf.d.web".
DocumentRoot "/data/web" <Directory "/data/web"> <IfModule mod_authz_core.c> Require all granted </IfModule> </Directory>
- Enfin on crée un script qui sera interprété et affiché dans notre explorateur Web. Il fait référence à PHP pour afficher le nom de la machine hôte active. Ce fichier se nomme "index.php" et est placé dans le répertoire "/data/web".
<!DOCTYPE HTML > <html> <body> <?php $host=gethostname(); printf("Nom du serveur: %s", $host); ?> <br> </body> </html>
Service de base de données - Mariadb
On installe le service de base de données Mariadb Server.
Les fichiers de base de données seront placés dans l'espace partagé. On y crée le répertoire "/data/mysql". On n'oublie pas de lui attribuer les droits:
chown -R mysql:mysql /data/mysql
ATTENTION: Faire cette opération seulement sur la machine active quand l'espace partagé est monté sur "/data".
Dans le fichier de configuration de ce service "/etc/my.conf.d/mariadb-server.cnf", on change la ligne:
datadir=/var/lib/mysql
par:
datadir=/data/mysql
On peut lancer une première fois ce service et le sécuriser et ensuite l'arrêter. La base de données sera initialisée.
Service de messagerie étendu - Postfix
Nous paramétrons ensuite le service de messagerie qui présente tous les services à l'écoute comme expliqué dans l'article Services à l'écoute. Certains services ont un transfert crypté en utilisant les certificats créés au début.
Ne pas oublier d'installer le support du cryptage SSL:
dnf install cyrus-sasl cyrus-sasl-plain
Toute adresse mail de ce serveur seront du domaine "failover.dom" (exemple: pour l'utilisateur "pdupont", "pdupont@failover.dom"). Les utilisateurs correspondront à des comptes Linux et leurs Postoffice se situera dans leur espace.
Voici le fichier de paramètres "/etc/postfix/main.cf":
# paramètres personnalisés relayhost = [192.168.1.100] inet_protocols = ipv4 inet_interfaces = all home_mailbox = Maildir/ myorigin=failover.dom mydestination = failover.dom smtpd_tls_cert_file = /etc/pki/WEB/certs/cluster.home.pem smtpd_tls_key_file = /etc/pki/WEB/private/cluster.key # paramètres d'origine compatibility_level = 3.7 queue_directory = /var/spool/postfix command_directory = /usr/sbin daemon_directory = /usr/libexec/postfix data_directory = /var/lib/postfix mail_owner = postfix 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 meta_directory = /etc/postfix shlib_directory = /usr/lib64/postfix
Et voici le fichier des processus, "/etc/postfix/master.cf":
# ========================================================================== # service type private unpriv chroot wakeup maxproc command + args # (yes) (yes) (no) (never) (100) # ========================================================================== # processus d'origine 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 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 # processus personnalisés à l'écoute smtp inet n - n - - smtpd -o smtpd_tls_security_level=none -o smtpd_relay_restrictions=permit_auth_destination,defer_unauth_destination submission inet n - n - - smtpd # authentification -o smtpd_sasl_auth_enable=yes -o smtpd_sasl_security_options=noanonymous -o smtpd_sasl_type=dovecot -o smtpd_sasl_path=private/auth -o smtpd_client_restrictions=permit_sasl_authenticated,reject -o smtpd_relay_restrictions=permit_sasl_authenticated,reject # cryptage -o smtpd_tls_security_level=may -o smtpd_tls_auth_only=no smtps inet n - n - - smtpd -o smtpd_tls_security_level=encrypt -o smtpd_tls_wrappermode=yes -o smtpd_relay_restrictions=permit_auth_destination,defer_unauth_destination
L'authentification fait appel à Dovecot pour cette vérification.
Concernant le fichier "/etc/aliases", nous avons ajouté à la fin la ligne:
root: adebast@home.dom
Pour un transfert des messages systèmes au serveur de messagerie de gestion.
Service de relevé des messages - Dovecot
Nous nous basons sur la configuration de base présentée dans l'article sur la Dovecot-Configuration du serveur d'accès aux messages. On va y ajouter le support SSL/TLS en utilisant les certificats créés au début et l'authentification demandée par Postfix (ci-dessus).
Nous allons passer en revue des fichiers de configuration.
Contenu du fichier principal "/etc/dovecot/dovecot.conf":
protocols = imap pop3 listen = * !include conf.d.mail/*.conf
Au contraire de la configuration par défaut, nous plaçons les fichiers complémentaires dans un répertoire latéral "/etc/dovecot/conf.d.mail".
Contenu du fichier "/etc/dovecot/conf.d.mail/10-master.conf":
service imap-login { inet_listener imap { port = 143 ssl = no } inet_listener imaps { port = 993 ssl = yes } } service pop3-login { inet_listener pop3 { port = 110 ssl = no } inet_listener pop3s { port = 995 ssl = yes } } service auth { # Postfix smtp-auth unix_listener /var/spool/postfix/private/auth { mode = 0666 user = postfix group = postfix } }
pour la définition des protocols et de la demande d'authentification de la part de Postoffice.
Contenu du fichier "/etc/dovecot/conf.d.mail/10-ssl.conf":
ssl = yes ssl_cert = </etc/pki/WEB/certs/cluster.home.pem ssl_key = </etc/pki/WEB/private/cluster.key ssl_cipher_list = PROFILE=SYSTEM
pour utiliser les certificats créés au début.
Contenu du fichier "/etc/dovecot/conf.d.mail/10-mail.conf":
mail_location = maildir:~/Maildir namespace inbox { inbox = yes }
pour l'emplacement du Postoffice dans l'espace de l'utilisateur Linux.
Contenu du fichier "/etc/dovecot/conf.d.mail/15-mailboxes.conf":
namespace inbox { mailbox Drafts { special_use = \Drafts } mailbox Junk { special_use = \Junk } mailbox Trash { special_use = \Trash } mailbox Sent { special_use = \Sent } mailbox "Sent Messages" { special_use = \Sent } }
Contenu du fichier "/etc/dovecot/conf.d.mail/10-auth.conf":
disable_plaintext_auth = no auth_mechanisms = plain login !include auth-system.conf.ext
Contenu du fichier "/etc/dovecot/conf.d.mail/auth-system.conf.ext":
passdb { driver = pam } userdb { driver = passwd }
pour l'utilisation des utilisateurs Linux en tant que comptes.
Comptes de messagerie
Les comptes de messagerie correspondent aux utilisateurs Linux.
Or le Postoffice de ces comptes se trouvent dans l'espace de ces utilisateurs donc ces utilisateurs doivent se retrouver dans l'espace partagé "/data".
Nous créons donc un répertoire spécifique pour les accueillir "/data/home".
Voici un exemple de création de compte en ligne de commande:
adduser -b /data/home -u 1002 -g users -s /sbin/nologin -c "Dupont Pierre" pdupont
Il faut incrémenter le n° d'utilisateur pour chaque utilisateur (ici "-u 1002").
Et ensuite pour lui attribuer un mot de passe:
passwd pdupont
ATTENTION: Faire ces opérations seulement sur la machine active quand l'espace partagé est monté sur "/data".
Ces comptes doivent être présents sur les deux machines et identiques surtout le n° d'utilisateur et le mot de passe. Comme cette commande "adduser" doit créer l'espace utilisateur dans le répertoire "/data/home", il faut que l'espace partagé soit monté. Autre solution, recopiez les concernées des fichiers "/etc/passwd" et /etc/shadow" d'une machine à l'autre avec un éditeur de texte.
Service de messagerie restreint à l'envoi - Postfix
Sur la machine qui n'a pas la main, on garde un service de messagerie restreint à l'envoi des mails. On utilise la même configuration présentée dan l'article sur la Configuration de base de Pacemaker. Mais il faut la placer autre part. Nous allons la placer dans un nouveau répertoire "/etc/postfix.base". On y place les deux fichiers, "main.cf" et "master.cf".
Pour rappel voici le contenu du fichier "/etc/postfix.base/main.cf":
# nouveaux paramètres relayhost = [192.168.1.110] inet_protocols = ipv4 # paramètres par défaut compatibility_level = 3.7 queue_directory = /var/spool/postfix command_directory = /usr/sbin daemon_directory = /usr/libexec/postfix data_directory = /var/lib/postfix mail_owner = postfix inet_interfaces = localhost 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 meta_directory = /etc/postfix shlib_directory = /usr/lib64/postfix
Et voici le contenu du fichier "/etc/postfix.base/main.cf":
# ========================================================================== # 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 showq unix n - n - - showq error unix - - n - - error retry unix - - n - - error discard unix - - n - - discard local unix - n n - - local lmtp unix - - n - - lmtp anvil unix - - n - 1 anvil scache unix - - n - 1 scache postlog unix-dgram n - n - 1 postlogd
Il faut maintenant créer un service Postfix spécial pour cette configuration restreinte. Dans le répertoire "/usr/lib/systemd/system", on copie le fichier de configuration du service Postfix "postfix.service" dans le fichier "postfix-base.service". On va le modifier en spécifiant cet autre répertoire de configuration (en gras).
[Unit] Description=Postfix Mail Transport Agent After=syslog.target network.target Conflicts=sendmail.service exim.service [Service] Type=forking PIDFile=/var/spool/postfix/pid/master.pid EnvironmentFile=-/etc/sysconfig/network PrivateTmp=true CapabilityBoundingSet=~ CAP_NET_ADMIN CAP_SYS_ADMIN CAP_SYS_BOOT CAP_SYS_MODULE ProtectSystem=true PrivateDevices=true ExecStartPre=-/usr/sbin/restorecon -R /var/spool/postfix/pid/master.pid ExecStartPre=-/usr/libexec/postfix/aliasesdb ExecStartPre=-/usr/libexec/postfix/chroot-update ExecStart=/usr/sbin/postfix -c /etc/postfix.base start ExecReload=/usr/sbin/postfix -c /etc/postfix.base reload ExecStop=/usr/sbin/postfix -c /etc/postfix.base stop [Install] WantedBy=multi-user.target
Il faut recharger la configuration de Systemd:
systemctl daemon-reload
→ retour à Pacemaker - Serveurs en Failover