Ghost AcademySecLearn// Seguridad Informática
🔍 IDS · iptables logs · Port Scan Detection
PSADPort Scan Attack Detector
// iptables · ufw · danger levels · auto-blocking · nmap detection

PSAD es una suite de demonios ligeros que analiza los logs de iptables para detectar escaneos de puertos, sondas y otras actividades sospechosas. Funciona directamente con el firewall de Linux y asigna niveles de peligro dinámicos a cada IP atacante.

Port Scan Detection · IDS pasivo iptables · ufw logging Danger Levels 1–5 Auto-blocking activo psad.conf · DANGER_LEVEL
🔍
¿Qué es PSAD?
Port Scan Attack Detector — IDS basado en logs de iptables

PSAD es una suite de demonios ligeros que analiza los logs de iptables (el cortafuegos de Linux) para detectar escaneos de puertos, sondas y otras actividades sospechosas. A diferencia de Fail2ban, PSAD está diseñado específicamente para la detección de escaneo y funciona directamente con el firewall.

PSAD
Diseñado para detectar escaneos de puertos y sondas de red. Analiza directamente los logs de iptables. Asigna Danger Levels dinámicos a cada IP.
VS
Fail2ban
Se centra en fallos de autenticación de aplicaciones (SSH, FTP, HTTP). Analiza logs de aplicación, no del firewall.
📋
1. Requisitos Previos — Habilitar Logging
PSAD necesita que iptables/ufw registre la actividad de paquetes

PSAD lee los logs que genera el firewall. Sin logging activo, PSAD no tiene datos que analizar.

Con UFW (recomendado en Ubuntu)

bash
sudo ufw enable
sudo ufw logging on

Con iptables directamente

Añadir una regla de logging antes de la regla DROP/REJECT en la cadena INPUT:

bash
sudo iptables -A INPUT -j LOG --log-prefix "IPTABLES DROP: "
// Anatomía de la regla de logging
sudo iptables -A INPUT -j LOG --log-prefix "IPTABLES DROP: "
-A INPUT
Añade la regla a la cadena de tráfico de entrada. Todo paquete entrante que llegue aquí será procesado.
-j LOG
Acción: registrar el paquete en el kernel (syslog/journal). PSAD lo leerá desde ahí.
--log-prefix
Añade una etiqueta de prefijo al mensaje de log para identificar fácilmente estos registros.
⚠️ Orden importa: La regla de LOG debe estar antes de DROP/REJECT. Si el paquete cae antes de llegar al LOG, nunca se registrará y PSAD no lo verá.
📦
2. Instalación de PSAD
Disponible en repositorios de Ubuntu/Debian
bash
sudo apt update
sudo apt install psad
⚙️
3. Configuración — psad.conf
Modo activo, alertas y bloqueo automático
bash — editar configuración principal
sudo nano /etc/psad/psad.conf

Al final del fichero, verificar o añadir:

/etc/psad/psad.conf — log destination
PSAD_MESSAGES_FILE      /var/log/syslog;

Parámetros clave de configuración

DANGER_LEVEL_ALERT
Nivel mínimo que dispara el envío de alertas
1
DANGER_LEVEL_HIGH
Nivel que activa la alerta de nivel alto (crítico)
4
ENABLE_AUTO_BLOCKING
Activa el bloqueo automático de IPs mediante iptables
Y
psad.conf — fragmento de ejemplo
# Nivel mínimo para alertas
DANGER_LEVEL_ALERT      1;   # Envía alerta si se alcanza Nivel 1

# Nivel para alerta crítica
DANGER_LEVEL_HIGH       4;   # Alerta crítica en Nivel 4

# Bloqueo automático
ENABLE_AUTO_BLOCKING    Y;   # Activa bloqueo automático
💡 Para que PSAD bloquee ante un escaneo básico (ej. 50 paquetes o barrido de 50 hosts), establece DANGER_LEVEL_HIGH a 3 en lugar de 4.
💾
4. Persistencia y Arranque
Guardar reglas de iptables y reiniciar PSAD
bash
# Guardar reglas de iptables (son temporales si no se guardan)
sudo netfilter-persistent save

# Actualizar firmas de PSAD e integrar cadenas en iptables
sudo psad --sig-update

# Reiniciar PSAD para aplicar nueva configuración
sudo systemctl restart psad

# Verificar estado
sudo systemctl status psad
⚠️ Las reglas de iptables son volátiles. Si no ejecutas netfilter-persistent save, se perderán al reiniciar el sistema. Instala iptables-persistent si no lo tienes: sudo apt install iptables-persistent
⚡
Danger Levels — Por Paquetes
Sensibilidad vertical — número total de paquetes desde una IP

