Configuración del procesador de eventos

En esta sección instalaremos el componente que realiza el procesamiento de eventos de nuestro sistema. En este caso únicamente procesaremos los eventos relacionados con el sistema DNS y enviaremos al archivo dichos eventos.

Recuerde que tiene a su disposición todos los ficheros de configuración de esta guía en https://github.com/luids-io/docs/blob/master/es/modules/guide-advanced-dns-sinkhole/examples/.
Este proceso está probado únicamente en un sistema Ubuntu 20.04LTS server. Los binarios están compilados estáticamente y las rutas empleadas son las de una distribución estándar, por lo que el instalador debería funcionar en cualquier distribución.

Instalación del paquete event

Instalar event es muy sencillo, basta descargar el instalador ya existente y ejecutarlo. Para ello puede dirigirse a https://github.com/luids-io/event/releases y descargar la última versión del instalador (fichero installer_linux.sh). También puede simplemente copiar y pegar lo siguiente en una consola de comandos.

DOWNLOAD_URL=$(wget -O - https://api.github.com/repos/luids-io/event/releases/latest| grep download.*installer | grep -v sha256 | cut -d '"' -f4)
wget ${DOWNLOAD_URL} -O installer_event.sh
chmod 755 installer_event.sh
sudo ./installer_event.sh
Si está instalando el software en una arquitectura diferente a la amd64 (como en el caso de una Raspberry) deberá definirla en una variable de entorno al lanzar el instalador. Ejemplo: sudo ARCH=arm64 ./installer.sh. Las arquitecturas disponibles son: amd64, arm, arm64, mips, mips64, mips64le, ppc64 y s390x.

Descarga de base de datos de eventos

Con el comando event_database actualizaremos la base de datos de eventos en el directorio /usr/local/share/event-database.

Configuración de eventproc

En primer lugar copiaremos la definición de los tipos de eventos que vamos a procesar.

cp /usr/local/share/event-database/events/02-dns.json /etc/luids/event/events.d

Definiremos la configuración de las stack de procesado.

Contenido de /etc/luids/event/stacks.json
[
  {
    "name": "main",
    "modules": [
      {
        "name": "archive",
        "plugins": [
          { "class": "archiver",   "args": [ "event-archive" ] }
        ],
        "onsuccess": "next",
        "onerror": "stop"
      }
    ]
  }
]

Configuraremos los parámetros del servidor.

Contenido de /etc/luids/event/eventproc.toml
[eventproc]
datadir   = "/var/lib/luids/event"

[eventproc.db]
dirs    = [ "/etc/luids/event/events.d" ]

[eventproc.stack]
files   = [ "/etc/luids/event/stacks.json" ]

[ids.api]
files     = [ "/etc/luids/apiservices.json" ]

Probaremos la configuración.

# eventproc --config /etc/luids/event/eventproc.toml --dry-run
INFO[0000] eventproc (version: b22d18f build: 2020-12-11T08:42:15+0100)
INFO[0000] starting event processor (4 workers)
configuration seems ok

Iniciaremos y habilitaremos el servicio.

systemctl start luids-eventproc
systemctl enable luids-eventproc

Lanzaremos un evento de prueba con el siguiente comando.

echo '[ { "code": 10000, "data": { "test": "test message" } } ]' | eventnotify --stdin

Comprobaremos que se ha insertado el evento en la base de datos mediante la página de administración o directamente con la consola mongo.

$ echo '[ { "code": 10000, "data": { "test": "test message" } } ]' | eventnotify --stdin
c94d1123-85dd-403f-9674-3a02260165ac
$ mongo -u archiveui --authenticationDatabase admin -p pass3
MongoDB shell version v3.6.8
connecting to: mongodb://127.0.0.1:27017
Implicit session: session { "id" : UUID("498cff14-e0ef-4516-ac46-a7a1ed98ec42") }
MongoDB server version: 3.6.8
Welcome to the MongoDB shell.
> use luidsdb
switched to db luidsdb
> db.getCollection("events").find()
{ "_id" : "c94d1123-85dd-403f-9674-3a02260165ac", "code" : 10000, "level" : 0, "created" : ISODate("2020-12-21T06:09:01.403Z"), "source" : { "hostname" : "luids-router", "program" : "eventnotify", "instance" : "", "pid" : 13286 }, "duplicates" : 0, "data" : { "test" : "test message" }, "type" : 1, "received" : ISODate("2020-12-21T06:09:01.404Z"), "codename" : "test.security", "description" : "Test event with data: test message", "processors" : [ { "received" : ISODate("2020-12-21T06:09:01.404Z"), "processor" : { "hostname" : "luids-router", "program" : "eventproc", "instance" : "", "pid" : 13171 } } ], "tags" : [ "test" ] }
> quit()

Publicación del servicio de notificación de eventos

Con el servidor ya configurado y probado, publicaremos el servicio en apiservices.json para que el resto de servicios lo puedan utilizar.

Contenido de /etc/luids/apiservices.json
[
  {
    "id": "dnsutil-archive",
    "api": "luids.dnsutil.v1.Archive",
    "endpoint": "tcp://127.0.0.1:5821"
  },
  {
    "id": "event-archive",
    "api": "luids.event.v1.Archive",
    "endpoint": "tcp://127.0.0.1:5821"
  },
  {
    "id": "event-notify",
    "api": "luids.event.v1.Notify",
    "endpoint": "tcp://127.0.0.1:5851"
  }
]