GNU/Linux >> Tutoriales Linux >  >> Rocky Linux

Cómo instalar y configurar Suricata IDS junto con Elastic Stack en Rocky Linux 8

Suricata es una herramienta de monitoreo de red que examina y procesa cada paquete de tráfico de Internet que fluye a través de su servidor. Puede generar eventos de registro, activar alertas y reducir el tráfico al detectar cualquier actividad sospechosa.

Puede instalar Suricata en una sola máquina para monitorear su tráfico o implementarlo en un host de puerta de enlace para escanear todo el tráfico entrante y saliente de otros servidores conectados a él. Puede combinar Suricata con Elasticsearch, Kibana y Filebeat para crear una herramienta de gestión de eventos e información de seguridad (SIEM).

En este tutorial, instalará Suricata IDS junto con ElasticStack en un servidor Rocky Linux 8. Los diversos componentes de la pila son:

  • Búsqueda elástica para almacenar, indexar, correlacionar y buscar los eventos de seguridad del servidor.
  • Kibana para mostrar los registros almacenados en Elasticsearch.
  • Filebeat para analizar eve.json de Suricata archivo de registro y envíe cada evento a Elasticsearch para su procesamiento.
  • Suricata para escanear el tráfico de la red en busca de eventos sospechosos y descartar los paquetes no válidos.

El tutorial se divide en dos partes, la primera parte trata sobre la instalación y configuración de Suricata, y la segunda parte trata sobre la instalación y configuración de Elastic Stack.

Instalaremos Suricata y Elastic Stack en diferentes servidores para nuestro tutorial.

Requisitos

  • Los servidores que alojan Elastic Stack y Suricata deben tener un mínimo de 4 GB de RAM y 2 núcleos de CPU.

  • Los servidores deberían poder comunicarse entre sí mediante direcciones IP privadas.

  • Los servidores deben ejecutar Rocky Linux 8 con un usuario sudo que no sea root.

  • Si desea acceder a los paneles de Kibana desde cualquier lugar, configure un dominio (kibana.example.com ) apuntando al servidor donde se instalará Suricata.

  • Instale paquetes esenciales en ambos servidores.

    $ sudo dnf install yum-utils nano curl
    

Configurar cortafuegos

PARTE 1

Paso 1 - Instalar Suricata

Para instalar Suricata, debe agregar el repositorio de paquetes de Open Information Security Foundation (OISF) a su servidor.

$ sudo dnf install 'dnf-command(copr)'
$ sudo dnf copr enable @oisf/suricata-6.0

El primer comando habilita los proyectos comunitarios (copr ) para el dnf paquete de instalación. El segundo comando habilita y agrega el repositorio OISF a su sistema. suricata-6.0 habilita el repositorio para la última versión estable del software. Pulsa y y ENTER cada vez que se le solicite.

A continuación, agregue el repositorio EPEL.

$ sudo dnf install epel-release

Instala Suricata.

$ sudo dnf install suricata

Habilite el servicio de Suricata.

$ sudo systemctl enable suricata

Paso 2:Configurar Suricata

Suricata almacena su configuración en el /etc/suricata/suricata.yaml expediente. El modo predeterminado para Suricata es el modo IDS (Sistema de detección de intrusos), donde el tráfico solo se registra y no se detiene. Si es nuevo en Suricata, debe dejar el modo sin cambios. Una vez que lo haya configurado y aprendido más, puede activar el modo IPS (Sistema de prevención de intrusiones).

Habilitar ID de comunidad

El campo de identificación de la comunidad facilita la correlación de datos entre registros generados por diferentes herramientas de monitoreo. Dado que usaremos Suricata con Elasticsearch, habilitar Community ID puede ser útil.

Abra el archivo /etc/suricata/suricata.yaml para editar.

$ sudo nano /etc/suricata/suricata.yaml

Busque la línea # Community Flow ID y establecer el valor de la variable community-id a true .

. . .
      # Community Flow ID
      # Adds a 'community_id' field to EVE records. These are meant to give
      # records a predictable flow ID that can be used to match records to
      # output of other tools such as Zeek (Bro).
      #
      # Takes a 'seed' that needs to be same across sensors and tools
      # to make the id less predictable.

      # enable/disable the community id feature.
      community-id: true
. . .

Ahora, sus eventos llevarán una identificación como 1:S+3BA2UmrHK0Pk+u3XH78GAFTtQ= que puede usar para hacer coincidir conjuntos de datos en diferentes herramientas de monitoreo.

Seleccionar interfaz de red

El archivo de configuración predeterminado de Suricata inspecciona el tráfico en eth0 dispositivo/interfaz de red. Si su servidor usa una interfaz de red diferente, deberá actualizarla en la configuración.

