Cómo instalar Suricata IDS en Ubuntu 22.04

Suricata es un software gratuito y de código abierto de análisis de redes y detección de amenazas desarrollado por la OSIF. Puede utilizarse como sistema de detección de intrusos (IDS) y como sistema de prevención de intrusos (IPS). Utiliza un conjunto de reglas y un lenguaje de firmas para detectar y prevenir amenazas. Es una alternativa a Snort y puede proporcionar una gran perspectiva de lo que ocurre en tu red desde el punto de vista de la seguridad.

En este tutorial, te mostraré cómo instalar Suricata en un servidor Ubuntu 22.04.

Requisitos

  • Un servidor que ejecute Ubuntu 22.04.
  • Una contraseña de root configurada en tu servidor.

Cómo empezar

Antes de empezar, es una buena idea actualizar los paquetes de tu sistema a la última versión. Puedes actualizarlos todos ejecutando el siguiente comando:

apt update -y
apt upgrade -y

Una vez actualizados todos los paquetes, ejecuta el siguiente comando para instalar todas las dependencias necesarias:

apt install libpcre3 libpcre3-dbg libpcre3-dev build-essential autoconf automake libtool libpcap-dev libnet1-dev libyaml-0-2 libyaml-dev zlib1g zlib1g-dev libcap-ng-dev libcap-ng0 make libmagic-dev libjansson-dev libjansson4 pkg-config libnspr4-dev libnss3-dev liblz4-dev rustc cargo python3-pip python3-distutils
apt install libnetfilter-queue-dev libnetfilter-queue1 libnfnetlink-dev libnfnetlink0

Una vez que hayas terminado, puedes pasar al siguiente paso.

Instalar Suricata desde el código fuente

En primer lugar, descarga la última versión de Suricata con el siguiente comando:

wget https://www.openinfosecfoundation.org/download/suricata-6.0.8.tar.gz

Una vez finalizada la descarga, extrae el archivo descargado con el siguiente comando:

tar xzf suricata-6.0.8.tar.gz

A continuación, navega hasta el directorio extraído y configúralo con el siguiente comando:

cd suricata-6.0.8
./configure --enable-nfqueue --prefix=/usr --sysconfdir=/etc --localstatedir=/var

Obtendrás el siguiente resultado:

  Host:                                    x86_64-pc-linux-gnu
  Compiler:                                gcc (exec name) / g++ (real)
  GCC Protect enabled:                     no
  GCC march native enabled:                yes
  GCC Profile enabled:                     no
  Position Independent Executable enabled: no
  CFLAGS                                   -g -O2 -std=c11 -march=native -I${srcdir}/../rust/gen -I${srcdir}/../rust/dist
  PCAP_CFLAGS                               -I/usr/include
  SECCFLAGS                                

To build and install run 'make' and 'make install'.

You can run 'make install-conf' if you want to install initial configuration
files to /etc/suricata/. Running 'make install-full' will install configuration
and rules and provide you a ready-to-run suricata.

To install Suricata into /usr/bin/suricata, have the config in
/etc/suricata and use /var/log/suricata as log dir, use:
./configure --prefix=/usr/ --sysconfdir=/etc/ --localstatedir=/var/

A continuación, instala el Suricata con el siguiente comando:

make
make install-full

Obtendrás el siguiente resultado:

You can now start suricata by running as root something like:
  /usr/bin/suricata -c /etc/suricata/suricata.yaml -i eth0

If a library like libhtp.so is not found, you can run suricata with:
  LD_LIBRARY_PATH=/usr/lib /usr/bin/suricata -c /etc/suricata/suricata.yaml -i eth0

The Emerging Threats Open rules are now installed. Rules can be
updated and managed with the suricata-update tool.

For more information please see:
  https://suricata.readthedocs.io/en/latest/rule-management/index.html

make[1]: Leaving directory '/root/suricata-6.0.8'

Instalar Suricata desde el repositorio de Ubuntu

También puedes instalar Suricata desde el repositorio de Ubuntu. Primero, instala todas las dependencias con el siguiente comando:

apt install gnupg2 software-properties-common curl wget git unzip -y

A continuación, añade el repositorio de Suricata con el siguiente comando:

add-apt-repository ppa:oisf/suricata-stable --yes

A continuación, actualiza la caché del repositorio con el siguiente comando:

apt update

A continuación, verifica el paquete Suricata con el siguiente comando:

apt-cache policy suricata

Obtendrás la siguiente salida:

suricata:
  Installed: (none)
  Candidate: 1:6.0.4-3
  Version table:
     1:6.0.4-3 500
        500 http://us.archive.ubuntu.com/ubuntu jammy/universe amd64 Packages

