logo rss

Elastic Stack 8 - Logstash pour monitorer des Switchs Cisco

Logstash logo

Maintenant que notre Elastic SIEM est fonctionnel nous pouvons commencer à monitorer des éléments. Je vais commencer ici avec des switchs Cisco Small Business/SG.

Les Switchs utiliseront le protocole syslog pour envoyer des informations au module logstash.

Logstash rĂ©cupèrera les messages, les analysera et en extraiera les informations utiles qu'il enverra «classĂ©es; organisĂ©es; structurĂ©es» Ă  Elasticsearch.

Comprendre le fonctionnement de Logstash

SIEM | logstash Input Filter and Output modules
Fonctionnement de Logstash.

Installation de Logstash (Debian Serveur)

Note : J'installerai Logstash sur la mĂŞme machine que le moteur Elasticsearch.

Si ce n'est déjà fait il faudra au préalable importer la clé PGP Elasticsearch et ajouter le dépots, voir la partie I.

  • Installer et activer Logstash :
root@host:~# apt install logstash

Service

  • Check logstash service :
root@host:~# systemctl status logstash.service
  • Activer logstash au dĂ©marrage :
root@host:~# systemctl enable logstash.service

Fichier de logs

  • Logstash :
root@host:~# tail /var/log/logstash/logstash-plain.log

Configuration

Les fichiers «Pipeline»

Les fichiers de configuration Pipeline vont définir les différentes étapes du traitement qu'effectue Logstash. Les fichiers de configuration se trouvent dans le dossier /etc/logstash/conf.d.

cisco.conf

  • CrĂ©er le fichier /etc/logstash/conf.d/cisco.conf :
input {
	udp {
		port => "514"
		type => "syslog-udp-cisco"
	}
}

filter {
	grok {  
		#Remember, the syslog message looks like this : <190>%LINK-I-Up: gi1/0/13
		match => { "message" => "^<%{POSINT:syslog_facility}>%%{DATA:cisco_code}: %{GREEDYDATA:syslog_message}" }
	}
} 
output {
	elasticsearch {
		hosts           => ["https://127.0.0.1:9200"]
                ssl             => true
                user            => "elastic"
                password        => "elastic_password;)"
                index           => "cisco-switches-%{+YYYY.MM.dd}"
                ssl_certificate_verification => false

	}
}

Explications en détail du fichier cisco.conf

Comme on peut le voir au dessus, le fichier se décompose en trois parties : input, filter and output.

Input

Ici on déclare simplement sur quel port logstash écoutera pour capter les trames syslog.

  • Protocole UDP :
