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
Lancer 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 y à la première question puis démarrer Elasticsearch à la suite de l'opération.
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.




