
Utiliser un disque NVMe/TCP servi par un serveur TrueNAS sur une solution de sauvegarde Bareos
Les outils
- TrueNAS Scale Community Edition : Un système d'exploitation à part entière basé sur Debian, libre et open source, qui s'appuie sur OpenZFS pour fournir une solution de stockage puissante. Site officiel
- Bareos : Une solution de sauvegarde libre et open source, certifiée pour SUSE Linux Enterprise, Red Hat Enterprise Linux et Oracle Linux. Multi-plateforme, basée sur un principe de client-serveur, elle repose sur plusieurs composants, le directeur Bareos, un ou plusieurs démons de stockage et les démons de fichiers installés sur les clients à sauvegarder. Site officiel
- NVMe-oF et NVMe/TCP : NVMe-over-Fabrics permet l'accès à des périphériques de stockage NVMe avec un accès à la mémoire flash via un lien réseau tout en maintenant les caractéristiques de faible latence et de haute performance inhérente à la norme NVMe. Parmi les sous-ensembles du NVMe-OF, NVMe/TCP utilise le protocole standard internet TCP/IP. Il peut fonctionner parallèlement au trafic réseau ethernet existant. Cela en fait naturellement le successeur de l'iSCSI. Documentation Red Hat
Dans ce contexte, il faut savoir que l'on n'utilise pas un partage Samba ou NFS et que le client (initiator) verra un disque "physique" servi par le serveur (target)
Objectifs
- Mettre en place un subsystem NVMe-oF sur le serveur TrueNAS
- Connecter le subsystem sur un serveur RHEL 10 pour utiliser un disque NVMe/TCP
- Installer Bareos sur le serveur RHEL
- Sécuriser les connexions entre les services et les clients Bareos
- Installer et sécuriser la WebUI de Bareos
- Mettre en place une sauvegarde journalisée depuis un serveur Debian vers le disque NVMe/TCP
Contexte
- Toutes les machines sont connectées à un réseau LAN 192.168.10.0/24 et se situent dans le domaine home.lab
- 1 serveur TrueNAS 25.10.1 Community Edition avec 2 interfaces réseaux - Hostname = srv-truenas.home.lab - IP = 192.168.10.121
- 1 pool de stockage dédié sur le serveur TrueNAS
- 1 serveur RHEL 10 avec 2 interfaces réseaux pour l'installation de Bareos Director, Storage Daemon et File Daemon - Hostname = srv-bareos.home.lab - IP = 192.168.10.222
- 1 serveur Debian 13 avec un dossier source pour la sauvegarde - Hostname = sambasrv.home.lab - IP = 192.168.10.245
Mise en place de la structure NVMe/TCP
Configuration d'un Lan dédié en /30 pour isoler la connexion NVMe/TCP entre les machines srv-truenas et srv-bareos
Sur le serveur TrueNAS
- Configurer l'interface réseau dédiée au NVMe-oF

Sur le serveur RHEL
- Installer le dépôt EPEL et mettre le système à jour
sudo -i
wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-10.noarch.rpm
dnf install ./epel-release-latest-10.noarch.rpm -y
dnf update -y
Redémarrer la machine si nécessaire
- Configuration du réseau pour la connexion NVMe/TCP
nmcli device status
Identifier l'interface inutilisée
nmcli con add con-name nvme-of type ethernet ifname ens19 ipv4.method manual ipv4.addresses 10.10.10.2/30
nmcli con up nvme-of
- Installer les outils nvme
dnf install nvme-cli -y
- Récupérer le nqn de l'hôte et le copier
cat /etc/nvme/hostnqn
Création du subsystem et connexion depuis l'hôte
Sur le serveur TrueNAS
- Mettre en place le subsystem NVMe-oF avec une sécurisation par clés








Reporter le nqn de l'initiateur et copier les clés qui seront utilisées plus tard dans la configuration de l'hôte


Sélectionner l'adresse ip de l'interface dédiée et le numéro de port voulu (4420 par défaut)

