Recopilando los LOGs de nuestro servidor DNS y DHCP en Elasticsearch y visualizándolos en Grafana

Qué poco original soy para los títulos cortos… bueno, si tienes tu propio servidor DNS o servidor DHCP, este es tu post 😉 Realmente no vamos a obtenerlo mediante logs, lo haremos auditando su tráfico 😉 Auditaremos las peticiones que generan el servicio DNS, o DHCP para verlo en Grafana!

 

Si queremos conocer las peticiones que recibe nuestro servidor DNS o DHCP con el objetivo de poder visualizarlos en Grafana para realizar consultas o disponerlo en dashboards rotatorios… donde nos ayude a conocer el funcionamiento correcto o no de los mismos servicios, así como conocer en el caso del DNS las peticiones destino, quién las realiza… En el caso del DHCP pues las peticiones… Se pueden analizar otro tipo de tráficos por supuesto, HTTP, MySQL, PostgreSQL… y así conocer las queries que se realizan…

 

¿Cómo lo montamos? Damos por hecho que disponemos ya de ELK funcional y de un Grafana, nos apoyaremos en Packetbeat para analizar el tráfico de una máquina determinada, luego lo mandaremos a Elasticsearch y con un Datasource de Grafana podremos hacer las consultas que necesitemos.

 

En Windows, debemos instalar en la máquina Npcap previamente, marcando únicamente ‘Install Npcap in WinPcap API-compatible Mode’. Continuamos y finalizamos con la instalación de Packetbeat.

 

Una vez tengamos packetbeat descargado y descomprimido, lo configuraremos, como siempre, su fichero de configuración ‘packetbeat.yml’.

...
setup.template.settings:
  index.number_of_shards: 1
setup.template.name: "packetbeat"
setup.template.pattern: "packetbeat-*"
setup.ilm.enabled: false
...
setup.kibana:
  host: "https://DIRECCION_IP_KIBANA:5601"
  ssl.verification_mode: none
...
output.elasticsearch:
  # Array of hosts to connect to.
  hosts: ["https://DIRECCION_IP_ELASTIC:9200"]
  ssl.verification_mode: none
  username: "XXXXXXXX"
  password: "XXXXXXXX*"
  index: "packetbeat-%{+yyyy.MM.dd}"
...

 

Y, en el mismo fichero de configuración necesitaremos indicar qué registros nos interesan auditar:

...
# =========================== Transaction protocols ============================
packetbeat.protocols:
- type: icmp
  # Enable ICMPv4 and ICMPv6 monitoring. The default is true.
  enabled: false

- type: amqp
  # Configure the ports where to listen for AMQP traffic. You can disable
  # the AMQP protocol by commenting out the list of ports.
  ports: [5672]
  enabled: false

- type: cassandra
  # Configure the ports where to listen for Cassandra traffic. You can disable
  # the Cassandra protocol by commenting out the list of ports.
  ports: [9042]
  enabled: false

- type: dhcpv4
  # Configure the DHCP for IPv4 ports.
  ports: [67, 68]

- type: dns
  # Configure the ports where to listen for DNS traffic. You can disable
  # the DNS protocol by commenting out the list of ports.
  ports: [53]

- type: http
  # Configure the ports where to listen for HTTP traffic. You can disable
  # the HTTP protocol by commenting out the list of ports.
  ports: [80, 8080, 8000, 5000, 8002]
  enabled: false
...

 

Una vez configurado, instalamos el servicio:

cd '.\Program Files\packetbeat\'
.\install-service-packetbeat.ps1

 

Validamos la configuración, cargamos la config y arrancamos el servicio:

.\packetbeat.exe test config -c .\packetbeat.yml -e
.\packetbeat.exe setup
Start-Service packetbeat

 

Nota, para que use menos CPU, debemos filtrar sólo los protocolos que nos interesen, además, en el parámetro ‘packetbeat.interfaces.device’ ponerle el ID de la tarjeta de red a auditar, para saber que ID, en una consola de terminal ejecutamos: ‘packetbeat devices’:

packetbeat devices
0: \Device\NPF_{AB47E8CD-2692-4320-A188-FFE1191EDFDC} (Adaptador Ethernet vmxnet3) (fe80::70ef:a48d:29b2:3677 192.168.1.100)
1: \Device\NPF_Loopback (Adapter for loopback traffic capture) (Not assigned ip address)

 

Podremos ir a comprobar desde Kibana si ya estamos recopilando los eventos de Auditbeat, deberemos crear el índice como de costumbre.

 

Y luego ya, desde Grafana crearemos un Data Source contra este índice de Elasticsearch y podremos comenzar a crear. A poder ser algo más bonito que lo mío. Un panel, de un vistazo se ven las consultas DNS, origen, destino, top de clientes, top de destinos… y más o menos lo mismo con el DHCP.

Estoy seguro que mejoráis mi dashboard en menos de lo que canta un gallo, podemos poner otro tipo de paneles, estos son los típicos de quesito, gráficas, sankey…

 

Para poder luego hacer filtros y búsquedas DNS por IP de origen, sitio de destino…

 

Otra manera de ver el DHCP… y sí… veo que tengo una Raspberry Pi que tiene problemas con el Wifi, debe tener un transformador cutre con bajo voltaje…

Pero bueno, en un entorno con más datos, o datos más reales podéis visualizarlo de una manera más atractiva. Venga, no me alargo, espero que os sirva de inspiración si necesitáis recoger los datos de vuestro servidor DNS o servidor DHCP. 

Un abrazo a tod@s!

 

Héctor Herrero