rss logo

Déployer Elastic 9 avec Elasticsearch, Kibana, Fleet Server et Elastic Agent sur Debian

Logo Elastic

Dans cet article, nous allons voir comment installer Elastic, une solution SIEM (Security Information and Event Management) développée par Elastic N.V.. Un SIEM est une plateforme de cybersécurité qui permet de centraliser et d’analyser les journaux et les événements collectés depuis plusieurs équipements d’un réseau. Il aide les équipes de sécurité à détecter les activités anormales, à investiguer les incidents et à générer des alertes en temps réel.

Nous allons déployer le cœur de la suite Elastic, incluant Elasticsearch et Kibana, sur un serveur Debian dans un environnement on-premises. Pour un usage de base, aucune licence commerciale n’est nécessaire, car les déploiements Elastic auto-hébergés peuvent fonctionner avec la licence Basic gratuite. Toutefois, pour les environnements de production, je recommande aux entreprises d’évaluer une souscription commerciale afin de bénéficier du support officiel et de fonctionnalités supplémentaires.

J’avais précédemment publié un article couvrant l’installation d’Elastic Stack version 8 (disponible ici). Avec la sortie d’Elastic Stack version 9, je mets à jour ce guide afin de refléter le processus d’installation actuel et d’introduire l’architecture moderne basée sur Fleet. Dans cette architecture, Fleet Server agit comme plan de contrôle entre Kibana Fleet et les Elastic Agents installés sur les systèmes que nous voulons superviser. Il gère les politiques des agents, collecte leurs informations d’état et coordonne les actions sur les agents enrôlés.

Architecture de la suite Elastic

  • L’architecture de la suite Elastic est composée des éléments suivants :
    • Elasticsearch : moteur distribué de stockage, de recherche et d’analyse en temps réel. Il stocke les données collectées et les rend disponibles pour des recherches, corrélations et analyses rapides.
    • Kibana : plateforme open source d’analyse et de visualisation conçue pour fonctionner avec Elasticsearch. Elle fournit l’interface web permettant de rechercher, consulter et interagir avec les données stockées dans les index Elasticsearch.
    • Fleet : interface de gestion centralisée disponible dans Kibana. Elle permet de définir et de gérer les politiques d’agents, les intégrations et les paramètres de configuration des systèmes supervisés.
    • Fleet Server : couche de communication entre Kibana Fleet et les Elastic Agents enrôlés. Il distribue les politiques, collecte les informations d’état des agents et coordonne les actions sur les équipements supervisés.
    • Elastic Agent : agent installé sur les systèmes que nous voulons superviser. Il collecte les journaux, les métriques et les événements liés à la sécurité, puis les envoie vers la suite Elastic conformément à la politique assignée depuis Fleet.
Architecture Elastic 9 pour la centralisation des journaux avec Elasticsearch, Kibana, Fleet Server, Elastic Agent, des serveurs Linux et Windows supervisés, des équipements réseau Cisco et un tableau de bord administrateur.
Architecture Elastic 9 pour la centralisation des journaux avec Elasticsearch, Kibana, Fleet Server, Elastic Agent.

Notes

Versions

  • OS : Debian 13
  • Elastic Stack : 9.x
  • Elasticsearch : 9.x
  • Kibana : 9.x
  • Elastic Agent : 9.x

Liens

Ports utilisés

  • Port HTTPS par défaut d’Elasticsearch : https://IP_ADDRESS:9200
  • Accès web à Kibana : https://IP_ADDRESS:5601 si TLS est activé
  • Port HTTPS par défaut de Fleet Server : https://IP_ADDRESS:8220

Installation d’Elastic 9 (Serveur Debian)

Prérequis

  • Installez apt-transport-https et les paquets requis :
root@host:~# apt update && apt install apt-transport-https gnupg curl wget sudo
  • Importez la clé PGP Elastic :
root@host:~# wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg
  • Ajoutez le dépôt APT Elastic 9.x :
root@host:~# echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/9.x/apt stable main" | tee /etc/apt/sources.list.d/elastic-9.x.list

Elasticsearch

  • Installez Elasticsearch et sauvegardez le mot de passe généré du superutilisateur elastic :
root@host:~# apt update && apt install elasticsearch
  • À la fin de l’installation, Elasticsearch affiche les informations d’auto-configuration de la sécurité :
