Packetbeat avec Elasticsearch 8.x - Partie 1 : Installation et sécurisation

Publié le 18/12/2022

« Voir toutes les conférences Contactez-nous
Packetbeat with Elasticsearch 8.x - Part 1: Install & Secure

Introduction

Code sur Github: Elasticsearch et Beats

Nous allons installer Packetbeat avec Elasticsearch et Kibana. Si vous n'avez pas encore configuré Elasticsearch et Kibana,suivez ces instructions.

Cette vidéo suppose que vous utilisez Certificats signés publiquement. Si vous utilisez Certificats auto-signés, va ici À déterminer.

Exigences

Une instance en cours d'exécution d'Elasticsearch et de Kibana.

Une instance d’un autre serveur Ubuntu 20.04 exécutant n’importe quel type de service.

Mesures

Étape 1 - Télécharger Packetbeat [01:15]

Sur la machine Ubuntu qui exécutera packetbeat, exécutez ces commandes pour télécharger les dépendances :

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg; sudo apt-get install -y apt-transport-https; echo 'deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main' | sudo tee /etc/apt/sources.list.d/elastic-8.x.list; sudo apt-get update && sudo apt-get install -y packetbeat;

Étape 2 - Configurer Packetbeat [02:21]

Modifiez ces champs pour le /etc/packetbeat/packetbeat.yml.

setup.dashboards.enabled: true setup.kibana: host: "https://<kibana-domain>:<kibana-port>" output.elasticsearch: hosts: ["<elasticsearch-domain>:<elasticsearch-port>"] protocol: "https" username: "elastic" password: "your elastic password"

Le fichier packetbeat.yml complété peut être trouvé ici

IMPORTANT : nous utilisons le superutilisateur Elastic pour la configuration initiale. Nous rétrograderons ces privilèges ultérieurement.

Testez ensuite votre configuration avec ces commandes :

/usr/share/packetbeat/bin/packetbeat test config -c /etc/packetbeat/packetbeat.yml --path.data /var/lib/packetbeat --path.home /usr/share/packetbeat /usr/share/packetbeat/bin/packetbeat test output -c /etc/packetbeat/packetbeat.yml --path.data /var/lib/packetbeat --path.home /usr/share/packetbeat

Vous devriez voir quelque chose comme ceci :

Verify packetbeat configuration Vérifier la configuration de packetbeat

Étape 3 - Configuration de Packetbeat [9:38]

Exécutez maintenant cette commande pour configurer les flux de données et les vues Packetbeat dans Elasticsearch et Kibana :

/usr/share/packetbeat/bin/packetbeat setup -c /etc/packetbeat/packetbeat.yml --path.data /var/lib/packetbeat --path.home /usr/share/packetbeat

Une fois la commande terminée, allez sur Kibana Menu et visiter Tableau de bord pour voir de nombreux tableaux de bord pré-fabriqués.

Étape 4 - Créer un utilisateur de publication [11:05]

Créer un rôle

À Kibana, allez à Gestion de la pile > Rôles > Créer un rôle. Remplissez ensuite ces champs :

Role name: packetbeat-publisher Cluster privileges: monitor, read_ilm Indices: packetbeat-* Privileges: create_doc

Créer un utilisateur

À Kibana, allez à Gestion de la pile > Utilisateurs > Créer un utilisateur. Remplissez ensuite ces champs :

Username: packetbeat-publisher Full name: packetbeat-publisher Email address: anything@anything.com Password: anything Roles: packetbeat-publisher, editor

Créer une clé API pour l'utilisateur

À Kibana, allez à Outils de développement > Console. Exécutez ensuite cette commande :

POST /_security/api_key/grant { "grant_type": "password", "username": "packetbeat-publisher", "password": "anything", "api_key": { "name": "packetbeat-publisher" } }

Cela devrait produire un résultat comme :

Packetbeat user token Jeton utilisateur Packetbeat

Modifier le /etc/packetbeat/packetbeat.yml en commentant le elastic nom d'utilisateur et mot de passe et activation du api_key comme ça:

output.elasticsearch: ...etc... api_key: "${ES_API_KEY}" #username: "elastic" #password: "" ...etc...

Nous utiliserons le keystore de packetbeat pour charger les secrets à l'exécution. Exécutez maintenant cette commande pour définir ES_API_KEY variable de magasin de clés :

/usr/share/packetbeat/bin/packetbeat keystore add ES_API_KEY -c /etc/packetbeat/packetbeat.yml --path.data /var/lib/packetbeat --path.home /usr/share/packetbeat

Presse entrer et lorsque vous y êtes invité, collez <id>:<api_key> où le <id> et le <api_key> sont les valeurs de la réponse du jeton utilisateur que vous avez obtenue précédemment.

Étape 5 - Exécuter Packetbeat [17:37]

systemctl enable packetbeat.service; systemctl start packetbeat.service;