Verifique el nombre del dispositivo de su interfaz de red usando el siguiente comando.

$ ip -p -j route show default

Recibirá un resultado como el siguiente.

[ {
        "dst": "default",
        "gateway": "164.90.192.1",
        "dev": "eth0",
        "protocol": "static",
		"metric": 100,
        "flags": [ ]
    } ]

El dev variable se refiere al dispositivo de red. En nuestra salida, muestra eth0 como dispositivo de red. Su salida puede ser diferente dependiendo de su sistema.

Ahora que conoce el nombre de su dispositivo, abra el archivo de configuración.

$ sudo nano /etc/suricata/suricata.yaml

Busque la línea af-packet: alrededor del número de línea 580. Debajo, establezca el valor de la variable interface al nombre del dispositivo para su sistema.

# Linux high speed capture support
af-packet:
  - interface: eth0
    # Number of receive threads. "auto" uses the number of cores
    #threads: auto
    # Default clusterid. AF_PACKET will load balance packets based on flow.
    cluster-id: 99
. . .

Si desea agregar interfaces adicionales, puede hacerlo agregándolas en la parte inferior del af-packet sección alrededor de la línea 650.

Para agregar una nueva interfaz, insértela justo encima de - interface: default sección como se muestra a continuación.

    #  For eBPF and XDP setup including bypass, filter and load balancing, please
    #  see doc/userguide/capture-hardware/ebpf-xdp.rst for more info.

  - interface: enp0s1
    cluster-id: 98
...
  - interface: default
    #threads: auto
    #use-mmap: no
    #tpacket-v3: yes

Hemos agregado una nueva interfaz enp0s1 y un valor único para el cluster-id variable en nuestro ejemplo. Debe incluir una identificación de clúster única con cada interfaz que agregue.

Recarga de regla en vivo

Debe reiniciar Suricata cada vez que agregue, elimine y edite sus reglas. Al habilitar Live Rule, Suricata puede procesar cualquier cambio de regla sin reiniciar.

Para habilitar la recarga en vivo, agregue las siguientes líneas en la parte inferior del archivo de configuración.

. . .

detect-engine:
  - rule-reload: true

Con la recarga en vivo habilitada, puede usar el siguiente comando para recargar las reglas sin reiniciar el proceso de Suricata.

$ sudo kill -usr2 $(pidof suricata)

El $(pidof suricata) flag ubica el ID de proceso del proceso de Suricata. El -usr2 parte del kill el comando envía un SIGUSR2 señal al proceso de Suricata. El SIGUSR2 la señal está configurada con Suricata para recargar las reglas.

Una vez que haya terminado, guarde el archivo presionando Ctrl + X e ingresando Y cuando se le solicite.

Configurar permisos de directorio

Suricata creó automáticamente un usuario y un grupo del sistema llamados suricata durante el proceso de instalación. Debe otorgar los permisos de directorio adecuados para que la instalación funcione correctamente.

Ejecute el siguiente comando para configurar suricata como grupo para los directorios de Suricata.

$ sudo chgrp -R suricata /etc/suricata
$ sudo chgrp -R suricata /var/lib/suricata/rules
$ sudo chgrp -R suricata /var/lib/suricata/update
$ sudo chgrp -R suricata /var/log/suricata 

Establece los permisos del grupo para leer y escribir.

$ sudo chmod -R g+r /etc/suricata/
$ sudo chmod -R g+rw /var/lib/suricata/rules
$ sudo chmod -R g+rw /var/lib/suricata/update
$ sudo chmod -R g+rw /var/log/suricata

Añade tu nombre de usuario actual a la suricata grupo para que pueda realizar operaciones directamente sin necesidad de sudo.

$ sudo usermod -a -G suricata $USER

Para aplicar la nueva pertenencia al grupo, cierre sesión en el servidor y vuelva a iniciarla, o escriba lo siguiente:

$ su - ${USER}

Se le pedirá que ingrese su contraseña de usuario para continuar.

Confirme que su usuario ahora está agregado a la suricata grupo escribiendo:

$ id -nG
username sudo suricata

Paso 3:configurar las reglas de Suricata

Suricata, de forma predeterminada, solo utiliza un conjunto limitado de reglas para detectar el tráfico de red. Puede agregar más conjuntos de reglas de proveedores externos usando una herramienta llamada suricata-update . Ejecute el siguiente comando para incluir reglas adicionales.

