Ce document contient les livrables issus de la mise en place du service
Prometheus,GrafanaetAlertsManager. L’objectif est de pouvoir disposer de services, concernant la collecte de métriques, l’exposition de dashboards et la génération d’alertes avec notifications par mail. Côté architecture, un reverse proyxnginxsera en frontal pour porter le certficat wildcard*.ng-hl.comet redirigera vers le serveur adéquat. Pour le niveau de maturité niveau 2, le chiffrement TLS sera appliqué uniquement au niveau de l’exposition vers l’extérieur à savoir lenginx. Concernant le niveau 3, il faudra mettre en place des communications chiffrés via TLS au travers de certificats fournit par une PKI interne pour adopter le principe d’une architecture 0 trust.
1. Création de la VM
Nous allons utiliser le template debian12-template créé lors du chapitre 4. Sur Proxmox on crée un clone complet à partir de ce template. Voici les caractéristiques de la VM :
| OS | Hostname | Adresse IP | Interface réseau | vCPU | RAM | Stockage |
|---|---|---|---|---|---|---|
| Debian 12.10 | mail-core | 192.168.100.241 | vmbr1 (core) | 1 | 1024 | 20Gio |
Il faut également penser à activer la sauvegarde automatique de la VM sur Proxmox en l’ajoutant au niveau de la politique de sauvegarde précédemment créée.
2. Configuration de l’OS via Ansible
Les informations concernant Ansible sont disponibles au niveau des chapitres 7 et 8.
A présent, le playbook et les rôles ayant pour objectif d’appliquer la configuration de base de l’OS sont disponibles. Il faut se connecter en tant que l’utilisateur ansible sur le serveur ansible-core.homelab puis ajouter l’hôte mail-core.homelab au niveau du fichier d’inventaire /opt/ansible/envs/100-core/00_inventory.yml avec les éléments suivants
mail-core.homelab:
ip: 192.168.100.241
hostname: mail-core
Pour exécuter le playbook, il faut lancer la commande suivante
ansible-playbook -i envs/100-core/00_inventory.yml -l 'mail-core.homelab,' playbooks/00_config_vm.yml
Voici le récapitulatif
Mise à jour de l’inventaire
00_inventory.ymlpour ajoutermail-coredans le groupeprometheus_clients.
Exécution du playbook pour la mise en place de Node Exporter. Il faut également mettre à jour la configuration de prometheus-core pour ajouter cet host.
ansible-playbook playbooks/01_prometheus_node_exporter.yml -l "mail-core.homelab"
3. Installation et configuration de postfix via Ansible
Afin de commencer à intégrer le principe d’IaC déclarative et reproductible, je choisi d’installer et de configurer
postfixpour l’instancemail-corevia un playbook Ansible.
Création du nouveau rôle serveur_mail
ansible-galaxy init roles/serveur_mail
Voici le contenu du fichier tasks/main.yml
# SPDX-License-Identifier: MIT-0
---
# tasks file for roles/serveur_mail
- name: Installation de Postfix et rsyslog
ansible.builtin.apt:
name:
- postfix
- rsyslog
state: present
update_cache: true
- name: Déploiement de la configuration main.cf
ansible.builtin.template:
src: main.cf.j2
dest: /etc/postfix/main.cf
owner: root
group: root
mode: '0644'
notify: Redémarrer Postfix
- name: Application des permissions sur les fichiers sasl_passwd et le hash
ansible.builtin.file:
path: "{{ item }}"
owner: root
group: root
mode: '0600'
loop:
- /etc/postfix/sasl_passwd
- /etc/postfix/sasl_passwd.db
notify:
- Redémarrer Postfix
- name: Déploiement de la configuration rsyslog
ansible.builtin.template:
src: rsyslog.d_postfix.conf.j2
dest: /etc/rsyslog.d/postfix.conf
owner: root
group: root
mode: '0644'
notify: Redémarrer rsyslog
- name: Exécution et activation au démarrage du service rsyslog
ansible.builtin.systemd:
name: rsyslog
state: started
enabled: true
- name: Exécution et activation au démarrage du daemon postfix
ansible.builtin.systemd:
name: postfix
state: started
enabled: true
Voici le contenu du fichier defaults/main.yml
# SPDX-License-Identifier: MIT-0
---
# defaults file for roles/serveur_mail
serveur_mail_postfix_myhostname: "mail-core.homelab"
serveur_mail_postfix_mydomain: "homelab"
serveur_mail_postfix_mynetworks: "192.168.100.0/24"
serveur_mail_postfix_relayhost: "[smtp.gmail.com]:587"
serveur_mail_postfix_relay_user: "<compte_gmail>"
serveur_mail_postfix_relay_password: "<password>"
Voici le contenu du fichier handlers/main.yml
# SPDX-License-Identifier: MIT-0
---
# handlers file for roles/serveur_mail
- name: Redémarrer rsyslog
ansible.builtin.systemd:
name: rsyslog
state: restarted
- name: Redémarrer Postfix
ansible.builtin.systemd:
name: postfix
state: restarted
Voici le contenu du fichier templates/main.cf.j2
# See /usr/share/postfix/main.cf.dist for a commented, more complete version
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
append_dot_mydomain = no
readme_directory = no
compatibility_level = 3.6
# TLS parameters
smtp_use_tls = yes
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_tls_security_level=may
smtp_tls_CApath=/etc/ssl/certs
smtp_tls_security_level=may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
# SASL
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
# Host & domain
myhostname = {{ serveur_mail_postfix_myhostname }}
mydomain = {{ serveur_mail_postfix_mydomain }}
myorigin = $mydomain
mydestination = $myhostname, {{ serveur_mail_postfix_mydomain }}, localhost.$mydomain, localhost
relayhost = {{ serveur_mail_postfix_relayhost }}
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 {{ serveur_mail_postfix_mynetworks }}
# Mailbox & protocol
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = loopback-only
inet_protocols = all
# Aliases
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
Voici le contenu du fichier rsyslog.d_postfix.conf.j2
mail.* -/var/log/mail.log
Création du playbook 11_serveur_mail.yml
---
- name: Installation et configuration du serveur de mail
hosts: serveur_mail
become: true
roles:
- serveur_mail
Mise à jour de l’inventaire avec le groupe serveur_mail
serveur_mail:
hosts:
mail-core.homelab:
Afin de vérifier que l’on applique bien une syntaxe cohérente et les bonnes pratiques Ansible, on exécute le linter ansible-lint sur notre nouveau playbook.
ansible-lint playbooks/11_serveur_mail.yml
Passed: 0 failure(s), 0 warning(s) on 6 files.
Application du playbook sur l’instance mail-core
ansible-playbook -i envs/100-core/00_inventory.yml -l 'mail-core.homelab,' playbooks/11_serveur_mail.yml
Voici le récapitulatif du passage du playbook
TASKS RECAP **********************************************************************************************************************
mercredi 13 août 2025 22:16:27 +0200 (0:00:00.251) 0:00:03.769 *********
===============================================================================
Gathering Facts ----------------------------------------------------------------------------------------------------------- 0.93s
serveur_mail : Installation de Postfix et rsyslog ------------------------------------------------------------------------- 0.88s
serveur_mail : Déploiement de la configuration main.cf -------------------------------------------------------------------- 0.42s
serveur_mail : Exécution et activation au démarrage du service rsyslog ---------------------------------------------------- 0.39s
serveur_mail : Déploiement de la configuration rsyslog -------------------------------------------------------------------- 0.36s
serveur_mail : Déploiement de la configuration master.cf ------------------------------------------------------------------ 0.29s
serveur_mail : Redémarrer rsyslog ----------------------------------------------------------------------------------------- 0.25s
serveur_mail : Exécution et activation au démarrage du daemon postfix ----------------------------------------------------- 0.24s
4. Test de l’envoi de mail vers l’extérieur
Installation du paquet mailutils qui est un client de messagerie en CLI.
sudo apt install mailutils -y
Envoi d’un mail de test vers l’extérieur
echo "Test depuis mail-core" | mail -s "Test mail" <adresse_mail>
On peut vérifier les logs du daemon postfix au niveau de ce fichier /var/log/mail.log