Dans un instant, vous devriez commencer à voir des résultats dans Kibana dans l'un ou l'autre Découvrir, Observabilité, Gestion de la pile > Gestion des index > Flux de données, Tableau de bord > Sélectionnez un tableau de bord Packetbeat.

Étape 6 - Configurer GeoIP dans Elastic

À Kibana, allez à Outils de développement > Console. Exécutez ensuite cette commande :

GET _ingest/geoip/stats

Si le téléchargements réussis expositions sur le terrain 1 Vous pouvez alors ignorer les étapes suivantes. Mais si GeoIP ne parvient pas à télécharger Elastic, le résultat sera le suivant :

Packetbeat GeoIP checks Vérifications GeoIP de Packetbeat

Désactiver le téléchargement automatique de GeoIP sur Elasticsearch

Aller à etc/elasticsearch/ répertoire et ouvrez le elasticsearch.yml fichier avec

vi elasticsearch.yml

Ajoutez la ligne ci-dessous au fichier

ingest.geoip.downloader.enabled: false

puis redémarrez elasticsearch

systemctl restart elasticsearch.service

confirmez qu'Elasticsearch n'essaie pas de télécharger GeoIP en exécutant à nouveau la commande ci-dessous dans Outils de développement > Console:

GET _ingest/geoip/stats

Vous devriez voir quelque chose comme ceci :

Packetbeat GeoIP confirmation

Autoriser Elasticsearch à télécharger GeoIP

Aller à etc/elasticsearch/ répertoire et ouvrez le elasticsearch.yml fichier avec

vi elasticsearch.yml

Et supprimez la ligne ci-dessous qui a été précédemment ajoutée au fichier.

ingest.geoip.downloader.enabled: false

Procédez au redémarrage d'Elasticsearch pour que les modifications soient reflétées.

systemctl restart elasticsearch.service

Confirmez que cela fonctionne en exécutant la commande ci-dessous dans le Outils de développement > Console: GET _ingest/geoip/stats

Vous devriez obtenir un résultat comme celui-ci :

Packetbeat GeoIP Successful Download Téléchargement réussi de Packetbeat GeoIP

Configurer GeoIP

Définissez un pipeline d'ingestion avec la commande ci-dessous dans le Outils de développement > Console:

PUT _ingest/pipeline/geoip-info { "description": "Add geoip info", "processors": [ { "geoip": { "field": "client.ip", "target_field": "client.geo", "ignore_missing": true } }, { "geoip": { "database_file": "GeoLite2-ASN.mmdb", "field": "client.ip", "target_field": "client.as", "properties": [ "asn", "organization_name" ], "ignore_missing": true } }, { "geoip": { "field": "source.ip", "target_field": "source.geo", "ignore_missing": true } }, { "geoip": { "database_file": "GeoLite2-ASN.mmdb", "field": "source.ip", "target_field": "source.as", "properties": [ "asn", "organization_name" ], "ignore_missing": true } }, { "geoip": { "field": "destination.ip", "target_field": "destination.geo", "ignore_missing": true } }, { "geoip": { "database_file": "GeoLite2-ASN.mmdb", "field": "destination.ip", "target_field": "destination.as", "properties": [ "asn", "organization_name" ], "ignore_missing": true } }, { "geoip": { "field": "server.ip", "target_field": "server.geo", "ignore_missing": true } }, { "geoip": { "database_file": "GeoLite2-ASN.mmdb", "field": "server.ip", "target_field": "server.as", "properties": [ "asn", "organization_name" ], "ignore_missing": true } }, { "geoip": { "field": "host.ip", "target_field": "host.geo", "ignore_missing": true } }, { "rename": { "field": "server.as.asn", "target_field": "server.as.number", "ignore_missing": true } }, { "rename": { "field": "server.as.organization_name", "target_field": "server.as.organization.name", "ignore_missing": true } }, { "rename": { "field": "client.as.asn", "target_field": "client.as.number", "ignore_missing": true } }, { "rename": { "field": "client.as.organization_name", "target_field": "client.as.organization.name", "ignore_missing": true } }, { "rename": { "field": "source.as.asn", "target_field": "source.as.number", "ignore_missing": true } }, { "rename": { "field": "source.as.organization_name", "target_field": "source.as.organization.name", "ignore_missing": true } }, { "rename": { "field": "destination.as.asn", "target_field": "destination.as.number", "ignore_missing": true } }, { "rename": { "field": "destination.as.organization_name", "target_field": "destination.as.organization.name", "ignore_missing": true } } ] }

Exécutez ensuite la commande ci-dessous pour confirmer que tout ce qui a été envoyé avec la demande de mise en place était correct :

GET _ingest/pipeline/geoip-info

Modifier le /etc/packetbeat/packetbeat.yml en ajoutant pipeline: geoip-info comme ça:

output.elasticsearch: ...etc... api_key: "${ES_API_KEY}" pipeline: geoip-info #username: "elastic" #password: "" ...etc...

Et puis redémarrez packetbeat en utilisant la commande ci-dessous sur votre terminal :

systemctl restart packetbeat.service