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.
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.
root@host:~# apt install logstash
root@host:~# systemctl status logstash.service
root@host:~# systemctl enable logstash.service
root@host:~# tail /var/log/logstash/logstash-plain.log
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.
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
}
}
Comme on peut le voir au dessus, le fichier se décompose en trois parties : input, filter and output.
Ici on déclare simplement sur quel port logstash écoutera pour capter les trames syslog.
udp {
port => "514"
type => "syslog-udp-cisco"
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.
Une fois que nos données sont correctement organisées nous pouvons les envoyer vers le service Elasticsearch.
hosts => ["http://127.0.0.1:9200"]
index => "cisco-switches-%{+YYYY.MM.dd}"
Switch(config)# logging host 192.168.1.200 port 514
root@host:~# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/pipeline.conf --config.test_and_exit
Nottament pour le débogage il peut être utile de voir en temps réel la sortie d'un fichier de règles Logstash.
root@host:~# systemctl stop logstash.service
input { tcp { port => "514" type => "syslog-tcp-telnet" } } […] output { stdout { codec => rubydebug } }
root@host:~# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/cisco.conf --config.reload.automatic
root@host:~# telnet 192.168.1.200 514
<190>%LINK-I-Up: gi1/0/13
Maintenant que nos switchs sont configurés nous pouvons vérifier qu'ils sont correctement enregistrés dans elasticsearch.
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
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" } },
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.
Nous allons créer un «index pattern» qui devra matcher toutes nos données de nos switchs Cisco.
Nous avons maintenant tout ce qu'il faut pour faire de jolis graphiques.
Contact :