udp {
  • PrĂ©cision du numĂ©ro de port sur lequel Ă©couter :
port => "514"
  • Ajoute le tag syslog-udp-cisco sur chaque message rĂ©cupĂ©rè :
type => "syslog-udp-cisco"
Filter

C'est la partie «difficile» du fichier de configuration. C'est ici que l'on va dĂ©finir et dĂ©crire comment extraire les informations utiles de nos trames. Le but Ă©tant de dĂ©couper chaque message en plusieurs parties.

Par exemple ici avec nos messages syslog Cisco qui ressemblent Ă  ça : «<190>%LINK-I-Up: gi1/0/13» donc nous les sĂ©parerons de la façon suivante : <syslog_facility>%Cisco Action: Message.

Elasticsearch | le filtre logstash expliqué
  • Bon Ă  savoir, les patterns les plus utilisĂ©s :
    • WORD : matchera un mot
    • NUMBER : matchera un entier positif ou nĂ©gatif ou un flottant
    • POSINT : matchera un entier positif
    • IP : matchera une adresse IPv4 ou IPv6
    • NOTSPACE : matchera n'importe quoi qui n'est pas un espace
    • SPACE : matchera un ou plusieurs espace
    • DATA : matchera n'importe quel type de donnĂ©e
    • GREEDYDATA : matchera toutes les donnĂ©es restantes
Output

Une fois que nos données sont correctement organisées nous pouvons les envoyer vers le service Elasticsearch.

  • PrĂ©ciser l'adresse de Elasticsearch :
hosts           => ["http://127.0.0.1:9200"]
  • Donne un nom Ă  notre index dans lequel seront stockĂ©es nos donnĂ©es :
index           => "cisco-switches-%{+YYYY.MM.dd}"

Configuration des Switches Cisco

  • Nous avons besoin de nous connecter Ă  nos switchs pour activer le logging et prĂ©ciser l'adresse ip de notre serveur Logstash :
Switch(config)# logging host 192.168.1.200 port 514

Autres

VĂ©rification d'un fichier pipeline

  • Il est possible de vĂ©rifier un fichier de règles pipeline :
root@host:~# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/pipeline.conf --config.test_and_exit

Tester manuellement le traitement des données d'un fichier pipeline

Nottament pour le débogage il peut être utile de voir en temps réel la sortie d'un fichier de règles Logstash.

  • Arret du service logstash :
root@host:~# systemctl stop logstash.service
  • Ajout d'un port d'Ă©coute et d'un stdout Ă  notre fichier pipeline, dans le but de voir les informations sur la console :
input {
	tcp {
		port => "514"
		type => "syslog-tcp-telnet"
	}
}

[…]
output {
	stdout { codec => rubydebug }
}
  • Lancer logstash :
root@host:~# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/cisco.conf --config.reload.automatic
  • Utiliser telnet pour se connecter sur le port d'Ă©couter de notre service logstash (fonctionne seulement avec le protocole TCP) :
root@host:~# telnet 192.168.1.200 514
<190>%LINK-I-Up: gi1/0/13

Lister les indexs

Maintenant que nos switchs sont configurés nous pouvons vérifier qu'ils sont correctement enregistrés dans elasticsearch.

  • Pour se faire on peut utiliser la commande suivante :
root@host:~# curl --cacert /etc/elasticsearch/certs/http_ca.crt -u elastic https://localhost:9200/_cat/indices?v
Enter host password for user 'elastic':
health status index                             uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  open   .apm-agent-configuration          rkV4oelEQzC7zJ19_NYbcw   1   0          0            0       208b           208b
green  open   .kibana_1                         rtWr4Pk-TKmYrQ_jQ7Oi4Q   1   0       1689           93      2.6mb          2.6mb
green  open   .apm-custom-link                  Yo72Y9STSAiuSUWT40AJnw   1   0          0            0       208b           208b
green  open   .kibana_task_manager_1            o_uGNd0mQSu6X5_th3P2ng   1   0          5        50053      4.5mb          4.5mb
green  open   .async-search                     3RGoSaTXRLizPMce1I169w   1   0          3            6       10kb           10kb
yellow open   cisco-switches-2022.04.12         gs_PaI2iT_CMQhABskEB6g   1   1      17109            0      1.5mb          1.5mb
green  open   .kibana-event-log-7.10.2-000002   r_1sdbv0QW2XNR0bcvZN2g   1   0          1            0      5.6kb          5.6kb
yellow open   cisco-switches-2022.04.08         j9yz1SWzRwaG_int0rX4YQ   1   1       2283            0    338.1kb        338.1kb
  • Afficher le contenu d'un index :
root@host:~# curl --cacert /etc/elasticsearch/certs/http_ca.crt -u elastic 'https://localhost:9200/cisco-switches-2022.04.08/_search?pretty&q=response=200'
Enter host password for user 'elastic':
     {
        "_index" : "cisco-switches-2021.04.08",
        "_type" : "_doc",
        "_id" : "1XV3wngBMGalcfKW8ROi",
        "_score" : 3.052513,
        "_source" : {
          "syslog_message" : "PnP Response Success",
          "@timestamp" : "2021-04-11T19:45:43.739Z",
          "message" : "<190>%PNPAGENT-I-RESPSUCCESS: PnP Response Success",
          "host" : "192.168.0.15",
          "type" : "syslog-udp-cisco",
          "cisco_code" : "PNPAGENT-I-RESPSUCCESS",
          "syslog_facility" : "190",
          "@version" : "1"
        }
      },

Kibana

VĂ©rifier la prĂ©sence des «indices»

Maintenant que nous avons des données dans nos indexes il est maintenant temps de créer un joli dashboard depuis kibana pour avoir une représentation graphique des logs envoyés par les swicths.

  • Ouvrir Firefox et aller se connecter sur http://KIBANA_IP_SERVER:5601/
  • Depuis le menu principal aller dans Management > Stack Management :
Kibana | Main menu, Management, Stack Management
  • Depuis le menu Stack Management aller dans Data > Index Management :
Kibana | Main menu, Management, Stack Management, Data, Index Management
  • Les indices devraient apparaitre :
Kibana | Indices

CrĂ©er les «index pattern»

Nous allons crĂ©er un «index pattern» qui devra matcher toutes nos donnĂ©es de nos switchs Cisco.

  • Depuis le menu principal aller dans Management > Stack Management > Data Views :
  • Cliquer sur Create data view :
  • Taper «cisco-switches-» pour matcher toutes les sources de donnĂ©es :

CrĂ©ation du «dashboard»

Nous avons maintenant tout ce qu'il faut pour faire de jolis graphiques.

Représentation en forme de tarte

  • Depuis le menu principal aller dans Kibana > Dashboard :
  • Cliquer sur Create dashboard :
  • Cliquer sur Create visualization pour crĂ©er un objet :
  • Choisir Pie et sĂ©lectionner cisco-switches-* :
  • Cliquer et dĂ©poser les champs host.keyword et cisco_code.keyword :
  • Devrait apparaitre une magnigique Tarte, cliquer sur Save :
  • Donner un Titre et cliquer sur Save and return :
  • La Tarte apparait maintenant sur le Dashboard :

Représentation en forme de Tableau

  • Depuis le dashboard cliquer sur Edit puis sur Create visualization :
  • Choisir Table comme type de graphique :
  • Cliquer et dĂ©poser les champs host.keyword, syslog_message.keyword et cisco_code.keyword :
  • Devrait apparaitre ce superbe Tableau, cliquer sur Save :
  • Donner un Titre et cliquer sur Save and return :
  • Maintenant Sauvegarder le Dashboard pour conserver les changements :
  • Donner un Titre et cliquer sur Save :
Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

Contact :

adresse mail de contact