$ suricata-update
16/2/2022 -- 07:00:16 - <Info> -- Using data-directory /var/lib/suricata.
16/2/2022 -- 07:00:16 - <Info> -- Using Suricata configuration /etc/suricata/suricata.yaml
16/2/2022 -- 07:00:16 - <Info> -- Using /usr/share/suricata/rules for Suricata provided rules.
.....
16/2/2022 -- 07:00:16 - <Info> -- No sources configured, will use Emerging Threats Open
('https://rules.emergingthreats.net/open/suricata-6.0.4/emerging.rules.tar.gz', None, True)
16/2/2022 -- 07:00:16 - <Info> -- Checking https://rules.emergingthreats.net/open/suricata-6.0.4/emerging.rules.tar.gz.md5.
16/2/2022 -- 07:00:16 - <Info> -- Fetching https://rules.emergingthreats.net/open/suricata-6.0.4/emerging.rules.tar.gz.
 100% - 3162050/3162050
.....
16/2/2022 -- 07:00:23 - <Info> -- Writing rules to /var/lib/suricata/rules/suricata.rules: total: 32004; enabled: 24611; added: 8; removed 1; modified: 1218
16/2/2022 -- 07:00:23 - <Info> -- Writing /var/lib/suricata/rules/classification.config
16/2/2022 -- 07:00:23 - <Info> -- Testing with suricata -T.
16/2/2022 -- 07:01:16 - <Info> -- Done.

Agregar proveedores de conjunto de reglas

Puede expandir las reglas de Suricata agregando más proveedores. Puede obtener reglas de una variedad de proveedores gratuitos y comerciales.

Puede incluir la lista de proveedores predeterminados con el siguiente comando.

$ suricata-update list-sources

Por ejemplo, si desea incluir el tgreen/hunting conjunto de reglas, puede habilitarlo con el siguiente comando.

$ suricata-update enable-source tgreen/hunting

Ejecute la suricata-update comando de nuevo para descargar y actualizar las nuevas reglas.

Paso 4:validar la configuración de Suricata

Suricata se envía con una herramienta de validación para verificar el archivo de configuración y las reglas en busca de errores. Ejecute el siguiente comando para ejecutar la herramienta de validación.

$ sudo suricata -T -c /etc/suricata/suricata.yaml -v
22/2/2022 -- 23:20:10 - <Info> - Running suricata under test mode
22/2/2022 -- 23:20:10 - <Notice> - This is Suricata version 6.0.4 RELEASE running in SYSTEM mode
22/2/2022 -- 23:20:10 - <Info> - CPUs/cores online: 2
22/2/2022 -- 23:20:10 - <Info> - dropped the caps for main thread
22/2/2022 -- 23:20:10 - <Info> - fast output device (regular) initialized: fast.log
22/2/2022 -- 23:20:10 - <Info> - eve-log output device (regular) initialized: eve.json
22/2/2022 -- 23:20:10 - <Info> - stats output device (regular) initialized: stats.log
22/2/2022 -- 23:20:21 - <Info> - 1 rule files processed. 24611 rules successfully loaded, 0 rules failed
22/2/2022 -- 23:20:21 - <Info> - Threshold config parsed: 0 rule(s) found
22/2/2022 -- 23:20:21 - <Info> - 24614 signatures processed. 1216 are IP-only rules, 4120 are inspecting packet payload, 19074 inspect application layer, 108 are decoder event only
22/2/2022 -- 23:21:02 - <Notice> - Configuration provided was successfully loaded. Exiting.
22/2/2022 -- 23:21:03 - <Info> - cleaning up signature grouping structure... complete

El -T indica a Suricata que se ejecute en modo de prueba, el -c marca configura la ubicación del archivo de configuración, y el -v flag imprime la salida detallada del comando. Según la configuración de su sistema y la cantidad de reglas agregadas, el comando puede tardar unos minutos en finalizar.

Paso 5 - Ejecutar Suricata

Ahora que Suricata está configurado y configurado, es hora de ejecutar la aplicación.

$ sudo systemctl start suricata

Consulta el estado del proceso.

$ sudo systemctl status suricata

Debería ver el siguiente resultado si todo funciona correctamente.