[…]
--------------------------- Security autoconfiguration information ------------------------------

Authentication and authorization are enabled.
TLS for the transport and HTTP layers is enabled and configured.

The generated password for the elastic built-in superuser is : elastic_password;)

If this node should join an existing cluster, you can reconfigure this with
'/usr/share/elasticsearch/bin/elasticsearch-reconfigure-node --enrollment-token <token-here>
after creating an enrollment token on your existing cluster.

You can complete the following actions at any time:

Reset the password of the elastic built-in superuser with 
'/usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic'.

Generate an enrollment token for Kibana instances with 
 '/usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana'.

Generate an enrollment token for Elasticsearch nodes with 
'/usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s node'.

-------------------------------------------------------------------------------------------------
### NOT starting on installation, please execute the following statements to configure elasticsearch service to start automatically using systemd
 sudo systemctl daemon-reload
 sudo systemctl enable elasticsearch.service
### You can start elasticsearch service by executing
 sudo systemctl start elasticsearch.service
  • Rechargez la configuration du gestionnaire systemd :
root@host:~# systemctl daemon-reload
  • Activez le service Elasticsearch afin qu’il démarre automatiquement au démarrage du serveur :
root@host:~# systemctl enable elasticsearch.service
  • Démarrez le service Elasticsearch :
root@host:~# systemctl start elasticsearch.service

💡 Note : Vous pouvez modifier manuellement le mot de passe de l’utilisateur elastic avec la commande suivante : /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic -i.

Kibana

  • Installez Kibana :
root@host:~# apt update && apt install kibana

Configuration

Elasticsearch

  • Modifiez /etc/elasticsearch/elasticsearch.yml et configurez l’adresse d’écoute réseau :
network.host: 0.0.0.0
  • Démarrez le service Elasticsearch :
root@host:~# systemctl start elasticsearch.service
  • Vérifiez qu’Elasticsearch est démarré et répond en HTTPS :
root@host:~# curl --cacert /etc/elasticsearch/certs/http_ca.crt -u elastic https://localhost:9200
Enter host password for user 'elastic': elastic_password;)
{
  "name" : "std",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "StdgreaTBanDKphU4S0ceg",
  "version" : {
    "number" : "9.4.1",
    "build_flavor" : "default",
    "build_type" : "deb",
    "build_hash" : "3c7c6027c5769d860d87448e2749f4c550a239da",
    "build_date" : "2026-05-08T10:08:29.383338563Z",
    "build_snapshot" : false,
    "lucene_version" : "10.4.0",
    "minimum_wire_compatibility_version" : "8.19.0",
    "minimum_index_compatibility_version" : "8.0.0"
  },
  "tagline" : "You Know, for Search"
}

Kibana

  • Modifiez /etc/kibana/kibana.yml et configurez l’adresse d’écoute réseau. Dans ce lab, Kibana écoute sur toutes les interfaces réseau. HTTPS sera activé plus loin dans ce guide :
server.host: "0.0.0.0"
server.publicBaseUrl: "http://X.X.X.X:5601"
  • Démarrez Kibana :
root@host:~# systemctl start kibana.service
  • Créez un jeton d’enrôlement Kibana depuis le serveur Elasticsearch :
root@host:~# /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana
eyJ2ZXIiOiI4LjEuMiIsImFkciI6WyIxOTIuMTY4LjEuNjY6OTIwMCJdLCJmZ3IiOiJmYzdiZmFmMjNmODEzN2M1NmY4YTg1NGMxNTdjMWFkYTNiZDdiOGM4NTE4YTZhNmI3wWNiYzBkNzc0ZTRjNzc1Iiwia2V5Ijoib1ZBTkVJQUIxWVNBT0BiUWVsUVc6cEU1WXF3U1FTUENjcFFaZUJvTGtKdyJ0
  • Depuis Firefox, ouvrir http://X.X.X.X:5601, collez le jeton d’enrôlement, puis cliquez sur Configure Elastic :
Écran de configuration d’Elastic 9 demandant le jeton d’enrôlement pour configurer le serveur.
  • Générez le code de vérification Kibana et le collez dans la page de configuration :