Sur le serveur RHEL
Optimisations des performances pour NVMe/TCP
- Paramètres TCP
sudo -i
vim /etc/sysctl.d/99-nvme-tcp.conf
# Buffer tcp
net.core.rmem_max = 134217728
net.core.wmem_max = 134217728
net.ipv4.tcp_rmem = 4096 87380 134217728
net.ipv4.tcp_wmem = 4096 65536 134217728
# Congestion
net.ipv4.tcp_congestion_control = bbr
# Keepalive
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_intvl = 60
net.ipv4.tcp_keepalive_probes = 10
# Timeouts
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_tw_reuse = 1
sysctl -p /etc/sysctl.d/99-nvme-tcp.conf
- Modifier la valeur de la MTU
nmcli con mod nvme-of 802-3-ethernet.mtu 9000
nmcli con down nvme-of && nmcli con up nvme-of
- Il est possible de modifier les valeurs des ring buffers
ethtool -g ens19
Comparer les valeurs maximales et les valeurs courantes puis ajuster avec:
nmcli con mod nvme-of ethtool.ring-rx valeur-maxi
nmcli con mod nvme-of ethtool.ring-tx valeur-maxi
Connecter le subsystem
- Charger le module nvme-tcp
sudo -i
modprobe nvme-tcp
echo "nvme-tcp" > /etc/modules-load.d/nvmetcp.conf
- Se connecter au subsystem et récupérer la sortie au format json
nvme connect --transport=tcp --traddr=10.10.10.1 --trsvcid=4420 --host-traddr=10.10.10.2 --host-iface=ens19 --hostnqn=nqn.2014-08.org.nvmexpress:uuid:e3b8dde9-d00b-484b-a408-51e82b051053 --nqn=nqn.2011-06.com.truenas:uuid:6468843b-c3ae-466a-8653-5e59b145f8bc:Bareos-Backups --dhchap-secret="DHHC-1:01:e4R562SBhiivYPizPNLtSUovnzTa79vJMLEXwiqMMFmjBq20:" --dhchap-ctrl-secret="DHHC-1:01:qv9hS4Qag8noQFq3Vupov8o8pQC0kTU+36NSpPueGzQUThJ3:" --dump-config
--traddr=10.10.10.1 → ip de l'hôte
--trsvcid=4420 → port d'écoute TrueNAS
--host-iface=ens19 → l'interface à utiliser pour la connexion
--hostnqn → nqn de l'hôte
--nqn → nqn du serveur
--dhchap-secret → la clé de l'hôte générée plus tôt sur le serveur TrueNAS
--dhchap-ctrl-secret → la clé du serveur TrueNAS
--dump-config → renvoi un fichier de configuration au format json
Doit renvoyer
connecting to device: nvme0
[
{
"hostnqn":"nqn.2014-08.org.nvmexpress:uuid:e3b8dde9-d00b-484b-a408-51e82b051053",
"hostid":"e3b8dde9-d00b-484b-a408-51e82b051053",
"dhchap_key":"DHHC-1:01:e4R562SBhiivYPizPNLtSUovnzTa79vJMLEXwiqMMFmjBq20:",
"subsystems":[
{
"nqn":"nqn.2011-06.com.truenas:uuid:6468843b-c3ae-466a-8653-5e59b145f8bc:Bareos-Backups",
"ports":[
{
"transport":"tcp",
"traddr":"10.10.10.1",
"host_traddr":"10.10.10.2",
"host_iface":"ens19",
"trsvcid":"4420",
"dhchap_key":"DHHC-1:01:e4R562SBhiivYPizPNLtSUovnzTa79vJMLEXwiqMMFmjBq20:",
"dhchap_ctrl_key":"DHHC-1:01:qv9hS4Qag8noQFq3Vupov8o8pQC0kTU+36NSpPueGzQUThJ3:"
}
]
}
]
}
]
- Créer le fichier de configuration qui sera utilisé par le service systemd
mkdir /etc/nvme/conf.d && vim /etc/nvme/conf.d/conf-truenas.json
Y copier le contenu de la sortie précédente sans la ligne connecting to device: nvme0
Ce fichier contient les clés dhchap, lui affecter des permissions restrictives
chmod 600 /etc/nvme/conf.d/conf-truenas.json
- Créer un service systemd pour la connexion au subsystem au démarrage de la machine
vim /etc/systemd/system/nvme-truenas.service
[Unit]
Description=Connexion NVMe-oF
After=network-online.target
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/sbin/nvme connect --config=/etc/nvme/conf.d/conf-truenas.json
[Install]
WantedBy=multi-user.target
systemctl enable nvme-truenas.service
Utilisation du disque
- Créer une partition sur le disque
Créer une partition utilisant la totalité de l'espace disque, cela peut se faire avec fdisk
lsblk # identifier le disque ajouté
fdisk /dev/nvme0n1
g (table gpt) → n (nouvelle partition) → enter x3 → w (enregistrer)
Puis la formater avec le système de fichier voulu
mkfs.xfs /dev/nvme0n1p1
- Créer un point de montage avec fstab
mkdir /mnt/backups
blkid | grep nvme0n1p1 | awk '{print $2}'
Copier l'UUID du disque afin de le reporter dans le fichier suivant
vim /etc/fstab
Ajouter cette ligne en adaptant l'UUID
UUID=a2a4bbe3-cca3-455a-bfdf-894af4443771 /mnt/backups xfs defaults,_netdev,x-systemd.requires=nvme-truenas.service 0 0
Redémarrer puis vérifier les logs avec journalctl -b, la présence du disque avec lsblk et le montage avec df
On peut constater que le pool zfs de TrueNAS réserve un petit pourcentage de l'espace disque
Installation de Bareos
- Installer Postgresql
sudo -i
dnf install postgresql-server -y
postgresql-setup --initdb
systemctl enable --now postgresql
- Ajouter le dépôt Bareos
wget https://download.bareos.org/current/EL_10/add_bareos_repositories.sh
chmod +x add_bareos_repositories.sh
./add_bareos_repositories.sh
dnf update -y
- Installer les paquets Bareos
dnf install bareos -y
- Initialiser la base de données et activer des services
su postgres -c /usr/lib/bareos/scripts/create_bareos_database
su postgres -c /usr/lib/bareos/scripts/make_bareos_tables
su postgres -c /usr/lib/bareos/scripts/grant_bareos_privileges
systemctl enable --now bareos-dir.service bareos-sd.service bareos-fd.service
systemctl status bareos-dir.service bareos-sd.service bareos-fd.service
- Définir l'utilisateur
bareoscomme propriétaire du dossier/mnt/backups
chown -R bareos:bareos /mnt/backups
- Installer bareos-webui
dnf install bareos-webui -y
- Configuration SELinux
setsebool -P httpd_can_network_connect on
semanage fcontext -a -t httpd_sys_content_t "/usr/share/bareos-webui(/.*)?"
restorecon -Rv /usr/share/bareos-webui/
- Définir l'utilisateur de la WebUI
bconsole
reload
configure add console name=admin password=admin profile=webui-admin tlsenable=true
quit
Le mot de passe de l'utilisateur admin sera modifié par la suite
- Persmissions sur les dossiers web
chown -R apache:apache /etc/bareos-webui/
chmod 755 /usr/share/bareos-webui/
- Activer et redémarrer Apache
systemctl enable httpd
- Configuration du firewall
firewall-cmd --add-port=8443/tcp --add-port=9101/tcp --add-port=9102/tcp --add-port=9103/tcp --permanent
firewall-cmd --reload
Préparation des connexions sécurisées entre les services et les clients
Sur le serveur RHEL
Génération des certificats
- Création d'un dossier dédié
sudo -i
mkdir /etc/bareos/tls && cd /etc/bareos/tls
- L'autoritée de certification
openssl genrsa -out ca.key 4096
openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 -out ca.crt
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:FR
State or Province Name (full name) []:Normandie
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:homelab
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:Bareos-CA
Email Address []:
- Les certificats et signatures
Pour le serveur
openssl genrsa -out srv-bareos.home.lab.key 2048
openssl req -new -key srv-bareos.home.lab.key -out srv-bareos.home.lab.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:FR
State or Province Name (full name) []:Normandie
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:homelab
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:srv-bareos.home.lab
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
openssl x509 -req -in srv-bareos.home.lab.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out srv-bareos.home.lab.crt -days 3650 -sha256
Certificate request self-signature ok
subject=C=FR, ST=Normandie, L=Default City, O=homelab, CN=srv-bareos.home.lab
Pour le client
openssl genrsa -out sambasrv.home.lab.key 2048
openssl req -new -key sambasrv.home.lab.key -out sambasrv.home.lab.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:FR
State or Province Name (full name) []:Normandie
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:homelab
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:sambasrv.home.lab
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
openssl x509 -req -in sambasrv.home.lab.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out sambasrv.home.lab.crt -days 3650 -sha256
Certificate request self-signature ok
subject=C=FR, ST=Normandie, L=Default City, O=homelab, CN=sambasrv.home.lab
Pour la WebUI
openssl genrsa -out client.key 4096
openssl req -new -key client.key -out client.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:FR
State or Province Name (full name) []:Normandie
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:homelab
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:bareos-webui-client
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 3650 -sha256
cat client.crt client.key > client.pem
- Appliquer les restrictions d'accès sur les dossiers et les fichiers
chown -R bareos:bareos /etc/bareos/tls/
chmod 750 /etc/bareos/tls/
chmod 600 /etc/bareos/tls/*.key
mkdir /etc/bareos-webui/tls
mv /etc/bareos/tls/client.* /etc/bareos-webui/tls/
chown -R apache:apache /etc/bareos-webui/tls/
chmod 600 /etc/bareos-webui/tls/client.key
chmod 640 /etc/bareos-webui/tls/client.pem
- Configuration de la WebUI
vim /etc/bareos-webui/directors.ini
[bareos-dir]
enabled = "yes"
diraddress = "srv-bareos.home.lab"
dirport = 9101
; Set catalog to explicit value if you have multiple catalogs
;catalog = "MyCatalog"
tls_verify_peer = false
server_can_do_tls = true
server_requires_tls = true
client_can_do_tls = true
client_requires_tls = true
cert_file = "/etc/bareos-webui/tls/client.pem"
ca_file = /etc/bareos-webui/tls/ca.crt
allowed_cns = "srv-bareos.home.lab"
Création des mots de passe
- Création d'un dossier dédié
mkdir /etc/bareos/secrets && cd /etc/bareos/secrets
- Création les fichiers contenant les mots de passe
Il est possible de générer des mots de passe aléatoires avec pwgen installable avec dnf install pwgen
pwgen -sy 32
echo '"=c?H888C|WSTVJFShjFr.Rs2[.;-t[0b"' > dir-cons-pass.conf
echo '"p6@{zj?mu;8X;d.oh5\9MMWryOX\3PQ?"' > dir-fd-pass.conf
echo '"KAppsZ?D?\7I8p-v@96@QzE/8]-+v6GB"' > dir-sd-pass.conf
echo '"LfE0EcXU/QoV6OA2QQO4GZpEe+3Ct+YY"' > webui-pass.conf
echo '"3s>Aahb\Ko#__2ddsd7aN&jVsk8D]C_{"' > database-pass.conf
- Sécurisation du dossier et des fichiers
chown -R bareos:bareos /etc/bareos/secrets/
chmod 750 /etc/bareos/secrets/
chmod 600 /etc/bareos/secrets/*
- Changer le mot de passe pour l'utilisateur bareos de la base de données Postgresql
sudo -u postgres psql
postgres=# ALTER USER bareos WITH PASSWORD '3s>Aahb\Ko#__2ddsd7aN&jVsk8D]C_{';
postgres=# \q
Sur le client Debian
- Installation du client Bareos
wget https://download.bareos.org/current/Debian_13/add_bareos_repositories.sh
chmod +x add_bareos_repositories.sh
./add_bareos_repositories.sh
apt update
apt install bareos-client -y
- Copie des fichiers nécessaires à l'authentification
mkdir /etc/bareos/tls/ && mkdir /etc/bareos/secrets/
Copier les fichiers depuis le serveur vers le client de façon que:
Le dossier /etc/bareos/tls/ contienne ceci
-rw-r----- 1 bareos bareos 2009 Feb 2 21:23 ca.crt
-rw-r----- 1 bareos bareos 1647 Feb 2 21:22 sambasrv.home.lab.crt
-rw------- 1 bareos bareos 1708 Feb 2 21:22 sambasrv.home.lab.key
Le dossier /etc/bareos/secrets/ contienne ceci
-rw------- 1 bareos bareos 33 Feb 2 21:28 dir-fd-pass.conf
- Configuration du client Bareos
vim /etc/bareos/bareos-fd.d/client/myself.conf
Client {
Name = sambasrv-fd
Description = "Serveur Samba - Shares"
Maximum Concurrent Jobs = 3
Heartbeat Interval = 60
# Chiffrement TLS
TLS Certificate = /etc/bareos/tls/sambasrv.home.lab.crt
TLS Key = /etc/bareos/tls/sambasrv.home.lab.key
TLS CA Certificate File = /etc/bareos/tls/ca.crt
# Plugins si nécessaire
Plugin Directory = /usr/lib/bareos/plugins
}
vim /etc/bareos/bareos-fd.d/director/bareos-dir.conf
Director {
Name = bareos-dir
Password = @/etc/bareos/secrets/dir-fd-pass.conf
# Chiffrement TLS
TLS Enable = yes
TLS Require = yes
}
systemctl restart bareos-fd
Mise en place d'une configuration sécurisée basique
Sur le serveur RHEL
A partir de ce point, il est préférable d'ouvrir le dossier /etc/bareos du serveur depuis un éditeur de texte (vscode ou alternative) via ssh afin de pouvoir gérer l'édition des fichiers de configuration avec une vue d'ensemble
- Configuration des paramètres de communications chiffrées entre les services
- Renseignement des fichiers de mots de passe pour les connexions entre services
→ /etc/bareos/bareos-dir.d/catalog/MyCatalog.conf
Catalog {
Name = MyCatalog
dbname = "bareos"
dbuser = "bareos"
dbpassword = @/etc/bareos/secrets/database-pass.conf
}
→ /etc/bareos/bconsole.conf
#
# Bareos User Agent (or Console) Configuration File
#
Director {
Name = bareos-dir
address = localhost
Password = @/etc/bareos/secrets/dir-cons-pass.conf
Description = "Bareos Console credentials for local Director"
}
→ /etc/bareos/bareos-dir.d/director/bareos-dir.conf
Director { # define myself
Name = bareos-dir
QueryFile = "/usr/lib/bareos/scripts/query.sql"
Maximum Concurrent Jobs = 10
Password = @/etc/bareos/secrets/dir-cons-pass.conf
Messages = Daemon
Auditing = yes
TLS Enable = yes
TLS Require = yes
TLS Certificate = /etc/bareos/tls/srv-bareos.home.lab.crt
TLS Key = /etc/bareos/tls/srv-bareos.home.lab.key
TLS CA Certificate File = /etc/bareos/tls/ca.crt
}
→ /etc/bareos/bareos-dir.d/client/bareos-fd.conf
Client {
Name = bareos-fd
Description = "Client resource of the Director itself."
Address = 192.168.10.222
Password = @/etc/bareos/secrets/dir-fd-pass.conf
TLS Enable = yes
TLS Require = yes
TLS Certificate = /etc/bareos/tls/srv-bareos.home.lab.crt
TLS Key = /etc/bareos/tls/srv-bareos.home.lab.key
TLS CA Certificate File = /etc/bareos/tls/ca.crt
}
→ /etc/bareos/bareos-dir.d/client/sambasrv-fd.conf
Client {
Name = sambasrv-fd
Description = "Client Debian"
Address = sambasrv.home.lab # IP ou nom DNS si machine distante
Catalog = MyCatalog
Maximum Concurrent Jobs = 5
Password = @/etc/bareos/secrets/dir-fd-pass.conf
TLS Enable = yes
TLS Require = yes
}
→ /etc/bareos/bareos-dir.d/console/admin.conf
Console {
Name = "admin"
Password = @/etc/bareos/secrets/webui-pass.conf
Profile = webui-admin
TLS Enable = yes
TLS Require = yes
}
→ /etc/bareos/bareos-dir.d/storage/truenas.conf
Storage {
Name = truenas
Address = 192.168.10.222
SDPort = 9103
Password = @/etc/bareos/secrets/dir-sd-pass.conf
Device = truenas
Media Type = truenas
Maximum Concurrent Jobs = 5
TLS Enable = yes
TLS Require = yes
TLS Certificate = /etc/bareos/tls/srv-bareos.home.lab.crt
TLS Key = /etc/bareos/tls/srv-bareos.home.lab.key
TLS CA Certificate File = /etc/bareos/tls/ca.crt
}
→ /etc/bareos/bareos-fd.d/client/myself.conf
Client {
Name = bareos-fd
TLS Enable = yes
TLS Require = yes
TLS Certificate = /etc/bareos/tls/srv-bareos.home.lab.crt
TLS Key = /etc/bareos/tls/srv-bareos.home.lab.key
TLS CA Certificate File = /etc/bareos/tls/ca.crt
}
→ /etc/bareos/bareos-fd.d/director/bareos-dir.conf
Director {
Name = bareos-dir
Password = @/etc/bareos/secrets/dir-fd-pass.conf
Description = "Allow the configured Director to access this file daemon."
TLS Enable = yes
TLS Require = yes
TLS Certificate = /etc/bareos/tls/srv-bareos.home.lab.crt
TLS Key = /etc/bareos/tls/srv-bareos.home.lab.key
TLS CA Certificate File = /etc/bareos/tls/ca.crt
}
→ /etc/bareos/bareos-sd.d/director/bareos-dir.conf
Director {
Name = bareos-dir
Password = @/etc/bareos/secrets/dir-sd-pass.conf
Description = "Director, who is permitted to contact this storage daemon."
TLS Enable = yes
TLS Require = yes
TLS Certificate = /etc/bareos/tls/srv-bareos.home.lab.crt
TLS Key = /etc/bareos/tls/srv-bareos.home.lab.key
TLS CA Certificate File = /etc/bareos/tls/ca.crt
}
→ /etc/bareos/bareos-sd.d/storage/bareos-sd.conf
Storage {
Name = bareos-sd
TLS Enable = yes
TLS Require = yes
TLS Certificate = /etc/bareos/tls/srv-bareos.home.lab.crt
TLS Key = /etc/bareos/tls/srv-bareos.home.lab.key
TLS CA Certificate File = /etc/bareos/tls/ca.crt
}
Mise en place des éléments pour créer un job de sauvegarde
- Création d'un device, d'un pool et d'un fileset
→ /etc/bareos/bareos-sd.d/device/truenas.conf
Device {
Name = truenas
Media Type = truenas
Archive Device = /mnt/backups
LabelMedia = yes
Random Access = yes
AutomaticMount = yes
RemovableMedia = no
AlwaysOpen = no
Maximum Concurrent Jobs = 5
}
→ /etc/bareos/bareos-dir.d/pool/truenas-debian.conf
Pool {
Name = truenas-debian
Pool Type = Backup
Recycle = yes
AutoPrune = yes
Volume Retention = 90 days
Label Format = "truenas-debian-"
Storage = truenas
# Recyclage automatique
Recycle Oldest Volume = yes
Recycle Current Volume = yes
}
→ /etc/bareos/bareos-dir.d/fileset/projet.conf
FileSet {
Name = "projet"
Include {
Options {
Signature = SHA256
Compression = LZ4
OneFS = yes
IgnoreCase = yes
}
File = /srv/projet
}
Include {
Options {
wildfile = "*.cache"
Exclude = yes
}
}
}
- Création d'un job pour effectuer une sauvegarde complète tous les dimanche à 22h00 et une sauvegarde incrémentale quotidiennement à 22h00 depuis le client Debian vers le point de montage correspondant au disque NVMe/TCP
→ /etc/bareos/bareos-dir.d/job/sambasrv-backup.conf
Job {
Name = "sambasrv-backup"
Type = Backup
Level = Incremental
Client = sambasrv-fd
FileSet = "projet"
Schedule = "daily-22h"
Storage = truenas
Messages = Standard
Pool = truenas-debian
Priority = 10
Write Bootstrap = "/var/lib/bareos/%c.bsr"
Maximum Concurrent Jobs = 5
}
→ /etc/bareos/bareos-dir.d/schedule/daily-22h.conf
Schedule {
Name = "daily-22h"
Description = "Tous les jours à 22h00"
Run = Full 1st sun at 22:00 # Full le 1er dimanche
Run = Incremental mon-sat at 22:00 # Incrémental du lundi au samedi
}
Redémarrer les services bareos pour recharger la configuration et tester l'accès à la console
systemctl restart bareos-dir bareos-sd bareos-fd
bconsole
*reload
quit
Test du chiffrement des transferts entre les machines
-
Sur le serveur RHEL
openssl s_client -connect localhost:9101 -servername srv-bareos.home.lab -CAfile /etc/bareos/tls/ca.crt -cert /etc/bareos/tls/srv-bareos.home.lab.crt -key /etc/bareos/tls/srv-bareos.home.lab.key -
Sur le client Debian
openssl s_client -connect 192.168.10.222:9101 -servername srv-bareos.home.lab -CAfile /etc/bareos/tls/ca.crt -cert /etc/bareos/tls/sambasrv.home.lab.crt -key /etc/bareos/tls/sambasrv.home.lab.key
Sécurisation des connexions à la WebUI
Sur le serveur RHEL
- Mise en place d'un vhost pour les connexions SSL/TLS
vim /etc/httpd/conf.d/bareos-webui-ssl.conf
Listen 8443 https
<VirtualHost *:8443>
ServerName srv-bareos.home.lab
SSLEngine on
SSLCertificateFile /etc/bareos/tls/srv-bareos.home.lab.crt
SSLCertificateKeyFile /etc/bareos/tls/srv-bareos.home.lab.key
SSLCACertificateFile /etc/bareos/tls/ca.crt
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite PROFILE=SYSTEM
SSLHonorCipherOrder on
<IfModule env_module>
SetEnv "APPLICATION_ENV" "production"
</IfModule>
Alias /bareos-webui /usr/share/bareos-webui/public
<Directory /usr/share/bareos-webui/public>
Options FollowSymLinks
AllowOverride None
# Apache 2.2 (compatibilité)
<IfModule !mod_authz_core.c>
Order deny,allow
Allow from all
</IfModule>
# Apache 2.4
<IfModule mod_authz_core.c>
<IfModule mod_access_compat.c>
Order deny,allow
</IfModule>
Require all granted
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /bareos-webui
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
</IfModule>
<IfModule mod_php.c>
php_flag magic_quotes_gpc off
php_flag register_globals off
</IfModule>
</Directory>
ErrorLog /var/log/httpd/bareos-webui-ssl-error.log
CustomLog /var/log/httpd/bareos-webui-ssl-access.log combined
</VirtualHost>
- Désactiver le vhost http
mv /etc/httpd/conf.d/bareos-webui.conf /etc/httpd/conf.d/bareos-webui.conf.disabled
- Contexte SELinux
setsebool -P httpd_can_network_connect_db on
semanage fcontext -a -t httpd_sys_content_t "/etc/bareos/tls(/.*)?"
restorecon -Rv /etc/bareos/tls/
- Permissions sur les clés pour l'utilisateur apache
setfacl -m u:apache:r /etc/bareos/tls/*.key
- Tester la configuration
apachectl configtest
Syntax OK
- Redémarrer le service httpd
systemctl restart httpd
Test de bon fonctionnement des services et de la sauvegarde
- Depuis la console, il est possible d'effectuer un test sur un job
bconsole
*estimate
The defined Job resources are:
1: backup-bareos-fd
2: BackupCatalog
3: RestoreFiles
4: sambasrv-backup
Select Job resource (1-4): 4
Using Catalog "MyCatalog"
Connecting to Client sambasrv-fd at sambasrv.home.lab:9102
2000 OK estimate files=3,740 bytes=330,751,059
- Se connecter à
https://192.168.10.222:8443/bareos-webui/

Après acceptation du message d'avertissement (certificat auto-signé) on peut se connecter avec le login et mot de passe définis plus haut

On est redirigé automatiquement vers le dashboard

Forcer le lancement du job pour vérifier le lancement de la sauvegarde

- Revenir à la console
bconsole
*messages
05-Feb 13:38 bareos-dir JobId 1: No prior Full backup Job record found.
05-Feb 13:38 bareos-dir JobId 1: No prior or suitable Full backup found in catalog. Doing FULL backup.
05-Feb 13:38 bareos-dir JobId 1: Version: 25.0.2~pre88.4618b0a10 (03 February 2026) Red Hat Enterprise Linux 10.1 (Coughlan)
05-Feb 13:38 bareos-dir JobId 1: Start Backup JobId 1, Job=sambasrv-backup.2026-02-05_13.38.30_17
05-Feb 13:38 bareos-dir JobId 1: Connected Storage daemon at 192.168.10.222:9103, encryption: TLS_AES_256_GCM_SHA384 TLSv1.3
05-Feb 13:38 bareos-dir JobId 1: Encryption: TLS_AES_256_GCM_SHA384 TLSv1.3
05-Feb 13:38 bareos-dir JobId 1: Probing client protocol... (result will be saved until config reload)
05-Feb 13:38 bareos-dir JobId 1: Connected Client: sambasrv-fd at sambasrv.home.lab:9102, encryption: TLS_AES_256_GCM_SHA384 TLSv1.3
05-Feb 13:38 bareos-dir JobId 1: Handshake: Immediate TLS
05-Feb 13:38 bareos-dir JobId 1: Encryption: TLS_AES_256_GCM_SHA384 TLSv1.3
05-Feb 13:38 bareos-sd JobId 1: Using just in time reservation for job 1
05-Feb 13:38 bareos-dir JobId 1: Using Device "JustInTime Device" to write.
05-Feb 13:39 sambasrv-fd JobId 1: Connected Storage daemon at 192.168.10.222:9103, encryption: TLS_AES_256_GCM_SHA384 TLSv1.3
05-Feb 13:39 sambasrv-fd JobId 1: Encryption: TLS_AES_256_GCM_SHA384 TLSv1.3
05-Feb 13:38 bareos-sd JobId 1: Version: 25.0.2~pre88.4618b0a10 (03 February 2026) Red Hat Enterprise Linux 10.1 (Coughlan)
05-Feb 13:39 sambasrv-fd JobId 1: Extended attribute support is enabled
05-Feb 13:39 sambasrv-fd JobId 1: ACL support is enabled
05-Feb 13:38 bareos-sd JobId 1: JustInTime Reservation: Finding drive to reserve.
05-Feb 13:39 sambasrv-fd JobId 1: Version: 25.0.2~pre70.eb042fd99 (22 January 2026) Debian GNU/Linux 13 (trixie)
05-Feb 13:38 bareos-dir JobId 1: Created new Volume "truenas-debian-0001" in catalog.
05-Feb 13:38 bareos-sd JobId 1: Using Device "truenas" (/mnt/backups) to write.
05-Feb 13:38 bareos-sd JobId 1: Moving to end of data on volume "truenas-debian-0001"
05-Feb 13:38 bareos-sd JobId 1: Warning: For Volume "truenas-debian-0001":
The sizes do not match! Volume=314283108 Catalog=0
Correcting Catalog
05-Feb 13:38 bareos-sd JobId 1: Releasing device "truenas" (/mnt/backups).
05-Feb 13:38 bareos-sd JobId 1: Elapsed time=00:00:02, Transfer rate=157.0 M Bytes/second
05-Feb 13:38 bareos-dir JobId 1: Insert of attributes batch table with 3740 entries start
05-Feb 13:38 bareos-dir JobId 1: Insert of attributes batch table done
05-Feb 13:38 bareos-dir JobId 1: Bareos bareos-dir 25.0.2~pre88.4618b0a10 (03Feb26):
OS Information: Red Hat Enterprise Linux 10.1 (Coughlan)
JobId: 1
Job: sambasrv-backup.2026-02-05_13.38.30_17
Backup Level: Full (upgraded from Incremental)
Client: "sambasrv-fd" 25.0.2~pre70.eb042fd99 (22Jan26) Debian GNU/Linux 13 (trixie),debian
FileSet: "projet" 2026-02-05 13:38:30
Pool: "truenas-debian" (From Job resource)
Catalog: "MyCatalog" (From Client resource)
Storage: "truenas" (From Pool resource)
Scheduled time: 05-Feb-2026 13:38:30
Start time: 05-Feb-2026 13:38:32
End time: 05-Feb-2026 13:38:34
Elapsed time: 2 secs
Priority: 10
Allow Mixed Priority: no
FD Files Written: 3,740
SD Files Written: 3,740
FD Bytes Read: 330,751,059 (330.7 MB)
FD Bytes Written: 313,494,538 (313.4 MB)
SD Bytes Written: 314,140,223 (314.1 MB)
Rate: 156747.3 KB/s
Software Compression: 5.2 % (lz4)
VSS: no
Encryption: no
Accurate: no
Volume name(s): truenas-debian-0001
Volume Session Id: 1
Volume Session Time: 1770294648
Last Volume Bytes: 628,565,971 (628.5 MB)
Non-fatal FD errors: 0
SD Errors: 0
FD termination status: OK
SD termination status: OK
Bareos binary info: Bareos community build (UNSUPPORTED): Get professional support from https://www.bareos.com
Job triggered by: User
Termination: Backup OK
No prior or suitable Full backup found in catalog. Doing FULL backup. → le director n'a pas trouvé de sauvegarde initiale et procède à une sauvegarde intégrale
Encryption: TLS_AES_256_GCM_SHA384 TLSv1.3 → les échanges sont chiffrés
La sauvegarde s'est bien déroulée
Revenir sur le dashboard, à la fin de la sauvegarde l'état du job sera affiché

Il est possible de parcourir le contenu de la sauvegarde et de restaurer des fichiers à partir de la WebUI

Test de restauration
Afin de tester le bon déroulement d'une restauration:
- Créer un dossier dédié sur le poste client, ici
/srv/restorsur la machine Debian - Lancer une restauration depuis la sauvegarde vers ce dossier
- Vérifier la présence et les attributs des éléments ainsi restaurés
Sur le serveur Bareos
- Création d'un job pour le test de restauration
→ /etc/bareos/bareos-dir.d/job/test-sambasrv-restor.conf
Job {
Name = "test-sambasrv-restor"
Description = "Test de restauration de la sauvegarde sambasrv"
Type = Restore
Client = sambasrv-fd
FileSet = "projet"
Storage = truenas
Pool = truenas-debian
Messages = Standard
Where = /srv/restor
Maximum Concurrent Jobs = 10
}
bconsole
*reload job=all
quit
- Depuis la WebUI de bareos

Confirmer

Afficher le rapport

Les informations importantes concernant la restauration sont visibles

La restauration a été effectuée avec succès
- Sur le poste client
Comparer un fichier depuis l'emplacement original et depuis le dossier de restauration
cp /srv/projet/blog/user/pages/01.home/fiches-rhcsa/06.fiche-rhcsa-lvm/lvm.png /srv/restor/srv/projet/blog/user/pages/01.home/fiches-rhcsa/06.fiche-rhcsa-lvm/lvm.png
Ou comparer les checksums
md5sum /srv/projet/blog/user/pages/01.home/fiches-rhcsa/06.fiche-rhcsa-lvm/lvm.png
31bd96635c4120abe3e771a423f61cd6 /srv/projet/blog/user/pages/01.home/fiches-rhcsa/06.fiche-rhcsa-lvm/lvm.png
md5sum /srv/restor/srv/projet/blog/user/pages/01.home/fiches-rhcsa/06.fiche-rhcsa-lvm/lvm.png
31bd96635c4120abe3e771a423f61cd6 /srv/restor/srv/projet/blog/user/pages/01.home/fiches-rhcsa/06.fiche-rhcsa-lvm/lvm.png
- Vue du dashboard

La différence de taille entre la sauvegarde et la restauration vient de la compression de la sauvegarde
Conclusion
- L'infrastructure est composée d'un système de sauvegarde fiable, efficace et configurable à souhaits via un système déclaratif (as code)
- Les performances offertes par NVMe/TCP, selon le matériel utilisé pour les connexions réseaux, permettent de réduire les temps de transferts et de restaurer rapidement au besoin
- Le chiffrement des connexions est assuré sur l'intégralité des communications entre les services et les machines
- Les possibilités offertes par Bareos sont extrêmement larges et nous n'avons vu qu'une infime partie de ce que cet outil peut offrir dans ce lab