Analyse de logs DHCP 🔗

Posted by MĂ©dĂ©ric Ribreux 🗓 In projects/ELK/

Introduction

Cette partie a pour objet de trouver le moyen d'obtenir le plus d'info possible des logs issus du serveur DHCP isc-dhcp-server. Ce dernier s'installe assez facilement et permet de gérer l'affectation des adresses IP.

Analyse

Voici les éléments qu'on cherche à analyser:

Contenu des logs

Voici le contenu d'un log DHCP:

Aug 29 23:59:09 medspx dhcpd: DHCPREQUEST for 192.168.0.22 from 74:29:af:2f:80:fb via eth0

MĂ©triques

A partir de ces logs, on peut extraire les métriques suivantes:

Avec ces métriques, on doit pouvoir réaliser des statistiques intéressantes.

Fichier de configuration de logstash

Voici un exemple de filtre logstash qui capturera les différentes variables évoquées ci-dessus.

input {
  file {
      path => "/home/medspx/projects/ELK/test/datasource/dhcpd/dhcpd.log"
      start_position => beginning
      type => "dhcpd"
  }
}

filter {
  if [type] == "dhcp" {
    grok {
      match => [ "message" , "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" ]
    }
    date {
      locale => "en"
      match => [ "syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
    }
    if [syslog_message] =~ /^DHCPACK|^DHCPREQUEST|^DHCPOFFER|^DHCPNAK|^DHCPRELEASE/ {
      grok {
        match => [ "syslog_message", "(?<dhcp_action>.*) (of|on|for|to) %{IP:src_ip}.* (from|to) %{MAC:mac_address}.* via (?<iface>.*)" ]
      }
    }
    if [syslog_message] =~ /^DHCPDISCOVER/ {
      grok {
        match => [ "syslog_message", "(?<dhcp_action>.*) from %{MAC:mac_address}.* via (?<iface>.*)" ]
      }
    }
    if [syslog_message] =~ /^DHCPINFORM/ {
      grok {
        match => [ "syslog_message", "(?<dhcp_action>.*) from %{IP:src_ip}.* via (?<iface>.*)" ]
      }
    }
  }
}

Reporting

Introduction

Grùce au filtre logstash précédent, nous disposons de quelques variables. Que faire avec ? Voici ce que j'ai imaginé:

Comme d'habitude, n'oubliez pas de rafraĂźchir vos champs (Settings -> Logstash-* -> bouton Refresh).

MĂ©trique: Visualiser les demandes DHCP en fonction du temps

Ce métrique est trÚs simple. Voici la recette pour le constituer:

MĂ©trique: Lister les adresses MAC qui font des demandes DHCP en les classant par nombre de requĂȘtes.

Cette fois, nous allons utiliser une simple table.

Métrique: Lister les adresses IP les plus attribuées.

Ici aussi, nous allons utiliser une simple table.

MĂ©trique: Quelle est la rĂ©partition des types de requĂȘtes DHCP.

Pour ce cas simple, un simple camembert fait l'affaire.

MĂ©trique: Lister les adresses MAC qui font l'objet d'un rejet de la part du serveur.

Ici, il faut filtrer les données selon le contenu du message syslog. En effet, voici un log qui précise un rejet:

Aug 30 13:09:51 medspx dhcpd: DHCPDISCOVER from 00:07:cb:c0:ee:22 via eth0: network 192.168.0.0/24: no free leases

Nous allons utiliser une table (normalement, le nombre de rejet doit ĂȘtre faible):

Conclusion

VoilĂ , avec ces mesures, on peut mieux observer ce qui se passe pour le DHCP sur le rĂ©seau local. On peut identifier les machines qui demandent des baux Ă  rĂ©pĂ©tition assez facilement et modifier les paramĂštres du client DHCP pour faire baisser le nombre de requĂȘtes (durĂ©e du bail par exemple). On peut Ă©galement voir quelles sont les adresse MAX qui font des demandes et voir s'il n'y a pas des machines non autorisĂ©es qui tentent de rejoindre le rĂ©seau local IP.

Cette nouvelle source de données vous permettra de continuer à réduire la charge sur votre réseau local et sur le service DHCP.

On peut aller plus loin en tentant d'Ă©crire un filtre logstash qui traduirait les adresses MAC en nom de machines ou en utilisant le filtre translate pour le faire (pas vraiment dynamique mais mieux que rien).