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 lee los logs que genera el firewall. Sin logging activo, PSAD no tiene datos que analizar.
Con UFW (recomendado en Ubuntu)
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:
sudo iptables -A INPUT -j LOG --log-prefix "IPTABLES DROP: "
sudo apt update sudo apt install psad
sudo nano /etc/psad/psad.conf
Al final del fichero, verificar o añadir:
PSAD_MESSAGES_FILE /var/log/syslog;
Parámetros clave de configuración
# 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
DANGER_LEVEL_HIGH a 3 en lugar de 4.# 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
netfilter-persistent save, se perderán al reiniciar el sistema. Instala iptables-persistent si no lo tienes: sudo apt install iptables-persistentEstos niveles se activan según el número total de paquetes registrados por iptables desde una única IP de origen.
| Nivel | Directiva | Paquetes requeridos | Clasificación |
|---|---|---|---|
| 1 | DANGER_LEVEL1 | 5 | Sonda muy ligera — alerta temprana |
| 2 | DANGER_LEVEL2 | 15 | Escaneo básico o persistente |
| 3 | DANGER_LEVEL3 | 150 | Escaneo más serio |
| 4 | DANGER_LEVEL4 | 1 500 | Escaneo agresivo o prolongado |
| 5 | DANGER_LEVEL5 | 10 000 | Escaneo masivo / fuerza bruta |
DANGER_LEVEL_HIGH está en 4, PSAD no bloqueará automáticamente esa IP todavía.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.
| Nivel | Directiva | Hosts únicos | Clasificación |
|---|---|---|---|
| 1 | DL1_UNIQUE_HOSTS | 10 | Barrido de inicio |
| 2 | DL2_UNIQUE_HOSTS | 20 | Barrido de red pequeña |
| 3 | DL3_UNIQUE_HOSTS | 50 | Barrido de red mediana |
| 4 | DL4_UNIQUE_HOSTS | 100 | Barrido de subred grande |
| 5 | DL5_UNIQUE_HOSTS | 500 | Barrido masivo de red |
Para que PSAD bloquee ante escaneos más ligeros, reduce el valor de DANGER_LEVEL3 y ajusta DANGER_LEVEL_HIGH a 3:
### 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 — sección de Danger Levels con DANGER_LEVEL3 reducido a 50
sudo systemctl restart psad sudo systemctl start psad sudo systemctl status psad
Todos los pasos de escaneo se realizan desde la máquina atacante externa, no desde Ubuntu.
nmap -sT -p 1-100 192.168.1.43
# Resumen del estado de PSAD sudo psad -H # Análisis detallado sudo psad -A # Actualizar firmas e integrar en iptables sudo psad --sig-update
- 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
ping 192.168.1.43
# Si PSAD bloqueó la IP:
# → Request timeout / Destination host unreachable
# → Paquetes perdidos al 100%
# → El bloqueo está activo ✓DROP en iptables para la IP atacante al superar el DANGER_LEVEL_HIGH definido en psad.conf.