Tâche #24483
Scénario #24481: Tester la solution Racdata
Analyser les requêtes adressées au service Bind9 sur hestia.eole.lan
Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
Restant à faire (heures):
0.0
Description
Les logs de requêtes bind9 sur hestia.eole.lan arrivent en double dans le message syslog, par example :
<30>2018-07-17T11:56:16+02:00 hestia named[13430]: 17-Jul-2018 11:56:16.268 queries: info: client 192.168.10.136#54998: query: castor.eole.lan IN AAAA + 17-Jul-2018 11:56:16.268 queries: info: client 192.168.10.136#54998: query: castor.eole.lan IN AAAA +
Le format est différent de celui fourni par défaut, il nous faut donc une configuration particulière.
Historique
#1 Mis à jour par Daniel Dehennin il y a plus de 7 ans
- Statut changé de Nouveau à En cours
- Assigné à mis à Daniel Dehennin
#2 Mis à jour par Daniel Dehennin il y a plus de 7 ans
Analyse des logs de requête bind9¶
Ajout de la configuration suivante sur racdata-test.eole.lan:
- Définition des
patternsspécifiques àbind9[root@racdata-test ~]# cat > /etc/logstash/patterns/bind9 <<EOF BIND9_QUERY_FLAG_RECURSE [+-] BIND9_QUERY_FLAG_SIGNED S BIND9_QUERY_FLAG_EDNS E BIND9_QUERY %{BIND9_TIMESTAMP:[query][timestamp]} queries: %{LOGLEVEL:loglevel}: client %{IP:[query][client][ip]}#%{POSINT:[query][client][port]:int}: query: %{GREEDYDATA:[query][request]} IN %{GREEDYDATA:[query][type]} %{BIND9_QUERY_FLAG_RECURSE:[query][flag][recurse]}%{BIND9_QUERY_FLAG_SIGNED:[query][flag][signed]}?%{BIND9_QUERY_FLAG_EDNS:[query][flag][edns]}? %{GREEDYDATA:message} EOF - Ajout de l’analyse des logs de
bind9[root@racdata-test ~]# cat > /etc/logstash/instances/analyse/filter-10-analyse-bind9.conf <<EOF filter { if [program] == "named" { if [canal] { # Use canal test for heavy logs mutate { replace => { "canal" => "net" } } } grok { # Overwrite the "message" to get it unduplicated match => { "message" => "%{BIND9_QUERY}" } patterns_dir => [ "/etc/logstash/patterns" ] overwrite => [ "message" ] tag_on_failure => [ "named_parsing_failed" ] remove_tag => [ "_grokparsefailure" ] add_tag => ["DNS"] } if [syslog][ip] { mutate { copy => { "[syslog][ip]" => "source_host" } } } # Make the flags more readable if [query][flag][recurse] { translate { field => "[query][flag][recurse]" destination => "[query][recurse]" dictionary => { "+" => "yes" "-" => "no" } fallback => "unknown" override => true remove_field => "[query][flag][recurse]" } } if [query][flag][edns] == "E" { mutate { add_field => { "[query][edns]" => "yes" } remove_field => [ "[query][flag][edns]" ] } } elseif ! [query][flag][edns] { mutate { add_field => { "[query][edns]" => "no" } } } if [query][flag][signed] == "S" { mutate { add_field => { "[query][signed]" => "yes" } remove_field => [ "[query][flag][signed]" ] } } elseif ! [query][flag][signed] { mutate { add_field => { "[query][signed]" => "no" } } } } } EOF - Redémarrage du daemon d’analyse
[root@racdata-test ~]# systemctl restart logstash-analyse.service
- Vérification du démarrage
[root@racdata-test ~]# tail -n 0 -f /var/log/logstash/analyse/logstash.log [2018-07-17T16:20:49,666][INFO ][logstash.outputs.rabbitmq] Connected to RabbitMQ at [2018-07-17T16:20:50,858][INFO ][logstash.pipeline ] Starting pipeline {"id"=>"main", "pipeline.workers"=>2, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>5, "pipeline.max_inflight"=>250} [2018-07-17T16:20:50,861][INFO ][logstash.pipeline ] Pipeline main started [2018-07-17T16:20:50,884][INFO ][logstash.agent ] Successfully started Logstash API endpoint {:port=>9602} [2018-07-17T16:20:50,885][INFO ][logstash.inputs.rabbitmq ] Connected to RabbitMQ at
Résultats d’analyse¶
Après quelques instants, les premiers log de requêtes bind9 sont analysées.
Vous devriez les voir dans l’interface kibana sous l’onglet Discover, voici ce que j’obtiens, au format JSON :
{
[...]
"process": {
"name": "named",
"id": 14414
},
[...]
"query": {
"request": "bp-eole.ac-dijon.fr",
"flag": {},
"recurse": "yes",
"client": {
"port": 33221,
"ip": "192.168.10.142"
},
"signed": "no",
"edns": "no",
"type": "A",
"timestamp": "17-Jul-2018 16:26:34.145"
},
[...]
"syslog": {
"severity": {
"code": 6,
"label": "informational"
},
"hostname": "hestia",
"fqdn": "hestia.eole.lan",
"pri": 30,
"ip": "192.168.232.2",
"raw": "<30>2018-07-17T16:26:34+02:00 hestia named[14414]: 17-Jul-2018 16:26:34.145 queries: info: client 192.168.10.142#33221: query: bp-eole.ac-dijon.fr IN A + 17-Jul-2018 16:26:34.145 queries: info: client 192.168.10.142#33221: query: bp-eole.ac-dijon.fr IN A +",
"facility": {
"code": 3,
"label": "daemon"
},
"timestamp": "2018-07-17T16:26:34+02:00"
},
[...]
"message": "17-Jul-2018 16:26:34.145 queries: info: client 192.168.10.142#33221: query: bp-eole.ac-dijon.fr IN A +",
[...]
"tags": [
"DNS"
],
[...]
}
<pre>#3 Mis à jour par Daniel Dehennin il y a plus de 7 ans
- % réalisé changé de 0 à 100
- Restant à faire (heures) changé de 12.0 à 0.0
#4 Mis à jour par Daniel Dehennin il y a plus de 7 ans
- Description mis à jour (diff)
#5 Mis à jour par Daniel Dehennin il y a plus de 7 ans
J’ai modifié la configuration pour faire une résolution inverse sur l’IP des clients
@@ -57,5 +55,23 @@
}
}
}
+ if [query][client][ip] {
+ dnstimeout {
+ reverse => {
+ "[query][client][ip]" => "[query][client][host]"
+ }
+ action => "replace"
+ failed_cache_size => 10000
+ failed_cache_ttl => 86400
+ hit_cache_size => 10000
+ hit_cache_ttl => 86400
+ timeout => 0.1
+ }
+ }
+ if ! [query][client][host] {
+ mutate {
+ copy => { "[query][client][ip]" => "[query][client][host]" }
+ }
+ }
}
}
#6 Mis à jour par Scrum Master il y a plus de 7 ans
- Statut changé de En cours à Résolu
- Tâche parente changé de #24481 à #24475
#7 Mis à jour par Scrum Master il y a plus de 7 ans
- Tâche parente changé de #24475 à #24481
#8 Mis à jour par Daniel Dehennin il y a plus de 7 ans
- Statut changé de Résolu à Fermé