root@host:~# /usr/share/kibana/bin/kibana-verification-code
Your verification code is:  139 477
Écran de vérification Kibana d’Elastic 9 demandant le code serveur pour l’authentification.
  • Vous pouvez maintenant vous connecter à Kibana avec le compte superutilisateur intégré elastic :
Écran de connexion Elastic 9 avec les champs nom d’utilisateur et mot de passe.

Sécurisation de Kibana

Depuis la version 8, Elasticsearch active automatiquement les fonctionnalités de sécurité pendant l’installation, notamment l’authentification et le chiffrement TLS pour les couches HTTP et transport.

Cependant, Kibana reste accessible en HTTP par défaut. Dans cette section, nous allons activer HTTPS pour l’interface web Kibana.

  • Exécutez le script kibana-encryption-keys et copiez les valeurs générées :
root@host:~# /usr/share/kibana/bin/kibana-encryption-keys generate
## Kibana Encryption Key Generation Utility

The 'generate' command guides you through the process of setting encryption keys for:

xpack.encryptedSavedObjects.encryptionKey
    Used to encrypt stored objects such as dashboards and visualizations
    https://www.elastic.co/guide/en/kibana/current/xpack-security-secure-saved-objects.html#xpack-security-secure-saved-objects

xpack.reporting.encryptionKey
    Used to encrypt saved reports
    https://www.elastic.co/guide/en/kibana/current/reporting-settings-kb.html#general-reporting-settings

xpack.security.encryptionKey
    Used to encrypt session information
    https://www.elastic.co/guide/en/kibana/current/security-settings-kb.html#security-session-and-cookie-settings


Already defined settings are ignored and can be regenerated using the --force flag.  Check the documentation links for instructions on how to rotate encryption keys.
Definitions should be set in the kibana.yml used configure Kibana.

Settings:
xpack.encryptedSavedObjects.encryptionKey: caeb7879368e3dd66d7302f6810daec1
xpack.reporting.encryptionKey: c1c89f500966ac710f7fa5eaf2939976
xpack.security.encryptionKey: e1458d710ffb321e4a4f4eb792c78b2b
  • Ajoutez les clés de chiffrement générées précédemment dans /etc/kibana/kibana.yml :
[…]
xpack.encryptedSavedObjects.encryptionKey: caeb7879368e3dd66d7302f6810daec1
xpack.reporting.encryptionKey: c1c89f500966ac710f7fa5eaf2939976
xpack.security.encryptionKey: e1458d710ffb321e4a4f4eb792c78b2b
  • Récupérez le mot de passe sécurisé du keystore http.p12 :
root@host:~# /usr/share/elasticsearch/bin/elasticsearch-keystore show xpack.security.http.ssl.keystore.secure_password
592l_UJGSXmliJIvuokDab
  • Placez-vous dans le répertoire /etc/kibana/ :
root@host:~# cd /etc/kibana/
  • Extrayez le certificat TLS depuis le keystore Elasticsearch http.p12 :
root@host:~# openssl pkcs12 -in /etc/elasticsearch/certs/http.p12 -out server.crt -clcerts -nokeys
Enter Import Password:592l_UJGSXmliJIvuokDab
  • Extrayez la clé privée TLS depuis le même keystore :
root@host:~# openssl pkcs12 -in /etc/elasticsearch/certs/http.p12 -out server.key -nocerts -nodes
Enter Import Password:592l_UJGSXmliJIvuokDab
  • Définissez root comme propriétaire des fichiers et kibana comme groupe :
root@host:~# chown root:kibana /etc/kibana/server.*
  • Autorisez le groupe kibana à lire les fichiers du certificat et de la clé privée :
root@host:~# chmod g+r /etc/kibana/server.*
  • Modifiez /etc/kibana/kibana.yml pour activer HTTPS pour l’interface web Kibana :
server.ssl.enabled: true
server.ssl.certificate: /etc/kibana/server.crt
server.ssl.key: /etc/kibana/server.key
  • Redémarrez le service Kibana :
root@host:~# systemctl restart kibana.service

Attendre quelques secondes, puis se connecter à Kibana à l’adresse https://X.X.X.X:5601.

Démarrage automatique

💡 Note : Elasticsearch a déjà été activé lors de l’étape d’installation. Pour vous assurer que les deux services démarrent automatiquement au démarrage du serveur, activez également le service Kibana.

Elasticsearch

  • Activez le service Elasticsearch :
