IDS
Detecta actividad que coincide con reglas y genera eventos o alertas. Observa, registra y avisa sin interrumpir el tráfico.
DETECCIÓN PASIVAUna guía práctica y visual para construir tu primer sistema de detección y prevención de intrusiones con Snort.
$ snort -V
,,_ -._
/ \ / \\
/ \ / \\
Snort 3.1.82.0
Commencing packet processingSnort es un sistema de detección y prevención de intrusiones (IDS/IPS) de código abierto. Inspecciona el tráfico de red en tiempo real, compara los paquetes con reglas y genera eventos cuando encuentra patrones sospechosos.
Detecta actividad que coincide con reglas y genera eventos o alertas. Observa, registra y avisa sin interrumpir el tráfico.
DETECCIÓN PASIVAPuede intervenir sobre el tráfico cuando Snort está desplegado inline y la acción está configurada para prevención.
PREVENCIÓN ACTIVAPermite observar paquetes y validar qué tráfico llega realmente a una interfaz antes de escribir una regla.
VISIBILIDADTrabaja en una máquina virtual o una red de laboratorio. La instalación puede variar según la distribución; estos comandos muestran un flujo habitual para Debian/Ubuntu.
sudo apt update
sudo apt install -y snort3 snort3-doc
snort -V
sudo ip addrip addr. En los ejemplos se usa eth0, pero en tu sistema podría ser ens33, enp0s3 o similar.snort -VVer la versión instaladasnort -hMostrar ayudasnort -c archivoUsar una configuración concretasnort -i eth0Seleccionar interfazsnort -TValidar configuración# Validar configuración
sudo snort -c /etc/snort/snort.lua -T
# Ejecutar sensor
sudo snort -c /etc/snort/snort.lua -i eth0
# Observar tráfico con más detalle
sudo snort -i eth0 -devSnort 3 utiliza Lua para su configuración. Una ruta frecuente es /etc/snort/snort.lua. El archivo conecta la red protegida, los inspectores, los outputs y los conjuntos de reglas.
La red protegida que quieres vigilar.
Tráfico externo respecto a la red protegida.
Componentes que analizan protocolos y tráfico.
Cómo se generan y presentan los eventos.
Dónde se cargan los conjuntos de reglas.
sudo nano /etc/snort/snort.lua
# Siempre validar después de editar
sudo snort -c /etc/snort/snort.lua -TUna regla define qué tráfico buscar y qué acción ejecutar cuando se encuentra una coincidencia. Empieza con reglas simples y añade contexto poco a poco.
alert icmp any any -> any any (
msg:"LAB - ICMP detectado";
sid:1000001;
rev:1;
)alertAcción de detección / alertaicmpProtocolo que inspeccionarany anyIP y puerto de origen->Dirección del tráficomsgMensaje descriptivo del eventosidIdentificador único de la reglarevNúmero de revisión# ICMP
alert icmp any any -> any any (msg:"LAB - ICMP detectado"; sid:1000001; rev:1;)
# HTTP
alert tcp any any -> any 80 (msg:"LAB - HTTP detectado"; sid:1000002; rev:1;)
# SSH
alert tcp any any -> any 22 (msg:"LAB - SSH detectado"; sid:1000003; rev:1;)
# DNS
alert udp any any -> any 53 (msg:"LAB - DNS detectado"; sid:1000004; rev:1;)content:"admin";Busca una cadena concreta.
nocase;Ignora mayúsculas y minúsculas.
flow:to_server,established;Refina dirección y estado.
offset:0;Controla dónde empieza la búsqueda.
depth:10;Limita el área inicial.
distance:0;
within:20;Relaciona posiciones.
alert tcp any any -> any 80 (
msg:"LAB - HTTP contiene admin";
flow:to_server,established;
content:"admin";
nocase;
sid:1000100;
rev:1;
)flow:to_server,established cuando solo quieras inspeccionar solicitudes que van hacia el servidor y evitar coincidencias en tráfico de respuesta.OBSERVAR → CAPTURAR → ENTENDER EL PROTOCOLO
↓
DEFINIR DETECCIÓN → CREAR REGLA → VALIDAR CON -T
↓
GENERAR TRÁFICO CONTROLADO → REVISAR ALERTA → AJUSTAR → DOCUMENTAREn modo IDS, Snort recibe una copia del tráfico, lo analiza y registra coincidencias. No se coloca en el camino crítico de los paquetes, por lo que es una forma segura de comenzar.
sudo snort -c /etc/snort/snort.lua -i eth0
# Desde un host autorizado, generar tráfico de prueba
ping 192.168.1.20Para bloquear, Snort debe estar inline y la acción debe ser preventiva. Cambiar únicamente alert por drop no convierte una instalación IDS en IPS: la topología también debe permitir que Snort intercepte el tráfico.
drop icmp any any -> any any (
msg:"LAB - ICMP bloqueado";
sid:1000200;
rev:1;
)alert. Una regla drop puede cortar conectividad. Úsala únicamente en una red de laboratorio o infraestructura que controles.sudo ls -lah /var/log/snort/
sudo tail -f /var/log/snort/alert.fast
grep -i "icmp" /var/log/snort/*
grep -i "ssh" /var/log/snort/*
pgrep -a snort-T.Snort detecta y analiza. iptables aplica filtros en el host. Snort por sí solo no modifica iptables automáticamente; juntos forman un flujo de detección y respuesta manual.
INPUTTráfico que entra al propio equipoOUTPUTTráfico generado por el propio equipoFORWARDTráfico que atraviesa el equipo# Verificar reglas y contadores
sudo iptables -L -n -v
sudo iptables -S
# Registrar y bloquear una IP de laboratorio
sudo iptables -A INPUT -s 192.0.2.50 -j LOG --log-prefix "IPTABLES-BLOCK: "
sudo iptables -A INPUT -s 192.0.2.50 -j DROP
# Verificar contadores
sudo iptables -L INPUT -n -v --line-numbersDROP mal aplicada puede dejarte sin SSH. En remoto, mantén una sesión de administración abierta y define siempre cómo revertir el cambio.Crea una regla alert para ping, valida con -T y genera tráfico desde un host autorizado.
Ver procedimientoObserva conexiones al puerto 22 y comprueba el evento en los logs.
Ver procedimientoAñade content, nocase y flow para reducir falsos positivos.
Ver procedimientoAnaliza una alerta y aplica una regla iptables específica en el laboratorio.
Ver procedimiento¿La interfaz es correcta? ¿Hay tráfico? ¿La regla está cargada? ¿El output apunta al archivo correcto?
Ejecuta snort -T, revisa la ruta de snort.lua y corrige una cosa cada vez.
Haz la regla más específica con flow, content, puertos, dirección y contexto.
Estás en IDS o fuera de una ruta inline. Cambiar alert por drop no basta por sí solo.
Recupera la consola de la VM o elimina la regla por número antes de continuar.
Un switch envía una copia del tráfico a Snort. Es fácil de desplegar y no interrumpe la red.
El tráfico atraviesa Snort. Permite prevenir, pero requiere alta disponibilidad y pruebas cuidadosas.
Snort inspecciona tráfico de una máquina para aprendizaje y detecciones específicas.
Snort puede cubrir desde un laboratorio educativo hasta sensores distribuidos en una red empresarial. El objetivo siempre es convertir señales de red en decisiones accionables.
Vigila el tráfico entre VLAN, DMZ y servidores críticos. Detecta protocolos que no deberían cruzar una frontera.
CONTROL ESTE-OESTEBusca patrones de escaneo, beaconing, DNS extraño y conexiones salientes no autorizadas.
INVESTIGACIÓNConstruye tráfico reproducible, escribe reglas locales y aprende a interpretar eventos sin afectar producción.
APRENDIZAJEDetecta solicitudes a rutas sensibles, métodos inesperados, user-agents sospechosos y cargas con patrones conocidos.
Ver reglasObserva consultas a dominios poco frecuentes, exceso de NXDOMAIN y tipos de consulta no esperados.
Ver protocoloControla SSH/RDP, intentos repetidos, conexiones fuera de horario y cambios en el patrón habitual.
Ver buenas prácticasICMPPing, tipos inesperados, frecuencia anómalaDNSConsultas, respuestas, NXDOMAIN y dominiosHTTPMétodo, URI, cabeceras y contenidoTLSSNI, versión, certificados y destinosSSHConexiones, negociación y frecuenciaTCPFlags, puertos, estados y escaneoscontent, pcre o un inspector.Usa SID privados altos para reglas propias, mensajes consistentes y revisiones incrementales. Ajusta cada ejemplo a tu red y evita alertar sobre tráfico que no puedes interpretar.
# Escaneo TCP SYN hacia un servidor
alert tcp any any -> $HOME_NET any (
msg:"LAB - posible escaneo SYN";
flags:S;
flow:stateless;
detection_filter:track by_src, count 10, seconds 5;
sid:1001001; rev:1;
)
# DNS con consulta a un dominio de laboratorio
alert udp $HOME_NET any -> any 53 (
msg:"LAB - consulta DNS observada";
dns.query;
content:"example"; nocase;
sid:1001002; rev:1;
)
# HTTP con método sensible
alert tcp any any -> $HOME_NET 80 (
msg:"LAB - método HTTP DELETE";
flow:to_server,established;
content:"DELETE"; http_method;
sid:1001003; rev:1;
)
# Patrón PCRE: cuidado con el coste
alert tcp any any -> $HOME_NET 80 (
msg:"LAB - patrón URI sensible";
flow:to_server,established;
http_uri; pcre:"/\/(admin|backup|debug)/Ui";
sid:1001004; rev:1;
)flagsFiltra banderas TCP concretas.detection_filterReduce ruido por frecuencia.http_methodLimita el contenido a métodos HTTP.http_uriInspecciona la URI normalizada.pcreExpresiones regulares con mayor coste.metadataAñade contexto para clasificar.# Contar eventos rápidamente
sudo grep -h "alert" /var/log/snort/* | wc -l
# Revisar procesos y consumo
pgrep -a snort
top -p $(pgrep -o snort)
# Registrar una captura de laboratorio
sudo tcpdump -ni eth0 -c 100 -w laboratorio.pcapPrueba reglas nuevas en una interfaz o sensor aislado. Promueve cambios después de revisar falsos positivos, consumo y procedimiento de reversión.
Limita permisos sobre snort.lua y los archivos de reglas. Versiona cambios y evita incluir secretos o datos sensibles en mensajes de alerta.
Usa NTP, nombres de sensor, etiquetas de entorno y una convención de SID. Sin tiempo y contexto, correlacionar eventos resulta mucho más difícil.
Define severidad, propietario, evidencia y reversión. Un bloqueo automático debe tener excepciones, monitorización y una salida segura.
sudo snort -c /etc/snort/snort.lua -Tsudo snort -c /etc/snort/snort.lua -i eth0sudo tail -f /var/log/snort/alert.fastip addr · ip link · ip route