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, Logstash, 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 et une ingestion syslog optionnelle via Logstash.

Notes

Versions

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

Liens

Les composants d’Elastic

Composants principaux

  • Elasticsearch : moteur distribué de recherche et d’analyse RESTful utilisé pour stocker et interroger les données collectées.
  • Kibana : interface web utilisée pour explorer les données, créer des tableaux de bord, gérer les fonctionnalités de sécurité et configurer Fleet.
  • Fleet : interface de gestion centralisée dans Kibana utilisée pour gérer les Elastic Agents, les intégrations et les politiques d’agents.
  • Fleet Server : composant qui connecte les Elastic Agents à Fleet et coordonne les mises à jour de politiques, les remontées d’état et les actions.
  • Elastic Agent : agent unifié utilisé pour collecter les journaux, les métriques et les événements de sécurité depuis les systèmes supervisés.

Composants optionnels

  • Logstash : pipeline d’ingestion utilisé pour recevoir, transformer, enrichir et transférer les événements vers Elasticsearch.
  • Beats : collecteurs de données légers historiques, tels que Filebeat, Metricbeat et Winlogbeat. Dans les déploiements modernes basés sur Fleet, ils sont généralement remplacés par Elastic Agent.

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
  • Port par défaut de l’API de supervision de Logstash : http://IP_ADDRESS:9600

Installation d’Elastic 9 (Serveur Debian)

Prérequis

  • Installer apt-transport-https et les paquets requis :
root@host:~# apt update && apt install apt-transport-https gnupg curl wget
  • Importer la clé PGP Elastic :
root@host:~# wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg
  • Ajouter 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

  • Installer Elasticsearch et sauvegarder 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'.

-------------------------------------------------------------------------------------------------

Kibana

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

Configuration

Elasticsearch

  • Modifier /etc/elasticsearch/elasticsearch.yml et configurer l’adresse d’écoute réseau :
network.host: 0.0.0.0
  • Démarrer le service Elasticsearch :
root@host:~# systemctl start elasticsearch.service
  • Vérifier 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.0.0",
    "build_flavor" : "default",
    "build_type" : "deb",
    "build_hash" : "112859b85d50de2a7e63f73c8fc70b99eea24291",
    "build_date" : "2025-04-08T15:13:46.049795831Z",
    "build_snapshot" : false,
    "lucene_version" : "10.1.0",
    "minimum_wire_compatibility_version" : "8.18.0",
    "minimum_index_compatibility_version" : "8.0.0"
  },
  "tagline" : "You Know, for Search"
}

Kibana

  • Modifier /etc/kibana/kibana.yml et configurer 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émarrer Kibana :
root@host:~# systemctl start kibana.service
  • Créer 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, coller le jeton d’enrôlement, puis cliquer sur Configure Elastic :
Écran de configuration d’Elastic 9 demandant le jeton d’enrôlement pour configurer le serveur.
  • Générer le code de vérification Kibana et le coller 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écuter le script kibana-encryption-keys et copier 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
  • Ajouter 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érer 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
  • Extraire le certificat et la clé privée nécessaires dans /etc/kibana/ :
root@host:~# cd /etc/kibana/
root@host:~# openssl pkcs12 -in /etc/elasticsearch/certs/http.p12 -out server.crt -clcerts -nokeys
Enter Import Password:592l_UJGSXmliJIvuokDab
root@host:~# openssl pkcs12 -in /etc/elasticsearch/certs/http.p12 -out server.key -nocerts -nodes
Enter Import Password:592l_UJGSXmliJIvuokDab
root@host:~# chown root:kibana /etc/kibana/server.*
root@host:~# chmod g+r /etc/kibana/server.*
  • Modifier /etc/kibana/kibana.yml et 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émarrer 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

Pour que Elasticsearch et Kibana démarrent automatiquement au démarrage du serveur, activer leurs services systemd.

Elasticsearch

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

Kibana

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

Consulter les journaux

Elasticsearch

  • Afficher 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

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

Nous disposons maintenant d’une installation de base Elastic fonctionnelle avec Elasticsearch et Kibana. La prochaine étape consistera à déployer Fleet Server et Elastic Agent afin que les serveurs et équipements réseau puissent transmettre leurs journaux, métriques et événements de sécurité pour une analyse centralisée.