Elasticsearch multi-node cluster
Open Distro for Elasticsearch est une distribution open source d'Elasticsearch, un moteur de recherche plein texte très évolutif. Il offre une sécurité avancée, des alertes, une gestion d'index, une analyse approfondie des performances et plusieurs autres fonctionnalités supplémentaires.
Nous allons voir comment installer Elasticsearch dans un cluster à plusieurs nœuds. Pour assurer la résilience en cas d'indisponibilité des nœuds Elasticsearch, il est recommandé d'avoir un nombre impair de nœuds maîtres éligibles.
Nous allons en tenir compte lorsque nous déciderons de la configuration de notre cluster Elasticsearch.
Note:
Les privilèges root sont nécessaires pour exécuter toutes les commandes décrites ci-dessous.
Le processus d'installation d'un cluster sera expliqué en trois parties.
- La première concerne la configuration du nœud initial, dans laquelle sont générés les certificats SSL qui seront déployés sur les nœuds suivants.
- La deuxième partie expliquera comment configurer les autres nœuds de la grappe.
- Enfin, la troisième partie fournit des instructions pour initialiser le cluster Elasticsearch et vérifier que tout fonctionne correctement.
Nœud initial
Les instructions suivantes sont destinées à être exécutées sur le premier nœud Elasticsearch à être configuré.
Conditions préalables
Open Distro for Elasticsearch nécessite l'installation du kit de développement Java et d'autres paquets, dont wget, curl et unzip, qui seront utilisés dans les étapes suivantes.
Installez tous les paquets nécessaires à l'installation :
# export JAVA_HOME=/usr/ && yum install curl unzip wget && yum install java-11-openjdk-devel
Si le JDK 11 n'est pas disponible pour le système d'exploitation utilisé, installez le paquet adoptopenjdk-11-hotspot en utilisant Adopt Open JDK.
Ajout du dépôt Wazuh
Importer la clé GPG
# rpm --import https://packages.wazuh.com/key/GPG-KEY-WAZUH
Ajout du repository “Wazuh”
# cat > /etc/yum.repos.d/wazuh.repo << EOF [wazuh] gpgcheck=1 gpgkey=https://packages.wazuh.com/key/GPG-KEY-WAZUH enabled=1 name=EL-$releasever - Wazuh baseurl=https://packages.wazuh.com/4.x/yum/ protect=1 EOF
Elasticsearch installation
Installer la version Open Distro for Elasticsearch
# yum install opendistroforelasticsearch
Elasticsearch Configuration
Pour configurer Elasticsearch, téléchargez le fichier suivant /etc/elasticsearch/elasticsearch.yml :
# curl -so /etc/elasticsearch/elasticsearch.yml https://raw.githubusercontent.com/wazuh/wazuh-documentation/4.0/resources/open-distro/elasticsearch/7.x/elasticsearch_cluster_initial_node.yml
Éditez le fichier /etc/elasticsearch/elasticsearch.yml. Par défaut, le modèle pré-configuré comprend 3 nœuds, dans le cas où le nombre de nœuds est différent, des lignes doivent être ajoutées ou supprimées en conséquence :
network.host: <elasticsearch_ip> node.name: node-1 cluster.name: <elastic_cluster> cluster.initial_master_nodes: - node-1 - node-2 - node-3 discovery.seed_hosts: - <elasticsearch_ip_node1> - <elasticsearch_ip_node2> - <elasticsearch_ip_node3>
Selon le type de nœud, certains paramètres peuvent varier d'un nœud à l'autre. Le cluster.initial_master_nodes et le discovery.seed_hosts sont des listes de tous les nœuds maîtres éligibles dans le cluster. Le paramètre node.master : false doit être inclus dans chaque nœud Elasticsearch qui ne sera pas configuré comme maître.
Note:
Les valeurs à remplacer :
- <elasticsearch_ip> : l'IP de l'hôte. Par exemple : 10.0.0.2.
- <elastic_cluster> : nom du cluster Elasticsearch. Ex. : production du cluster élastique.
- <elasticsearch_ip_nodeX> : IP du nœud maître éligible du cluster Elasticsearch. Ex : 10.0.0.3.
- Les certificats de chaque nœud doivent être spécifiés dans la section opendistro_security.nodes_dn.
opendistro_security.nodes_dn :
- CN=node-1,OU=Docu,O=Wazuh,L=Californie,C=US
- CN=node-2,OU=Docu,O=Wazuh,L=Californie,C=US
- CN=node-3,OU=Docu,O=Wazuh,L=Californie,C=US
- CN=<nom_commun>,OU=<unité_opérationnelle>,O=<nom_de_l'organisation>,L=<localité>,C=<code_du_pays></bootnote>
Elasticsearch roles and users
Afin d'utiliser correctement le plugin Wazuh Kibana, il est nécessaire d'ajouter les rôles et les utilisateurs supplémentaires :
# curl -so /usr/share/elasticsearch/plugins/opendistro_security/securityconfig/roles.yml https://raw.githubusercontent.com/wazuh/wazuh-documentation/4.0/resources/open-distro/elasticsearch/roles/roles.yml # curl -so /usr/share/elasticsearch/plugins/opendistro_security/securityconfig/roles_mapping.yml https://raw.githubusercontent.com/wazuh/wazuh-documentation/4.0/resources/open-distro/elasticsearch/roles/roles_mapping.yml # curl -so /usr/share/elasticsearch/plugins/opendistro_security/securityconfig/internal_users.yml https://raw.githubusercontent.com/wazuh/wazuh-documentation/4.0/resources/open-distro/elasticsearch/roles/internal_users.yml
Les commandes ci-dessus ajoutent les utilisateurs Wazuh suivants dans Kibana :
| Utilisateurs | Définition |
|---|---|
| wazuh_user | Est créé pour les utilisateurs qui ont seulement besoin d'un accès en lecture au plugin Wazuh Kibana. |
| wazuh_admin | Est l'utilisateur recommandé pour les utilisateurs qui ont besoin de privilèges administratifs. |
Deux rôles supplémentaires sont ajoutés, ces rôles sont chargés de donner les bonnes autorisations aux utilisateurs :
| Utilisateurs | Définition |
|---|---|
| wazuh_ui_user | Ce rôle permet à wazuh_user de lire les index de Wazuh. |
| wazuh_ui_admin | Ce rôle permet à wazuh_admin d'effectuer des tâches de lecture, d'écriture, de gestion et d'indexation sur les indices Wazuh. |
Ces utilisateurs et ces rôles sont conçus pour fonctionner avec le plugin Wazuh Kibana et ils sont protégés de manière à ne pas pouvoir être modifiés à partir de l'interface de Kibana. Pour les modifier ou ajouter de nouveaux utilisateurs ou rôles, le script securityadmin doit être exécuté.
Certificates creation and deployment
Supprimer les certificats de démonstration.
# rm /etc/elasticsearch/esnode-key.pem /etc/elasticsearch/esnode.pem /etc/elasticsearch/kirk-key.pem /etc/elasticsearch/kirk.pem /etc/elasticsearch/root-ca.pem -f
Générer et déployer les certificats. Déplacez-vous à l'emplacement d'installation et créez le répertoire des certificats.
# mkdir /etc/elasticsearch/certs # cd /etc/elasticsearch/certs
Téléchargez l'outil TLS hors ligne Search Guard pour créer les certificats :
# curl -so ~/search-guard-tlstool-1.8.zip https://maven.search-guard.com/search-guard-tlstool/1.8/search-guard-tlstool-1.8.zip
Extraire le fichier téléchargé. On suppose qu'il a été téléchargé dans ~/ (home directory) :
# unzip ~/search-guard-tlstool-1.8.zip -d ~/searchguard
Téléchargez le fichier de configuration search-guard.yml.
# curl -so ~/searchguard/search-guard.yml https://raw.githubusercontent.com/wazuh/wazuh-documentation/4.0/resources/open-distro/searchguard/multi-node/search-guard-multi-node.yml
Après avoir téléchargé le fichier de configuration, remplacez les valeurs <elasticsearch_X_IP> et <kibana_ip> par les adresses IP correspondantes dans le fichier ~/searchguard/search-guard.yml.
Il est possible de spécifier plusieurs IP (une entrée par ligne) :
# Nodes certificates nodes: - name: node-1 dn: CN=node-1,OU=Docu,O=Wazuh,L=California,C=US ip: - <elasticsearch_1_IP> - name: node-2 dn: CN=node-2,OU=Docu,O=Wazuh,L=California,C=US ip: - <elasticsearch_2_IP> - name: node-3 dn: CN=node-3,OU=Docu,O=Wazuh,L=California,C=US ip: - <elasticsearch_3_IP> - name: kibana dn: CN=kibana,OU=Docu,O=Wazuh,L=California,C=US ip: - <kibana_ip>
Il devrait y avoir autant de sections filebeat-X que de serveurs Wazuh dans l'installation :
- name: filebeat-1 dn: CN=filebeat-1,OU=Docu,O=Wazuh,L=California,C=US - name: filebeat-2 dn: CN=filebeat-2,OU=Docu,O=Wazuh,L=California,C=US
Exécutez le script Search Guard pour créer les certificats :
~/searchguard/tools/sgtlstool.sh -c ~/searchguard/search-guard.yml -ca -crt -t /etc/elasticsearch/certs/ mv /etc/elasticsearch/certs/node-1.pem /etc/elasticsearch/certs/elasticsearch.pem mv /etc/elasticsearch/certs/node-1.key /etc/elasticsearch/certs/elasticsearch.key mv /etc/elasticsearch/certs/node-1_http.pem /etc/elasticsearch/certs/elasticsearch_http.pem mv /etc/elasticsearch/certs/node-1_http.key /etc/elasticsearch/certs/elasticsearch_http.key
<bootnote warning>
En cas de déploiement ultérieur de certificats, il est fortement recommandé de conserver l'outil TLS de Search Guard et son fichier de configuration search-guard.yml sur le nœud maître.
Compressez tous les fichiers nécessaires pour être déployés sur tous les serveurs du cluster :
# tar -cf /etc/elasticsearch/certs/certs.tar *
Copiez certs.tar dans tous les instances du cluster. Cela peut être fait en utilisant, par exemple, scp.
Supprimez les fichiers inutiles :
# rm /etc/elasticsearch/certs/client-certificates.readme /etc/elasticsearch/certs/elasticsearch_elasticsearch_config_snippet.yml search-guard-tlstool-1.7.zip filebeat* node-* -f
Si Kibana doit être installé dans ce nœud, conservez le fichier des certificats. Sinon, si le fichier a déjà été copié dans toutes les instances du déploiement distribué, supprimez-le pour augmenter la sécurité rm -f certs.tar.
Activez et démarrez le service Elasticsearch :
# systemctl daemon-reload # systemctl enable elasticsearch # systemctl start elasticsearch
Nœud additionnels
Les étapes suivantes doivent être exécutées dans chacun des nœuds suivants du cluster Elasticsearch.
Conditions préalables
Open Distro for Elasticsearch nécessite l'installation du kit de développement Java et d'autres paquets, dont wget, curl et unzip, qui seront utilisés dans les étapes suivantes.
Installez tous les paquets nécessaires à l'installation :
# export JAVA_HOME=/usr/ && yum install curl unzip wget && yum install java-11-openjdk-devel
Si le JDK 11 n'est pas disponible pour le système d'exploitation utilisé, installez le paquet adoptopenjdk-11-hotspot en utilisant Adopt Open JDK.
Ajout du dépôt Wazuh
Importer la clé GPG
# rpm --import https://packages.wazuh.com/key/GPG-KEY-WAZUH
Ajout du repository “Wazuh”
# cat > /etc/yum.repos.d/wazuh.repo << EOF [wazuh] gpgcheck=1 gpgkey=https://packages.wazuh.com/key/GPG-KEY-WAZUH enabled=1 name=EL-$releasever - Wazuh baseurl=https://packages.wazuh.com/4.x/yum/ protect=1 EOF
Elasticsearch installation
Installer la version Open Distro for Elasticsearch
# yum install opendistroforelasticsearch
Elasticsearch Configuration
Pour configurer Elasticsearch, téléchargez le fichier suivant /etc/elasticsearch/elasticsearch.yml :
# curl -so /etc/elasticsearch/elasticsearch.yml https://raw.githubusercontent.com/wazuh/wazuh-documentation/4.0/resources/open-distro/elasticsearch/7.x/elasticsearch_cluster_initial_node.yml
Éditez le fichier /etc/elasticsearch/elasticsearch.yml. Par défaut, le modèle pré-configuré comprend 3 nœuds, dans le cas où le nombre de nœuds est différent, des lignes doivent être ajoutées ou supprimées en conséquence :
network.host: <elasticsearch_ip> node.name: node-1 cluster.name: <elastic_cluster> cluster.initial_master_nodes: - node-1 - node-2 - node-3 discovery.seed_hosts: - <elasticsearch_ip_node1> - <elasticsearch_ip_node2> - <elasticsearch_ip_node3>
Selon le type de nœud, certains paramètres peuvent varier d'un nœud à l'autre. Le cluster.initial_master_nodes et le discovery.seed_hosts sont des listes de tous les nœuds maîtres éligibles dans le cluster. Le paramètre node.master : false doit être inclus dans chaque nœud Elasticsearch qui ne sera pas configuré comme maître.
Note:
Les valeurs à remplacer :
- <elasticsearch_ip> : l'IP de l'hôte. Par exemple : 10.0.0.2.
- <elastic_cluster> : nom du cluster Elasticsearch. Ex. : production du cluster élastique.
- <elasticsearch_ip_nodeX> : IP du nœud maître éligible du cluster Elasticsearch. Ex : 10.0.0.3.
- Les certificats de chaque nœud doivent être spécifiés dans la section opendistro_security.nodes_dn.
opendistro_security.nodes_dn :
- CN=node-1,OU=Docu,O=Wazuh,L=Californie,C=US
- CN=node-2,OU=Docu,O=Wazuh,L=Californie,C=US
- CN=node-3,OU=Docu,O=Wazuh,L=Californie,C=US
- CN=<nom_commun>,OU=<unité_opérationnelle>,O=<nom_de_l'organisation>,L=<localité>,C=<code_du_pays></bootnote>
Certificates creation and deployment
Supprimer les certificats de démonstration.
# rm /etc/elasticsearch/esnode-key.pem /etc/elasticsearch/esnode.pem /etc/elasticsearch/kirk-key.pem /etc/elasticsearch/kirk.pem /etc/elasticsearch/root-ca.pem -f
Configurez les certificats Elasticsearch. L'étape suivante est le placement des certificats des nœud correspondant et exécutez les commandes suivantes. Ce guide suppose que le fichier certs.tar est placé dans ~/ (home directory 'root').
mkdir /etc/elasticsearch/certs mv ~/certs.tar /etc/elasticsearch/certs/ cd /etc/elasticsearch/certs/ tar -xf certs.tar node-X.pem node-X.key node-X_http.pem node-X_http.key root-ca.pem mv /etc/elasticsearch/certs/node-X.pem /etc/elasticsearch/certs/elasticsearch.pem mv /etc/elasticsearch/certs/node-X.key /etc/elasticsearch/certs/elasticsearch.key mv /etc/elasticsearch/certs/node-X_http.pem /etc/elasticsearch/certs/elasticsearch_http.pem mv /etc/elasticsearch/certs/node-X_http.key /etc/elasticsearch/certs/elasticsearch_http.key
Supprimer les fichiers inutiles.
# rm /etc/elasticsearch/certs/client-certificates.readme /etc/elasticsearch/certs/elasticsearch_elasticsearch_config_snippet.yml search-guard-tlstool-1.7.zip filebeat* node-* -f
Si Kibana doit être installé dans ce nœud, conservez le fichier des certificats. Sinon, si le fichier a déjà été copié dans toutes les instances du déploiement distribué, supprimez-le pour augmenter la sécurité rm -f certs.tar.
Activez et démarrez le service Elasticsearch :
# systemctl daemon-reload # systemctl enable elasticsearch # systemctl start elasticsearch
Initialisation du cluster
Une fois le processus d'installation terminé sur tous les serveurs du cluster Elasticsearch, lancez le script d'administration de sécurité sur le nœud initial :
Exécutez le script securityadmin d'Elasticsearch pour charger les informations relatives aux nouveaux certificats et démarrer le cluster. Pour exécuter cette commande, la valeur <elasticsearch_IP> doit être remplacée par l'adresse IP d'installation d'Elasticsearch :
# /usr/share/elasticsearch/plugins/opendistro_security/tools/securityadmin.sh -cd /usr/share/elasticsearch/plugins/opendistro_security/securityconfig/ -icl -nhnv -cacert /etc/elasticsearch/certs/root-ca.pem -cert /etc/elasticsearch/certs/admin.pem -key /etc/elasticsearch/certs/admin.key -h <elasticsearch_IP>
Remplacez la valeur <elasticsearch_IP> par l'IP d'installation d'Elasticsearch et exécutez la commande suivante pour vous assurer que l'installation a réussi.
# curl -XGET https://<elasticsearch_ip>:9200 -u admin:admin -k
Pour vérifier les nœuds qui sont connectés au cluster, remplacez <elasticsearch_ip> et exécutez la commande suivante :
# curl -XGET https://<elasticsearch_ip>:9200/_cat/nodes -u admin:admin -k
<bootnote warning>
Il est fortement recommandé de modifier les mots de passe par défaut d'Elasticsearch pour les utilisateurs déclarés dans le fichier /usr/share/elasticsearch/plugins/opendistro_security/securityconfig/internal_users.yml.
Vous trouverez plus d'informations sur ce processus ici.
Note:
Il est également recommandé de personnaliser le fichier /etc/elasticsearch/jvm.options afin d'améliorer les performances d'Elasticsearch.
