Seguridad de red · 10 min read · Jan 10, 2026

Instalar y Configurar el Sistema de Detección de Intrusiones Snort 3 en Ubuntu 22.04

Snort es un Sistema de Prevención y Detección de Intrusiones (IDS) de Código Abierto para defenderse contra ataques DDoS. Utiliza reglas integradas que ayudan a definir la actividad maliciosa en la red y usa esas reglas para encontrar paquetes que coincidan con ellas y genera alertas para los usuarios. Snort puede identificar los últimos ataques, infecciones de malware, sistemas comprometidos y violaciones de políticas de red.

Características

  • Monitor de tráfico en tiempo real.
  • Registro de paquetes. Análisis de protocolo.
  • Coincidencia de contenido. Huellas digitales del sistema operativo.
  • Se puede instalar en cualquier entorno de red.
  • Crea registros.

En este tutorial, te mostraremos cómo instalar Snort en Ubuntu 22.04.

Requisitos Previos

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

Instalar Dependencias Requeridas

Antes de comenzar, necesitarás instalar algunas dependencias en tu servidor. Puedes instalar todas ejecutando el siguiente comando:

apt install build-essential libpcap-dev libpcre3-dev libnet1-dev zlib1g-dev luajit hwloc libdnet-dev libdumbnet-dev bison flex liblzma-dev openssl libssl-dev pkg-config libhwloc-dev cmake cpputest libsqlite3-dev uuid-dev libcmocka-dev libnetfilter-queue-dev libmnl-dev autotools-dev libluajit-5.1-dev libunwind-dev libfl-dev -y

Una vez que todas las dependencias estén instaladas, puedes proceder al siguiente paso.

Instalar Snort DAQ

A continuación, necesitarás instalar la biblioteca de Adquisición de Datos en tu sistema. Por defecto, no está disponible en el repositorio predeterminado de Ubuntu. Así que necesitarás compilarlo desde la fuente.

Primero, descarga el Snort DAQ desde Git con el siguiente comando:

git clone https://github.com/snort3/libdaq.git

Una vez que la descarga esté completa, navega al directorio descargado y configúralo con el siguiente comando:

cd libdaq  
./bootstrap  
./configure

Deberías ver la siguiente salida:

    cc:             gcc
    cppflags:       
    am_cppflags:     -fvisibility=hidden -Wall -Wmissing-declarations -Wpointer-arith -Wcast-align -Wcast-qual -Wformat -Wformat-nonliteral -Wformat-security -Wundef -Wwrite-strings -Wextra -Wsign-compare -Wno-unused-parameter -fno-strict-aliasing -fdiagnostics-show-option
    cflags:         -g -O2
    am_cflags:       -Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition -Wnested-externs
    ldflags:        
    am_ldflags:     
    libs:           

    code_coverage_enabled:  no
    code_coverage_cppflags: 
    code_coverage_cflags:   
    code_coverage_ldflags:  

    Build AFPacket DAQ module.. : yes
    Build BPF DAQ module....... : yes
    Build Divert DAQ module.... : no
    Build Dump DAQ module...... : yes
    Build FST DAQ module....... : yes
    Build netmap DAQ module.... : no
    Build NFQ DAQ module....... : yes
    Build PCAP DAQ module...... : yes
    Build Savefile DAQ module.. : yes
    Build Trace DAQ module..... : yes
    Build GWLB DAQ module...... : yes

A continuación, instálalo con el siguiente comando:

make  
make install

Instalar Gperftools

Primero, descarga la última versión de Gperftools con el siguiente comando:

cd  
wget https://github.com/gperftools/gperftools/releases/download/gperftools-2.9.1/gperftools-2.9.1.tar.gz

Una vez que la descarga esté completa, extrae el archivo descargado con el siguiente comando:

tar xzf gperftools-2.9.1.tar.gz

A continuación, navega al directorio descargado y compílalo con el siguiente comando:

cd gperftools-2.9.1/  
./configure

A continuación, instálalo con el siguiente comando:

make  
make install

Instalar Snort

A continuación, descarga la última versión de Snort con el siguiente comando:

cd  
wget https://github.com/snort3/snort3/archive/refs/tags/3.1.43.0.tar.gz

A continuación, extrae el archivo descargado con el siguiente comando:

tar -xvzf 3.1.43.0.tar.gz

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

cd snort3-3.1.43.0  
./configure_cmake.sh --prefix=/usr/local --enable-tcmalloc

Obtendrás la siguiente salida:

snort version 3.1.43.0

Install options:
    prefix:     /usr/local
    includes:   /usr/local/include/snort
    plugins:    /usr/local/lib/snort