Por último, instala el Suricata con el siguiente comando:

apt install suricata jq

Ahora puedes verificar la información del paquete Suricata con el siguiente comando:

suricata --build-info

Deberías obtener la siguiente salida:

This is Suricata version 6.0.8 RELEASE
Features: NFQ PCAP_SET_BUFF AF_PACKET HAVE_PACKET_FANOUT LIBCAP_NG LIBNET1.1 HAVE_HTP_URI_NORMALIZE_HOOK PCRE_JIT HAVE_NSS HAVE_LIBJANSSON TLS TLS_C11 MAGIC RUST 
SIMD support: SSE_3 
Atomic intrinsics: 1 2 4 8 16 byte(s)
64-bits, Little-endian architecture
GCC version 11.2.0, C version 201112
compiled with _FORTIFY_SOURCE=2
L1 cache line size (CLS)=64
thread local storage method: _Thread_local
compiled with LibHTP v0.5.41, linked against LibHTP v0.5.41

Suricata Configuration:
  AF_PACKET support:                       yes
  eBPF support:                            no
  XDP support:                             no
  PF_RING support:                         no
  NFQueue support:                         yes
  NFLOG support:                           no
  IPFW support:                            no
  Netmap support:                          no 
  DAG enabled:                             no
  Napatech enabled:                        no
  WinDivert enabled:                       no

  Unix socket enabled:                     yes
  Detection enabled:                       yes

Configurar Suricata

A continuación, edita el archivo de configuración de Suricata y define tu interfaz de red y tu red:

nano /etc/suricata/suricata.yaml

Cambia las siguientes líneas:

    HOME_NET: "[10.0.2.0/24]"

    EXTERNAL_NET: "!$HOME_NET"

af-packet:
  - interface: eth0
#        - sip
    sip:
    enabled: no

Guarda y cierra el archivo y, a continuación, actualiza la configuración de Suricata con el siguiente comando:

suricata-update

A continuación, verifica el archivo de configuración de Suricata con el siguiente comando:

suricata -T -c /etc/suricata/suricata.yaml -v

Obtendrás la siguiente salida:

18/10/2022 -- 13:45:14 -  - fast output device (regular) initialized: fast.log
18/10/2022 -- 13:45:14 -  - eve-log output device (regular) initialized: eve.json
18/10/2022 -- 13:45:14 -  - stats output device (regular) initialized: stats.log
18/10/2022 -- 13:45:14 -  - SSSE3 support not detected, disabling Hyperscan for SPM
18/10/2022 -- 13:45:16 -  - 1 rule files processed. 28624 rules successfully loaded, 0 rules failed
18/10/2022 -- 13:45:16 -  - Threshold config parsed: 0 rule(s) found
18/10/2022 -- 13:45:16 -  - 28627 signatures processed. 1219 are IP-only rules, 5166 are inspecting packet payload, 22038 inspect application layer, 108 are decoder event only
18/10/2022 -- 13:45:19 -  - Configuration provided was successfully loaded. Exiting.
18/10/2022 -- 13:45:19 -  - cleaning up signature grouping structure... complete

A continuación, inicia y habilita el servicio Suricata con el siguiente comando:

systemctl enable --now suricata

También puedes comprobar el servicio Suricata con el siguiente comando:

systemctl status suricata

Deberías ver la siguiente salida:

? suricata.service - LSB: Next Generation IDS/IPS
     Loaded: loaded (/etc/init.d/suricata; generated)
     Active: active (running) since Tue 2022-10-18 13:38:52 UTC; 6min ago
       Docs: man:systemd-sysv-generator(8)
    Process: 16504 ExecStart=/etc/init.d/suricata start (code=exited, status=0/SUCCESS)
      Tasks: 7 (limit: 2242)
     Memory: 40.0M
        CPU: 4.073s
     CGroup: /system.slice/suricata.service
             ??16514 /usr/bin/suricata -c /etc/suricata/suricata.yaml --pidfile /var/run/suricata.pid --af-packet -D -vvv

Oct 18 13:38:52 ubuntu2204 systemd[1]: Starting LSB: Next Generation IDS/IPS...
Oct 18 13:38:52 ubuntu2204 suricata[16504]: Starting suricata in IDS (af-packet) mode... done.
Oct 18 13:38:52 ubuntu2204 systemd[1]: Started LSB: Next Generation IDS/IPS.

También puedes ver varios modos de ejecución con el siguiente comando:

suricata --list-runmodes

Obtendrás la siguiente salida:

