Ceci est une ancienne révision du document !
Mise en place d'un SIEM avec ELK
Introduction
Cette procédure permet de mettre en place un SIEM grâce à la suite ELK : le combo d'ElasticSearch, LogStash, Kibana et les beats.
Topologie du LAB
Pré-requis
Ici nous aurons besoin de :
- 1 machine sous Linux qui servira de serveur ELK
- 1 machine cliente sous Windows qui servira à tester les beats
- 1 machine cliente sous Linux qui servira à tester l'envoi de logs
Instructions
Installation d'ElasticSearch
Pour installer la suite ELK, il faut passer par le dépôt officiel d'Elastic. On va donc commencer par ajouter sa clé de signature.
- Sous Debian/Ubuntu commencer par installer les paquets
apt-transport-httpsetgnupg2:
apt-get install apt-transport-https gnupg2
- Puis ajouter la clé :
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg
- Sous RedHat/CentOS/Fedora, c'est différent :
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
Ensuite, on ajoute le dépôt dans la liste du système :
- Pour Debian/Ubuntu, entrer la commande suivante :
echo "deb https://artifacts.elastic.co/packages/8.x/apt stable main" | tee -a /etc/apt/sources.list.d/elastic-8.x.list
- Pour les systèmes RedHat/CentOS/Fedora, créer un fichier nommé
elastic.repodans le répertoire/etc/yum.repos.dcontenant :
[elasticsearch] name=Elasticsearch repository for 7.x packages baseurl=https://artifacts.elastic.co/packages/7.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=0 autorefresh=1 type=rpm-md
Maintenant, on peut mettre à jour la liste de paquets disponibles et installer ElasticSearch à l'aide du gestionnaire de paquets integré (apt ou yum) :
- Pour les distributions Debian :
apt-get update -y && apt-get install elasticsearch
- Pour les distributions RedHat :
sudo yum install --enablerepo=elasticsearch elasticsearch
De mon côté, sous Debian, ça donne :
Afin de vérifier qu'ElasticSearch fonctionne correctement, le démarrer (il peut être long) :
systemctl start elasticsearch
Si celui-ci ne se lance pas, il est possible de regarder plus précisement pourquoi dans ses logs :
journalctl -f -u elasticsearch
Une fois le service ElasticSearch actif, utiliser la commande curl ou un navigateur web pointant à l'adresse localhost:9200 :
Le service devrait alors répondre :
Pour terminer l'installation d'ElasticSearch, l'activer au lancement de la machine :
systemctl enable elasticsearch
Configuration d'Elasticsearch
La sécurité est configurée par défaut dans Elasticsearch. Néanmoins, on va devoir adapter la configuration à notre cas d'usage.
Si besoin, commencer par réinitialiser le mot de passe du compte elastic (l'administrateur par défaut) et le noter dans un coin :
/usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic
Ouvrir la configuration d'Elasticsearch et remplir/décommenter les paramètres suivants :
- cluster.name (optionnel) : nom du cluster
- node.name : nom du nœud
- network.host : adresse IP du nœud
- http.port : port utilisé par elasticsearch (par défaut 9200)
- cluster.initial_master_nodes : recopier le nom du nœud
La configuration doit ressembler à ceci (j'ai volontairement retiré les lignes inutiles) :
# Use a descriptive name for your cluster: cluster.name: project-one # Use a descriptive name for the node: node.name: master-node-1.lab # Path to directory where to store the data (separate multiple locations by comma): path.data: /var/lib/elasticsearch # Path to log files: path.logs: /var/log/elasticsearch # By default Elasticsearch is only accessible on localhost. Set a different # address here to expose this node on the network: network.host: 172.16.10.1 # By default Elasticsearch listens for HTTP traffic on the first free port it # finds starting at 9200. Set a specific HTTP port here: http.port: 9200 # Enable security features xpack.security.enabled: true xpack.security.enrollment.enabled: true # Enable encryption for HTTP API client connections, such as Kibana, Logstash, and Agents xpack.security.http.ssl: enabled: true keystore.path: certs/http.p12 # Enable encryption and mutual authentication between cluster nodes xpack.security.transport.ssl: enabled: true verification_mode: certificate keystore.path: certs/transport.p12 truststore.path: certs/transport.p12 # Create a new cluster with the current node only # Additional nodes can still join the cluster later cluster.initial_master_nodes: ["master-node-1.lab"] # Allow HTTP API connections from anywhere # Connections are encrypted and require user authentication http.host: 0.0.0.0
Redémarrer le service elasticsearch, la connexion HTTPS à elasticsearch doit être fonctionnelle.
Ajout de nœuds au cluster (facultatif)
Pour ajouter des nœuds au cluster, on doit d'abord générer un token pour le nœud principal :
/usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s node
Copier le token et le convertir en texte pour vérifier que l'adresse IP et la version d'elasticsearch sont corrects :
echo 'token' | base64 -d
Si ce n'est pas le cas, désactiver l'interface réseau problématique, redémarrer ES et regénérer le token en ajoutant un -f à la commande précédente.
Installer Elasticsearch sur le nouveau nœud et configurer les paramètres suivants dans /etc/elasticsearch/elasticsearch.yml :
- cluster.name : nom du cluster (le même que sur le 1er nœud)
- node.name : nom du nœud
- network.host : adresse IP du nœud
- http.port : port 9200 par défaut (décommenter la ligne)
Puis, utiliser la commande suivante pour associer le nœud au cluster en lui indiquant le token du premier nœud :
usr/share/elasticsearch/bin/elasticsearch-reconfigure-node --enrollment-token token
Répondre ypour confirmer puis démarrer Elasticsearch à la suite de l'opération. Le nœud est ajouté au cluster.
On peut lancer les requêtes curl suivantes sur le nouveau nœud avec le compte admin du premier pour valider que le cluster est fonctionnel :
curl -k -u elastic:smKNdSN1Fp8H=F0y8Heh https://172.16.10.2:9200/_cluster/health?pretty
curl -k -u elastic:smKNdSN1Fp8H=F0y8Heh https://172.16.10.2:9200/_cat/nodes
Installation et configuration de Kibana
Nous allons désormais installer l'interface graphique d'ELK qui nous permettra de configurer des dashboards et d'afficher les logs que l'on va collecter :
- Pour les distributions Debian :
apt-get install kibana
- Pour les distributions RedHat :
sudo yum install --enablerepo=elasticsearch kibana
Puis, dans le fichier de configuration de Kibana /etc/kibana/kibana.yml décommenter l'attribut elasticsearch.hosts: et vérifier qu'il pointe bien vers localhost:9200 :
Décommenter aussi les attributs server.port et server.host, remplacer localhost par l'adresse IP depuis laquelle Kibana devrait être joignable sur le réseau, puis enregistrer le fichier :
Enfin, démarrer Kibana :
systemctl start kibana
L'activer au lancement de la machine également :
systemctl enable kibana
Valider que Kibana fonctionne en ouvrant la page d'accueil de Kibana dans un navigateur web https://ipduserveur:5601 :
Installation de LogStash
LogStash, dernier composant majeur d'ELK, est l'application en arrière-plan qui va recevoir et traiter les logs avant de les stocker dans ElasticSearch.