Estos niveles se activan según el número total de paquetes registrados por iptables desde una única IP de origen.

NivelDirectivaPaquetes requeridosClasificación
1DANGER_LEVEL15Sonda muy ligera — alerta temprana
2DANGER_LEVEL215Escaneo básico o persistente
3DANGER_LEVEL3150Escaneo más serio
4DANGER_LEVEL41 500Escaneo agresivo o prolongado
5DANGER_LEVEL510 000Escaneo masivo / fuerza bruta
Ejemplo: Si una IP envía 151 paquetes registrados → alcanza Nivel 3. Si DANGER_LEVEL_HIGH está en 4, PSAD no bloqueará automáticamente esa IP todavía.
🌐
Danger Levels — Por Hosts Únicos
Detección de barridos de red (network sweeps)

Estos niveles se activan según el número de IPs de destino únicas escaneadas desde la misma IP de origen. Cruciales para detectar barridos de red.

NivelDirectivaHosts únicosClasificación
1DL1_UNIQUE_HOSTS10Barrido de inicio
2DL2_UNIQUE_HOSTS20Barrido de red pequeña
3DL3_UNIQUE_HOSTS50Barrido de red mediana
4DL4_UNIQUE_HOSTS100Barrido de subred grande
5DL5_UNIQUE_HOSTS500Barrido masivo de red
Ejemplo: Si un host escanea 51 IPs diferentes en la red local → alcanza Nivel 3, independientemente del número de paquetes enviados a cada una.
🎛️
Ajuste Fino — Sensibilidad
Modificar umbrales para bloqueo más agresivo

Para que PSAD bloquee ante escaneos más ligeros, reduce el valor de DANGER_LEVEL3 y ajusta DANGER_LEVEL_HIGH a 3:

psad.conf — danger levels modificados
### Danger levels — paquetes requeridos por nivel
DANGER_LEVEL1   5;
DANGER_LEVEL2   15;
DANGER_LEVEL3   50;    # ← Modificado de 150 a 50 (más sensible)
DANGER_LEVEL4   1500;
DANGER_LEVEL5   10000;
psad.conf — danger levels en el fichero de configuración

// psad.conf — sección de Danger Levels con DANGER_LEVEL3 reducido a 50

bash — aplicar cambios
sudo systemctl restart psad
sudo systemctl start psad
sudo systemctl status psad
🎯
Prueba de Bloqueo con Nmap
IP Ubuntu: 192.168.1.43 — simular escaneo desde máquina externa

Todos los pasos de escaneo se realizan desde la máquina atacante externa, no desde Ubuntu.

1
🖥️ Máquina atacante (host externo)
Ejecutar escaneo Nmap
Escanea los primeros 100 puertos del Ubuntu. Generará suficientes paquetes para activar Danger Level 2 o 3.
2
🐧 Máquina Ubuntu (defensa)
Verificar estado de PSAD
Comprobar que PSAD ha detectado el escaneo y asignado un Danger Level a la IP atacante.
3
🖥️ Máquina atacante
Verificar bloqueo
Intentar hacer ping a Ubuntu. Si el bloqueo es efectivo, los paquetes serán descartados.
1
Ejecutar escaneo Nmap desde máquina atacante
bash — máquina atacante
nmap -sT -p 1-100 192.168.1.43
2
Verificar detección en Ubuntu — psad -H y psad -A
bash — ubuntu (defensa)
# Resumen del estado de PSAD
sudo psad -H

# Análisis detallado
sudo psad -A

# Actualizar firmas e integrar en iptables
sudo psad --sig-update
⚡ Salida esperada de psad -H
Source IP: 192.168.1.X [DANGER LEVEL: 3]
Packets: 87
Scanned ports: 1-100 (TCP)
Auto-blocked: YES — iptables DROP rule inserted
  • Una sección listando la IP de la máquina atacante
  • Un valor para el Danger Level (al menos Nivel 2 o 3 con 100 puertos)
  • Si PSAD activó el bloqueo, la IP aparece en la sección de bloqueo de iptables
3
Verificar bloqueo activo — ping desde el atacante debe fallar
bash — máquina atacante (prueba final)
ping 192.168.1.43
# Si PSAD bloqueó la IP:
# → Request timeout / Destination host unreachable
# → Paquetes perdidos al 100%
# → El bloqueo está activo ✓
✅ Bloqueo confirmado cuando el ping falla completamente. Esto demuestra que PSAD insertó una regla DROP en iptables para la IP atacante al superar el DANGER_LEVEL_HIGH definido en psad.conf.