------------------------------------- Runmodes ------------------------------------------
| RunMode Type      | Custom Mode       | Description 
|----------------------------------------------------------------------------------------
| PCAP_DEV          | single            | Single threaded pcap live mode 
|                   ---------------------------------------------------------------------
|                   | autofp            | Multi threaded pcap live mode.  Packets from each flow are assigned to a single detect thread, unlike "pcap_live_auto" where packets from the same flow can be processed by any detect thread 
|                   ---------------------------------------------------------------------
|                   | workers           | Workers pcap live mode, each thread does all tasks from acquisition to logging 
|----------------------------------------------------------------------------------------
| PCAP_FILE         | single            | Single threaded pcap file mode 
|                   ---------------------------------------------------------------------
|                   | autofp            | Multi threaded pcap file mode.  Packets from each flow are assigned to a single detect thread, unlike "pcap-file-auto" where packets from the same flow can be processed by any detect thread 
|----------------------------------------------------------------------------------------
| PFRING(DISABLED)  | autofp            | Multi threaded pfring mode.  Packets from each flow are assigned to a single detect thread, unlike "pfring_auto" where packets from the same flow can be processed by any detect thread 
|                   ---------------------------------------------------------------------
|                   | single            | Single threaded pfring mode 
|                   ---------------------------------------------------------------------
|                   | workers           | Workers pfring mode, each thread does all tasks from acquisition to logging 
|----------------------------------------------------------------------------------------

Verificar Suricata

Antes de verificar Suricata, tendrás que desactivar las funciones de descarga de paquetes en la interfaz de red.

Puedes desactivarla con el siguiente comando:

ethtool -K eth0 gro off lro off

A continuación, detén el Suricata con el siguiente comando:

systemctl stop suricata
rm -rf /var/run/suricata.pid

A continuación, ejecuta el Suricata manualmente con el siguiente comando:

suricata -D -c /etc/suricata/suricata.yaml -i eth0

A continuación, inicia sesión en el sistema remoto y ejecuta el comando hping3 para realizar un ataque DDoS simple contra el servidor Suricata:

hping3 -S -p 80 --flood --rand-source suricata-ip -I eth0 -c 50

A continuación, vuelve al servidor de Suricata y comprueba el archivo de registro de Suricata:

tail -f /var/log/suricata/fast.log

Deberías ver la siguiente salida:

10/18/2022-14:01:38.569298  [**] [1:2210008:2] SURICATA STREAM 3way handshake SYN resend different seq on SYN recv [**] [Classification: Generic Protocol Command Decode] [Priority: 3] {TCP} 157.32.37.21:59188 -> 209.23.10.188:80
10/18/2022-14:01:38.569304  [**] [1:2210004:2] SURICATA STREAM 3way handshake SYNACK resend with different ack [**] [Classification: Generic Protocol Command Decode] [Priority: 3] {TCP} 209.23.10.188:80 -> 157.32.37.21:59188
10/18/2022-14:01:38.569649  [**] [1:2210008:2] SURICATA STREAM 3way handshake SYN resend different seq on SYN recv [**] [Classification: Generic Protocol Command Decode] [Priority: 3] {TCP} 157.32.37.21:53343 -> 209.23.10.188:80
10/18/2022-14:01:38.569655  [**] [1:2210004:2] SURICATA STREAM 3way handshake SYNACK resend with different ack [**] [Classification: Generic Protocol Command Decode] [Priority: 3] {TCP} 209.23.10.188:80 -> 157.32.37.21:53343
10/18/2022-14:01:38.570762  [**] [1:2210008:2] SURICATA STREAM 3way handshake SYN resend different seq on SYN recv [**] [Classification: Generic Protocol Command Decode] [Priority: 3] {TCP} 157.32.37.21:62070 -> 209.23.10.188:80
10/18/2022-14:01:38.570770  [**] [1:2210004:2] SURICATA STREAM 3way handshake SYNACK resend with different ack [**] [Classification: Generic Protocol Command Decode] [Priority: 3] {TCP} 209.23.10.188:80 -> 157.32.37.21:62070
10/18/2022-14:01:38.571748  [**] [1:2210008:2] SURICATA STREAM 3way handshake SYN resend different seq on SYN recv [**] [Classification: Generic Protocol Command Decode] [Priority: 3] {TCP} 157.32.37.21:5001 -> 209.23.10.188:80

Conclusión

En este post, has aprendido a instalar Suricata en Ubuntu 22.04. Ahora puedes implementar Suricata en tu organización para proteger tus servidores de ataques DDoS. No dudes en preguntarme si tienes alguna duda.

También te podría gustar...