root@host:~# systemctl enable elasticsearch.service

Kibana

  • Activez le service Kibana :
root@host:~# systemctl enable kibana.service

Fleet Server

Maintenant que Elasticsearch et Kibana sont opérationnels, nous pouvons installer Fleet Server. Comme expliqué précédemment, Fleet Server sert de couche de communication entre Kibana Fleet et les Elastic Agents enrôlés. Il permet de gérer les politiques des agents, de distribuer les mises à jour de configuration et de collecter les informations d’état des agents.

  • Ouvrez le menu principal, puis accédez à Management → Fleet :
Menu de navigation Kibana affichant la section Management et l’option Fleet utilisée pour gérer les Elastic Agents et Fleet Server.
Accès à l’interface de gestion Fleet depuis le menu principal de Kibana.
  • Cliquez sur Add Fleet Server pour lancer l’assistant de configuration de Fleet Server :
Page Fleet de Kibana affichant le bouton Add Fleet Server utilisé pour lancer l’assistant de configuration de Fleet Server.
Lancement de la configuration de Fleet Server depuis l’interface Kibana Fleet.
  • Complétez la configuration de Fleet Server :
    • Indiquez un nom pour le Fleet Server et spécifiez l’URL que les agents enrôlés utiliseront pour le joindre. Dans ce lab, comme tous les composants sont installés sur le même serveur, cette URL pointe vers l’adresse IP du serveur Elastic Stack.
    • Sélectionnez la plateforme Linux x86_64, puis copiez les commandes d’installation générées automatiquement.
    • Exécutez les commandes générées depuis un shell root sur le serveur qui hébergera Fleet Server.
    • Après quelques instants, Kibana devrait détecter le nouveau Fleet Server. Cliquez sur Continue enrolling Elastic Agent, puis sur Close.
Assistant de configuration Fleet Server dans Kibana affichant le nom du Fleet Server, la configuration de l’URL, la sélection de la plateforme Linux x86_64 et la confirmation de l’enrôlement réussi de Fleet Server.
Configuration et enrôlement de Fleet Server depuis l’interface Kibana Fleet.
  • Ci-dessous, un exemple de commande d’installation générée par l’interface web de Kibana. Saisissez Y lorsque le script vous demande de poursuivre l’installation :
root@host:~# curl -L -O https://artifacts.elastic.co/downloads/beats/elastic-agent/elastic-agent-9.4.1-linux-x86_64.tar.gz
tar xzvf elastic-agent-9.4.1-linux-x86_64.tar.gz
cd elastic-agent-9.4.1-linux-x86_64
sudo ./elastic-agent install \
  --fleet-server-es=https://192.168.1.10:9200 \
  --fleet-server-service-token=ABCAAWVsYXN0aWMvZmalZXQtc2VydmVyL5Rva2VuLDEADbEE5RocKSQ3MjM6SGxBajNhSkJSNEdHZ25jOHZNM3ZYUQ \
  --fleet-server-policy=fleet-server-policy \
  --fleet-server-es-ca-trusted-fingerprint=deadbee540c353325d0085a67e1bb2a8ced823f9ae84107b087352754a9a7753 \
  --fleet-server-port=8220 \
  --install-servers
[…]
Elastic Agent will be installed at /opt/Elastic/Agent and will run as a service. Do you want to continue? [Y/n]:Y
[…]
Elastic Agent has been successfully installed.

Vous disposez maintenant d’un Fleet Server opérationnel, prêt à gérer les Elastic Agents enrôlés.

Consultez les journaux

Elasticsearch

  • Affichez les journaux depuis le fichier elasticsearch.log :
root@host:~# tail /var/log/elasticsearch/elasticsearch.log
  • Ou utiliser la commande journalctl :
root@host:~# journalctl --unit elasticsearch

Kibana

  • Affichez les journaux depuis le fichier kibana.log :
root@host:~# tail /var/log/kibana/kibana.log
  • Ou utilisez la commande journalctl :
root@host:~# journalctl --unit kibana

Nous disposons maintenant d’un déploiement Elastic opérationnel avec Elasticsearch, Kibana et Fleet Server. L’étape suivante consiste à enrôler des Elastic Agents sur les systèmes à superviser afin qu’ils puissent transmettre les journaux, les métriques et les événements de sécurité pour une analyse centralisée.