
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 :
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 :
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 :
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 :
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 :
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