Compiler options:
    CC:             /usr/bin/cc
    CXX:            /usr/bin/c++
    CFLAGS:            -fvisibility=hidden   -DNDEBUG -g -ggdb  -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free  -O2 -g -DNDEBUG
    CXXFLAGS:          -fvisibility=hidden   -DNDEBUG -g -ggdb  -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free  -O2 -g -DNDEBUG
    EXE_LDFLAGS:        
    MODULE_LDFLAGS:     

Feature options:
    DAQ Modules:    Static (afpacket;bpf;dump;fst;gwlb;nfq;pcap;savefile;trace)
    libatomic:      System-provided
    Hyperscan:      OFF
    ICONV:          ON
    Libunwind:      ON
    LZMA:           ON
    RPC DB:         Built-in
    SafeC:          OFF
    TCMalloc:       ON
    JEMalloc:       OFF
    UUID:           ON
-------------------------------------------------------

-- Configuring done
-- Generating done
-- Build files have been written to: /root/snort3-3.1.43.0/build

A continuación, cambia el directorio al directorio de construcción e instala Snort con el siguiente comando:

cd build  
make  
make install  
ldconfig

Ahora puedes verificar la versión de Snort usando el siguiente comando:

snort -V

Obtendrás la siguiente salida:

   ,,_     -*> Snort++ <*-
  o"  )~   Version 3.1.43.0
   ''''    By Martin Roesch & The Snort Team
           http://snort.org/contact#team
           Copyright (C) 2014-2022 Cisco and/or its affiliates. All rights reserved.
           Copyright (C) 1998-2013 Sourcefire, Inc., et al.
           Using DAQ version 3.0.9
           Using LuaJIT version 2.1.0-beta3
           Using OpenSSL 3.0.2 15 Mar 2022
           Using libpcap version 1.10.1 (with TPACKET_V3)
           Using PCRE version 8.39 2016-06-14
           Using ZLIB version 1.2.11
           Using LZMA version 5.2.5

Configurar Snort

Primero, necesitarás configurar tu interfaz de red en modo promiscuo para que pueda ver todo el tráfico de red enviado a ella.

Puedes configurarlo usando el siguiente comando:

ip link set dev eth0 promisc on

Ahora puedes verificarlo con el siguiente comando:

ip add sh eth0

A continuación, también necesitarás deshabilitar el Offloading de Interfaz. Primero, verifica si esta función está habilitada o no usando el siguiente comando:

ethtool -k eth0 | grep receive-offload

Obtendrás la siguiente salida:

generic-receive-offload: on
large-receive-offload: off [fixed]

Ahora puedes deshabilitarlo usando el siguiente comando:

ethtool -K eth0 gro off lro off

Crear un Archivo de Servicio Systemd para Snort NIC

A continuación, necesitarás crear un archivo de servicio systemd para Snort NIC.

nano /etc/systemd/system/snort3-nic.service

Agrega las siguientes líneas:

[Unit]
Description=Configurar Snort 3 NIC en modo promiscuo y Deshabilitar GRO, LRO al inicio
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/sbin/ip link set dev eth0 promisc on
ExecStart=/usr/sbin/ethtool -K eth0 gro off lro off
TimeoutStartSec=0
RemainAfterExit=yes

[Install]
WantedBy=default.target

Guarda y cierra el archivo, luego recarga el demonio systemd para aplicar los cambios:

systemctl daemon-reload

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

systemctl start snort3-nic.service  
systemctl enable snort3-nic.service

Puedes verificar el estado de Snort con el siguiente comando:

systemctl status snort3-nic.service

Obtendrás la siguiente salida:

? snort3-nic.service - Configurar Snort 3 NIC en modo promiscuo y Deshabilitar GRO, LRO al inicio
     Loaded: loaded (/etc/systemd/system/snort3-nic.service; disabled; vendor preset: enabled)
     Active: active (exited) since Tue 2022-10-11 16:24:15 UTC; 6s ago
    Process: 95745 ExecStart=/usr/sbin/ip link set dev eth0 promisc on (code=exited, status=0/SUCCESS)
    Process: 95746 ExecStart=/usr/sbin/ethtool -K eth0 gro off lro off (code=exited, status=0/SUCCESS)
   Main PID: 95746 (code=exited, status=0/SUCCESS)
        CPU: 11ms

Oct 11 16:24:15 ubuntu2204 systemd[1]: Starting Configurar Snort 3 NIC en modo promiscuo y Deshabilitar GRO, LRO al inicio...
Oct 11 16:24:15 ubuntu2204 systemd[1]: Finished Configurar Snort 3 NIC en modo promiscuo y Deshabilitar GRO, LRO al inicio.

Instalar Reglas de Snort

Las reglas son muy importantes para el motor de detección de intrusiones de Snort. Primero, crea un directorio para almacenar todas las reglas:

mkdir /usr/local/etc/rules

A continuación, descarga las reglas comunitarias con el siguiente comando:

wget -qO- https://www.snort.org/downloads/community/snort3-community-rules.tar.gz | tar xz -C /usr/local/etc/rules/

A continuación, edita el archivo de configuración principal de Snort:

nano /usr/local/etc/snort/snort.lua

Define tu red como se muestra a continuación:

HOME_NET = '192.168.56.124/32'
EXTERNAL_NET = '!$HOME_NET'

A continuación, define la ruta de tus reglas de Snort:

ips =
{
    -- usa esto para habilitar alertas de decodificador e inspector
    --enable_builtin_rules = true,

    -- usa include para archivos de reglas; asegúrate de establecer tu ruta
    -- nota que los archivos de reglas pueden incluir otros archivos de reglas
    -- (ver también variables de ruta relacionadas en la parte superior de snort_defaults.lua)

    variables = default_variables,
    rules = [[
    include /usr/local/etc/rules/snort3-community-rules/snort3-community.rules
    ]]
}

Guarda y cierra el archivo cuando termines.

Instalar Snort OpenAppID

OpenAppID es un complemento que permite a Snort detectar varias aplicaciones, Facebook, Netflix, Twitter y Reddit, utilizadas en la red.

Puedes descargarlo con el siguiente comando:

wget https://www.snort.org/downloads/openappid/26425 -O OpenAppId-26425.tgz

Una vez que la descarga esté completa, extrae el archivo descargado con el siguiente comando:

tar -xzvf OpenAppId-26425.tgz

A continuación, copia el archivo binario de OpenAppID al directorio del sistema:

cp -R odp /usr/local/lib/

A continuación, edita el archivo de configuración de Snort y define tu ubicación de OpenAppID:

nano /usr/local/etc/snort/snort.lua

Cambia las siguientes líneas:

appid =
{
    app_detector_dir = '/usr/local/lib',
    log_stats = true,
}

Guarda y cierra el archivo, luego crea un directorio de registro de Snort:

mkdir /var/log/snort

Finalmente, verifica el archivo de configuración de Snort con el siguiente comando:

snort -c /usr/local/etc/snort/snort.lua

Si todo está bien, obtendrás la siguiente salida:

--------------------------------------------------
fast pattern groups
                      src: 59
                      dst: 158
                      any: 4
                to_server: 56
                to_client: 39
--------------------------------------------------
search engine
                instances: 316
                 patterns: 10282
            pattern chars: 166369
               num states: 112212
         num match states: 9885
             memory scale: MB
             total memory: 3.42574
           pattern memory: 0.550588
        match list memory: 1.25256
        transition memory: 1.58402
        fast pattern only: 6822
--------------------------------------------------
pcap DAQ configurado para pasivo.

Snort validó correctamente la configuración (con 0 advertencias).
o")~   Salida de Snort

Crear Reglas Personalizadas de Snort

También puedes crear tus propias reglas personalizadas según tus requisitos. Vamos a crear una regla personalizada para solicitudes ICMP entrantes:

nano /usr/local/etc/rules/local.rules

Agrega la siguiente línea:

alert icmp any any -> $HOME_NET any (msg:"Prueba de conexión ICMP"; sid:1000001; rev:1;)

A continuación, verifica las reglas con el siguiente comando:

snort -c /usr/local/etc/snort/snort.lua -R /usr/local/etc/rules/local.rules

Obtendrás la siguiente salida:

search engine
                instances: 316
                 patterns: 10282
            pattern chars: 166369
               num states: 112212
         num match states: 9885
             memory scale: MB
             total memory: 3.42574
           pattern memory: 0.550588
        match list memory: 1.25256
        transition memory: 1.58402
        fast pattern only: 6822
--------------------------------------------------
pcap DAQ configurado para pasivo.

Snort validó correctamente la configuración (con 0 advertencias).
o")~   Salida de Snort

A continuación, ejecuta el siguiente comando para iniciar Snort en tu interfaz de red usando tus reglas personalizadas:

snort -c /usr/local/etc/snort/snort.lua -R /usr/local/etc/rules/local.rules -i eth0 -A alert_fast -s 65535 -k none

A continuación, abre otra interfaz de terminal y haz ping a tu servidor. Deberías ver el error ICMP en la primera terminal:

10/11-16:45:23.848071 [] [1:1000001:1] "Prueba de conexión ICMP" [] [Priority: 0] [AppID: ICMP] {ICMP} 157.32.34.228 -> 209.23.11.18
10/11-16:45:23.848071 [] [1:384:8] "PROTOCOL-ICMP PING" [] [Classification: Misc activity] [Priority: 3] [AppID: ICMP] {ICMP} 157.32.34.228 -> 209.23.11.18
10/11-16:45:24.323038 [] [1:366:11] "PROTOCOL-ICMP PING Unix" [] [Classification: Misc activity] [Priority: 3] [AppID: ICMP] {ICMP} 157.32.34.228 -> 209.23.11.18
10/11-16:45:24.323038 [] [1:1000001:1] "Prueba de conexión ICMP" [] [Priority: 0] [AppID: ICMP] {ICMP} 157.32.34.228 -> 209.23.11.18
10/11-16:45:24.323038 [] [1:384:8] "PROTOCOL-ICMP PING" [] [Classification: Misc activity] [Priority: 3] [AppID: ICMP] {ICMP} 157.32.34.228 -> 209.23.11.18
^C señal de interrupción capturada
== deteniendo
10/11-16:45:25.353007 [] [1:366:11] "PROTOCOL-ICMP PING Unix" [] [Classification: Misc activity] [Priority: 3] [AppID: ICMP] {ICMP} 157.32.34.228 -> 209.23.11.18
10/11-16:45:25.353007 [] [1:1000001:1] "Prueba de conexión ICMP" [] [Priority: 0] [AppID: ICMP] {ICMP} 157.32.34.228 -> 209.23.11.18
10/11-16:45:25.353007 [] [1:384:8] "PROTOCOL-ICMP PING" [**] [Classification: Misc activity] [Priority: 3] [AppID: ICMP] {ICMP} 157.32.34.228 -> 209.23.11.18

Crear un Archivo de Servicio Systemd para Snort

A continuación, crea un archivo de servicio systemd para gestionar Snort a través de systemd.

nano /etc/systemd/system/snort3.service

Agrega las siguientes configuraciones:

[Unit]
Description=Daemon de Snort
After=syslog.target network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/snort -c /usr/local/etc/snort/snort.lua -s 65535 -k none -l /var/log/snort -D -i eth0 -m 0x1b -u root -g root
ExecStop=/bin/kill -9 $MAINPID

[Install]
WantedBy=multi-user.target

Guarda y cierra el archivo, luego recarga el demonio systemd con el siguiente comando:

systemctl daemon-reload

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

systemctl enable --now snort3

Ahora puedes verificar el estado de Snort usando el siguiente comando:

systemctl status snort3

Obtendrás la siguiente salida:

? snort3.service - Daemon de Snort
     Loaded: loaded (/etc/systemd/system/snort3.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2022-10-11 16:48:28 UTC; 17s ago
   Main PID: 95898 (snort)
      Tasks: 2 (limit: 4579)
     Memory: 233.6M
        CPU: 2.007s
     CGroup: /system.slice/snort3.service
             ??95898 /usr/local/bin/snort -c /usr/local/etc/snort/snort.lua -s 65535 -k none -l /var/log/snort -D -i eth0 -m 0x1b -u root -g >

Oct 11 16:48:29 ubuntu2204 snort[95898]:          num match states: 9885
Oct 11 16:48:29 ubuntu2204 snort[95898]:              memory scale: MB
Oct 11 16:48:29 ubuntu2204 snort[95898]:              total memory: 3.42574
Oct 11 16:48:29 ubuntu2204 snort[95898]:            pattern memory: 0.550588
Oct 11 16:48:29 ubuntu2204 snort[95898]:         match list memory: 1.25256
Oct 11 16:48:29 ubuntu2204 snort[95898]:         transition memory: 1.58402
Oct 11 16:48:29 ubuntu2204 snort[95898]:         fast pattern only: 6822
Oct 11 16:48:29 ubuntu2204 snort[95898]: --------------------------------------------------
Oct 11 16:48:29 ubuntu2204 snort[95898]: pcap DAQ configurado para pasivo.
Oct 11 16:48:29 ubuntu2204 snort[95898]: Comenzando el procesamiento de paquetes

Conclusión

¡Felicidades! has instalado y configurado con éxito Snort 3 en Ubuntu 22.04. Ahora puedes implementar Snort en tu organización y protegerla de ataques DDoS. No dudes en preguntarme si tienes alguna pregunta.

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.