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 -yUna 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.gitUna vez que la descarga esté completa, navega al directorio descargado y configúralo con el siguiente comando:
cd libdaq
./bootstrap
./configureDeberí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...... : yesA continuación, instálalo con el siguiente comando:
make
make installInstalar 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.gzUna vez que la descarga esté completa, extrae el archivo descargado con el siguiente comando:
tar xzf gperftools-2.9.1.tar.gzA continuación, navega al directorio descargado y compílalo con el siguiente comando:
cd gperftools-2.9.1/
./configureA continuación, instálalo con el siguiente comando:
make
make installInstalar 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.gzA continuación, extrae el archivo descargado con el siguiente comando:
tar -xvzf 3.1.43.0.tar.gzA 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-tcmallocObtendrá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/buildA continuación, cambia el directorio al directorio de construcción e instala Snort con el siguiente comando:
cd build
make
make install
ldconfigAhora puedes verificar la versión de Snort usando el siguiente comando:
snort -VObtendrá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.5Configurar 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 onAhora puedes verificarlo con el siguiente comando:
ip add sh eth0A 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-offloadObtendrá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 offCrear 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.serviceAgrega 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.targetGuarda y cierra el archivo, luego recarga el demonio systemd para aplicar los cambios:
systemctl daemon-reloadA continuación, inicia y habilita Snort con el siguiente comando:
systemctl start snort3-nic.service
systemctl enable snort3-nic.servicePuedes verificar el estado de Snort con el siguiente comando:
systemctl status snort3-nic.serviceObtendrá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/rulesA 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.luaDefine 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.tgzUna vez que la descarga esté completa, extrae el archivo descargado con el siguiente comando:
tar -xzvf OpenAppId-26425.tgzA 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.luaCambia 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/snortFinalmente, verifica el archivo de configuración de Snort con el siguiente comando:
snort -c /usr/local/etc/snort/snort.luaSi 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 SnortCrear 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.rulesAgrega 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.rulesObtendrá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 SnortA 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 noneA 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.18Crear 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.serviceAgrega 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.targetGuarda y cierra el archivo, luego recarga el demonio systemd con el siguiente comando:
systemctl daemon-reloadA continuación, inicia y habilita el servicio Snort con el siguiente comando:
systemctl enable --now snort3Ahora puedes verificar el estado de Snort usando el siguiente comando:
systemctl status snort3Obtendrá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 paquetesConclusió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.
Recibe nuevas publicaciones en tu bandeja de entrada.
No spam. Cancela la suscripción en cualquier momento.