? suricata.service - Suricata Intrusion Detection Service
   Loaded: loaded (/usr/lib/systemd/system/suricata.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2022-02-16 07:14:22 UTC; 32min ago
     Docs: man:suricata(1)
  Process: 1494 ExecStartPre=/bin/rm -f /var/run/suricata.pid (code=exited, status=0/SUCCESS)
 Main PID: 1496 (Suricata-Main)
    Tasks: 8 (limit: 23479)
   Memory: 367.5M
   CGroup: /system.slice/suricata.service
           ??1496 /sbin/suricata -c /etc/suricata/suricata.yaml --pidfile /var/run/suricata.pid -i eth0 --user suricata

Feb 16 07:14:22 suricata systemd[1]: Starting Suricata Intrusion Detection Service...
Feb 16 07:14:22 suricata systemd[1]: Started Suricata Intrusion Detection Service.

El proceso puede tardar unos minutos en terminar de analizar todas las reglas. Por lo tanto, la verificación de estado anterior no es una indicación completa de si Suricata está lista y lista. Puede monitorear el archivo de registro usando el siguiente comando.

$ sudo tail -f /var/log/suricata/suricata.log

Si ve la siguiente línea en el archivo de registro, significa que Suricata se está ejecutando y está listo para monitorear el tráfico de la red.

16/02/2022 -- 07:18:39 - <Info> - All AFP capture threads are running.

Paso 6 - Prueba de las reglas de Suricata

Verificaremos si Suricata está detectando algún tráfico sospechoso. La guía de Suricata recomienda probar la regla ET Open número 2100498 usando el siguiente comando.

$ curl http://testmynids.org/uid/index.html

Obtendrá la siguiente respuesta.

uid=0(root) gid=0(root) groups=0(root)

El comando anterior pretende devolver la salida del id comando que se puede ejecutar en un sistema comprometido. Para probar si Suricata detectó el tráfico, debe verificar el archivo de registro utilizando el número de regla especificado.

$ grep 2100498 /var/log/suricata/fast.log

Si su solicitud usó IPv6, debería ver el siguiente resultado.

02/22/2022-23:24:33.997371  [**] [1:2100498:7] GPL ATTACK_RESPONSE id check returned root [**] [Classification: Potentially Bad Traffic] [Priority: 2] {TCP} 2600:9000:2204:5c00:0018:30b3:e400:93a1:80 -> 2a03:b0c0:0002:00d0:0000:0000:0fc2:b001:41468

Si su solicitud utilizó IPv4, vería el siguiente resultado.

02/22/2022-23:21:46.783476  [**] [1:2100498:7] GPL ATTACK_RESPONSE id check returned root [**] [Classification: Potentially Bad Traffic] [Priority: 2] {TCP} 204.246.178.81:80 -> 164.90.192.1:36364

Suricata también registra eventos en /var/log/suricata/eve.log archivo usando el formato JSON. Para leer e interpretar esas reglas, debe instalar jq que está fuera del alcance de este tutorial.

Hemos terminado con la primera parte del tutorial, donde instalamos Suricata y lo probamos. La siguiente parte consiste en instalar la pila ELK y configurarla para visualizar Suricata y sus registros. Se supone que esta parte dos del tutorial debe realizarse en el segundo servidor, a menos que se especifique lo contrario.

Paso 7:instalar Elasticsearch y Kibana

El primer paso para instalar Elasticsearch consiste en agregar la clave GPG de Elastic a su servidor.

$ sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

Cree un repositorio para el paquete de Elasticsearch creando y abriendo el archivo /etc/yum/yum.repos.d/elasticsearch.repo para editar.

$ sudo nano /etc/yum.repos.d/elasticsearch.repo

Pegue el siguiente código en él.

[elasticsearch]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=0
autorefresh=1
type=rpm-md

Guarde el archivo presionando Ctrl + X e ingresando Y cuando se le solicite.

Instale Elasticsearch y Kibana.

$ sudo dnf install --enablerepo=elasticsearch elasticsearch kibana

Debe usar la marca --enablerepo=elasticsearch desde entonces, hemos mantenido el repositorio deshabilitado de forma predeterminada. Esto evita la actualización accidental de estos paquetes.

Localice la dirección IP privada de su servidor usando el siguiente comando.

$ ip -brief address show
lo               UNKNOWN        127.0.0.1/8 ::1/128
eth0             UP             164.90.205.77/20 10.18.0.7/16 2a03:b0c0:2:d0::fef:b001/64 fe80::340a:6eff:fe5c:76ed/64
eth1             UP             10.133.0.3/16 fe80::906f:b5ff:fec4:c7b8/64

Anota la IP privada de tu servidor (10.133.0.3 en este caso). Nos referiremos a ella como your_private_IP . La dirección IP pública del servidor (164.90.205.77) se denominará your_public_IP en el tutorial restante. Además, tenga en cuenta el nombre de red de su servidor, eth1 .

Paso 8:configurar Elasticsearch

Elasticsearch almacena su configuración en /etc/elasticsearch/elasticsearch.yml expediente. Abra el archivo para editarlo.

$ sudo nano /etc/elasticsearch/elasticsearch.yml

Elasticsearch solo acepta conexiones locales de forma predeterminada. Necesitamos cambiarlo para que Kibana pueda acceder a él a través de la dirección IP privada.

Busque la línea #network.host: 192.168.0.1 y agregue la siguiente línea justo debajo, como se muestra a continuación.

# By default Elasticsearch is only accessible on localhost. Set a different
# address here to expose this node on the network:
#
#network.host: 192.168.0.1
network.bind_host: ["127.0.0.1", "your_private_IP"]
#
# By default Elasticsearch listens for HTTP traffic on the first free port it
# finds starting at 9200. Set a specific HTTP port here:

Esto garantizará que Elastic aún pueda aceptar conexiones locales mientras esté disponible para Kibana a través de la dirección IP privada.

El siguiente paso es activar algunas funciones de seguridad y asegurarse de que Elastic esté configurado para ejecutarse en un solo nodo. Para hacer eso, agregue las siguientes líneas al final del archivo.

. . .
discovery.type: single-node
xpack.security.enabled: true

Si va a utilizar varios nodos de búsqueda de Elastic, puede omitir la primera línea.

Una vez que haya terminado, guarde el archivo presionando Ctrl + X e ingresando Y cuando se le solicite.

Configurar cortafuegos

Agregue las reglas de firewall adecuadas para Elasticsearch para que sea accesible a través de la red privada.

$ sudo firewall-cmd --permanent --zone=internal --change-interface=eth1
$ sudo firewall-cmd --permanent --zone=internal --add-service=elasticsearch
$ sudo firewall-cmd --permanent --zone=internal --add-service=kibana
$ sudo firewall-cmd --reload

Asegúrese de elegir el nombre de la interfaz en el primer comando como el que obtuvo en el paso 7. Los comandos anteriores cambian la zona predeterminada del Firewall a interna y abren los puertos 9200, 9300 para Elasticsearch y el puerto 5601 para Kibana.

Iniciar Elasticsearch

Ahora que ha configurado Elasticsearch, es hora de iniciar el servicio.

$ sudo systemctl start elasticsearch

Crear contraseñas de Elasticsearch

Después de habilitar la configuración de seguridad de Elasticsearch, el siguiente paso es generar algunas contraseñas para el usuario predeterminado. Elasticsearch se envía con una utilidad de creación de contraseñas en /usr/share/elasticsearch/bin/elasticsearch-setup-passwords que puede generar contraseñas aleatorias.

Crea las contraseñas.

$ cd /usr/share/elasticsearch/bin
$ sudo ./elasticsearch-setup-passwords auto

Obtendrá una salida como la siguiente. Pulsa y para continuar cuando se le solicite.

Initiating the setup of passwords for reserved users elastic,apm_system,kibana,kibana_system,logstash_system,beats_system,remote_monitoring_user.
The passwords will be randomly generated and printed to the console.
Please confirm that you would like to continue [y/N]y


Changed password for user apm_system
PASSWORD apm_system = EtwMg8maU67o5tvD5rse

Changed password for user kibana_system
PASSWORD kibana_system = dTanR7Q2HtgDtATRvuJv

Changed password for user kibana
PASSWORD kibana = dTanR7Q2HtgDtATRvuJv

Changed password for user logstash_system
PASSWORD logstash_system = XGSjxNktuNMWVfGYibox

Changed password for user beats_system
PASSWORD beats_system = JXTr7CeHkMue608qVTQa

Changed password for user remote_monitoring_user
PASSWORD remote_monitoring_user = Q6JTJNl3lPy0fhy6QuMP

Changed password for user elastic
PASSWORD elastic = bd1YJfhSa8RC8SMvTIwg

Solo puede ejecutar la utilidad una vez, así que guarde todas las contraseñas en un lugar seguro.

Paso 9:configurar Kibana

El primer paso para configurar Kibana es habilitar el xpack función de seguridad mediante la generación de claves secretas. Kibana usa estas claves secretas para almacenar datos en Elasticsearch. Se puede acceder a la utilidad para generar claves secretas desde el /usr/share/kibana/bin directorio.

$ cd /usr/share/kibana/bin/
$ sudo ./kibana-encryption-keys generate -q --force

El -q bandera suprime las instrucciones de comando, y el --force La bandera garantiza que se generen nuevos secretos. Recibirá un resultado como el siguiente.

xpack.encryptedSavedObjects.encryptionKey: 0f4e5e1cf8fad1874ffed0faac6be0da
xpack.reporting.encryptionKey: d435c78a4e37521e539c0e905420c9f5
xpack.security.encryptionKey: 7ba0e2a02747bb90fb0f9a3c267b99ed

Copie la salida. Abra el archivo de configuración de Kibana en /etc/kibana/kibana.yml para editar.

$ sudo nano /etc/kibana/kibana.yml

Pegue el código del comando anterior al final del archivo.

. . .

# Specifies locale to be used for all localizable strings, dates and number formats.
# Supported languages are the following: English - en , by default , Chinese - zh-CN .
#i18n.locale: "en"

xpack.encryptedSavedObjects.encryptionKey: 0f4e5e1cf8fad1874ffed0faac6be0da
xpack.reporting.encryptionKey: d435c78a4e37521e539c0e905420c9f5
xpack.security.encryptionKey: 7ba0e2a02747bb90fb0f9a3c267b99ed

Configurar puerto Kibana

Kibana debe configurarse para que sea accesible en la dirección IP privada del servidor. Busque la línea #server.host: "localhost" en el archivo y agregue la siguiente línea justo debajo de él como se muestra.

# Kibana is served by a back end server. This setting specifies the port to use.
#server.port: 5601

# Specifies the address to which the Kibana server will bind. IP addresses and host names are both valid values.
# The default is 'localhost', which usually means remote machines will not be able to connect.
# To allow connections from remote users, set this parameter to a non-loopback address.
#server.host: "localhost"
server.host: "your_private_IP"

Una vez que haya terminado, guarde el archivo presionando Ctrl + X e ingresando Y cuando se le solicite.

Configurar acceso a Kibana

El siguiente paso es crear un nombre de usuario y una contraseña que Kibana pueda usar para la autenticación. Puede hacerlo editando directamente el archivo de configuración de Kibana, pero puede causar un problema de seguridad. El método seguro implica el uso de kibana-keystore aplicación.

Ejecute los siguientes comandos para establecer un nombre de usuario. Introduzca kibana_system como nombre de usuario.

$ cd /usr/share/kibana/bin
$ sudo ./kibana-keystore add elasticsearch.username
Enter value for elasticsearch.username: *************

Ejecute el comando nuevamente para establecer la contraseña. Asegúrese de usar la contraseña que creó para Kibana en el paso 8. Para nuestro tutorial, la contraseña es dTanR7Q2HtgDtATRvuJv .

$ sudo ./kibana-keystore add elasticsearch.password
Enter value for elasticsearch.password: ********************

Iniciando Kibana

Ahora que ha configurado el acceso seguro y las redes para Kibana, inicie el proceso.

$ sudo systemctl start kibana

Verifique el estado para ver si se está ejecutando.

$ sudo systemctl status kibana

Paso 10:instalar y configurar Filebeat

Es importante tener en cuenta que instalaremos Filebeat en el servidor de Suricata. Así que vuelve a él y agrega la clave GPG elástica para comenzar.

$ sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

Crea y abre el repositorio elástico.

$ sudo nano /etc/yum.repos.d/elasticsearch.repo

Pegue el siguiente código.

[elasticsearch]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=0
autorefresh=1
type=rpm-md

Guarde el archivo presionando Ctrl + X e ingresando Y cuando se le solicite.

Instalar Filebeat.

$ sudo dnf install --enablerepo=elasticsearch filebeat

Filebeat almacena su configuración en /etc/filebeat/filebeat.yml expediente. Ábralo para editarlo.

$ sudo nano /etc/filebeat/filebeat.yml

Lo primero que debe hacer es conectarlo al tablero de Kibana. Busque la línea #host: "localhost:5601" en el Kibana sección y agregue la siguiente línea justo debajo de ella como se muestra.

. . .
# Starting with Beats version 6.0.0, the dashboards are loaded via the Kibana API.
# This requires a Kibana endpoint configuration.
setup.kibana:

  # Kibana Host
  # Scheme and port can be left out and will be set to the default (http and 5601)
  # In case you specify and additional path, the scheme is required: http://localhost:5601/path
  # IPv6 addresses should always be defined as: https://[2001:db8::1]:5601
  #host: "localhost:5601"
  host: "your_private_IP:5601"

. . .

A continuación, busque el resultado de Elasticsearch sección del archivo y edite los valores de hosts , username y password Como se muestra abajo. Para el nombre de usuario, elija elastic como valor, y para la contraseña, use el valor generado en el paso 8 de este tutorial.

output.elasticsearch:
  # Array of hosts to connect to.
  hosts: ["your_private_IP:9200"]

  # Protocol - either `http` (default) or `https`.
  #protocol: "https"

  # Authentication credentials - either API key or username/password.
  #api_key: "id:api_key"
  username: "elastic"
  password: "bd1YJfhSa8RC8SMvTIwg"

. . .

Una vez que haya terminado, guarde el archivo presionando Ctrl + X e ingresando Y cuando se le solicite.

A continuación, habilite el módulo Suricata integrado de Filebeat.

$ sudo filebeat modules enable suricata

El último paso para configurar Filebeat es cargar los paneles y canalizaciones de SIEM en Elasticsearch mediante la filebeat setup. comando.

$ sudo filebeat setup

El comando puede tardar unos minutos en finalizar. Una vez terminado, debería recibir el siguiente resultado.

Overwriting ILM policy is disabled. Set `setup.ilm.overwrite: true` for enabling.

Index setup finished.
Loading dashboards (Kibana must be running and reachable)
Loaded dashboards
Setting up ML using setup --machine-learning is going to be removed in 8.0.0. Please use the ML app instead.
See more: https://www.elastic.co/guide/en/machine-learning/current/index.html
It is not possble to load ML jobs into an Elasticsearch 8.0.0 or newer using the Beat.
Loaded machine learning job configurations
Loaded Ingest pipelines

Inicie el servicio Filebeat.

$ sudo systemctl start filebeat

Consulta el estado del servicio.

$ sudo systemctl status filebeat

Paso 11:acceder al panel de Kibana

Dado que KIbana está configurado para acceder únicamente a Elasticsearch a través de su dirección IP privada, tiene dos opciones para acceder. El primer método es usar un túnel SSH al servidor de Elasticsearch desde su PC. Esto reenviará el puerto 5601 desde su PC a la dirección IP privada del servidor y podrá acceder a Kibana desde su PC en http://localhost:5601 . Pero este método significa que no podrá acceder a él desde ningún otro lugar.

La opción es instalar Nginx en su servidor Suricata y utilícelo como un proxy inverso para acceder al servidor de Elasticsearch a través de su dirección IP privada. Discutiremos ambas formas. Puede elegir cualquier forma según sus requisitos.

Uso del túnel local SSH

Si usa Windows 10 o Windows 11, puede ejecutar SSH LocalTunnel desde su Windows Powershell. En Linux o macOS, puede usar la terminal. Probablemente necesitará configurar el acceso SSH si aún no lo ha hecho.

Ejecute el siguiente comando en la terminal de su computadora para crear el túnel SSH.

$ ssh -L 5601:your_private_IP:5601 [email protected]_public_IP -N
  • El -L El indicador hace referencia al túnel SSH local, que reenvía el tráfico desde el puerto de su PC al servidor.
  • La private_IP:5601 es la dirección IP a la que se reenvía su tráfico en el servidor. En este caso, reemplácela con la dirección IP privada de su servidor de Elasticsearch.
  • El your_public_IP es la dirección IP pública del servidor de Elasticsearch, que se utiliza para abrir una conexión SSH.
  • El -N El indicador le dice a OpenSSH que no ejecute ningún comando, pero que mantenga viva la conexión mientras se ejecute el túnel.

Ahora que el túnel está abierto, puede acceder a Kibana abriendo la URL http://localhost:5601 en el navegador de su PC. Obtendrá la siguiente pantalla.

Deberá mantener el comando ejecutándose durante el tiempo que necesite para acceder a Kibana. Presiona Ctrl + C en tu terminal para cerrar el túnel.

Usando Nginx Reverse-proxy

Este método es el más adecuado si desea acceder al tablero desde cualquier parte del mundo.

Configurar cortafuegos

Antes de continuar, debe abrir los puertos HTTP y HTTPS en el firewall.

$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https

Vuelva a cargar el cortafuegos para habilitar los cambios.

$ sudo firewall-cmd --reload

Instalar y configurar SSL

El primer paso es instalar el certificado SSL de Let's Encrypt. Como ya hemos configurado el repositorio EPEL, instale la herramienta Certbot.

$ sudo dnf install certbot

Genere el certificado SSL para el dominio kibana.example.com .

$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d kibana.example.com

El comando anterior descargará un certificado en /etc/letsencrypt/live/kibana.example.com directorio en su servidor.

Generar un grupo Diffie-Hellman certificado.

$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Cree un directorio raíz web de desafío para la renovación automática de Let's Encrypt.

$ sudo mkdir -p /var/lib/letsencrypt

Cree un trabajo cron para renovar el SSL. It will run every day to check the certificate and renew if needed. For that, first, create the file /etc/cron.daily/certbot-renew y ábralo para editarlo.

$ sudo nano /etc/cron.daily/certbot-renew

Pegue el siguiente código.

#!/bin/sh
certbot renew --cert-name kibana.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"

Guarde el archivo presionando Ctrl + X e ingresando Y cuando se le solicite.

Cambie los permisos en el archivo de tareas para que sea ejecutable.

$ sudo chmod +x /etc/cron.daily/certbot-renew

Install and Configure Nginx

Rocket Linux 8.5 ships with the latest stable version of Nginx as a module. Install it using the following command.

$ sudo dnf module install nginx:1.20

You can check the version you want to install using the following command.

$ dnf module list nginx
Rocky Linux 8 - AppStream
Name                                           Stream                                            Profiles                                                Summary
nginx                                          1.14 [d]                                          common [d]                                              nginx webserver
nginx                                          1.16                                              common [d]                                              nginx webserver
nginx                                          1.18                                              common [d]                                              nginx webserver
nginx                                          1.20 [e]                                          common [d] [i]                                          nginx webserver

Extra Packages for Enterprise Linux Modular 8 - x86_64
Name                                           Stream                                            Profiles                                                Summary
nginx                                          mainline                                          common                                                  nginx webserver
nginx                                          1.20 [e]                                          common [d] [i]                                          nginx webserver

Confirm the Nginx installation.

$ nginx -v
nginx version 1.20.1

Enable the Nginx service.

$ sudo systemctl enable nginx

Create and open the Nginx configuration file for Kibana.

$ sudo nano /etc/nginx/conf.d/kibana.conf

Paste the following code in it. Replace the IP address with the private IP address of your Elasticsearch server.

server {
        listen 80; listen [::]:80;
        server_name kibana.example.com;
        return 301 https://$host$request_uri;
}

server {
        server_name kibana.example.com;
        charset utf-8;

        listen 443 ssl http2;
        listen [::]:443 ssl http2;

        access_log /var/log/nginx/kibana.access.log;
        error_log /var/log/nginx/kibana.error.log;

        ssl_certificate /etc/letsencrypt/live/kibana.example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/kibana.example.com/privkey.pem;
        ssl_trusted_certificate /etc/letsencrypt/live/kibana.example.com/chain.pem;
        ssl_session_timeout 1d;
        ssl_session_cache shared:MozSSL:10m;
        ssl_session_tickets off;

        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
		
		resolver 8.8.8.8;

        ssl_stapling on;
        ssl_stapling_verify on;
        ssl_dhparam /etc/ssl/certs/dhparam.pem;
 
        location / {
                proxy_pass http://your_private_IP:5601;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
        }
}

Guarde el archivo presionando Ctrl + X e ingresando Y cuando se le solicite.

Open the file /etc/nginx/nginx.conf para editar.

$ sudo nano /etc/nginx/nginx.conf

Add the following line before the line include /etc/nginx/conf.d/*.conf; .

server_names_hash_bucket_size  64;

Guarde el archivo presionando Ctrl + X e ingresando Y cuando se le solicite.

Verify the configuration.

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Start the Nginx service.

$ sudo systemctl start nginx

Your Kibana dashboard should be accessible via the URL https://kibana.example.com from anywhere you want.

Step 12 - Managing Kibana Dashboards

Before proceeding further with managing the dashboards, you need to add the base URL field in Kibana's configuration.

Open Kibana's configuration file.

$ sudo nano /etc/kibana/kibana.yml

Find the commented line #server.publicBaseUrl: "" and change it as follows by removing the hash in front of it.

server.publicBaseUrl: "https://kibana.example.com"

Guarde el archivo presionando Ctrl + X e ingresando Y cuando se le solicite.

Restart the Kibana service.

$ sudo systemctl restart kibana

Wait for a few minutes and load the URL https://kibana.example.com en tu navegador. Log in with the username elastic and the password you generated before (bd1YJfhSa8RC8SMvTIwg ) and you will get the following screen.

Type type:data suricata in the search box at the top to locate Suricata's information.

Click the first result ([Filebeat Suricata] Alert Overview ), and you will get a screen similar to the following. By default, it shows the entries for only the last 15 minutes, but we are displaying it over a larger timespan to show more data for the tutorial.

Click on the Events button to view all the logged events.

On scrolling down on events and alert pages, you can identify each event and alert by the type of protocol, the source and destination ports, and the IP address of the source. You can also view the countries from where the traffic originated.

You can use Kibana and Filebeat to access and generate other types of dashboards. One of the useful in-built dashboards that you can right away is the Security dashboard. Click on the Network dashboard from the left hamburger menu, and you will get the following screen.

You can add more dashboards like Nginx by enabling and configuring in-built Filebeat modules.

Conclusión

This concludes the tutorial for installing and configuring Suricata IDS with Elastic Stack on a Rocky Linux 8 based server. You also configured Nginx as a reverse proxy to access Kibana dashboards externally. Si tiene alguna pregunta, publíquela en los comentarios a continuación.


Rocky Linux
  1. Instalar y configurar Elasticsearch en Rocky Linux 8

  2. Cómo instalar y configurar docker en Rocky Linux/Centos 8

  3. Cómo instalar y configurar Ansible en Rocky Linux/CentOS 8

  4. Cómo instalar y configurar el balanceador de carga HAProxy en Rocky Linux/Alma Linux 8

  5. Cómo instalar y configurar Memcached en Rocky Linux/Alma Linux 8

Cómo instalar LAMP Stack en Rocky Linux 8

Cómo instalar y configurar OpenCV en Rocky Linux 8.4

Cómo instalar Docker en Rocky Linux y AlmaLinux

Cómo instalar MongoDB en Rocky Linux y AlmaLinux

Cómo instalar Java 16 en Rocky Linux y AlmaLinux

Cómo instalar y configurar el servidor web Caddy con PHP en Rocky Linux 8