Logs de seguridad: /var/log/auth.log, last, auditd
Introducción
Monitorizar los logs de seguridad es esencial para detectar intrusiones, auditar accesos y cumplir con requisitos de conformidad. Linux registra los eventos de autenticación, escalada de privilegios y actividad de usuarios en varios ficheros y en el journal.
/var/log/auth.log y /var/log/secure
El fichero de autenticación varía según la distribución:
- Debian/Ubuntu:
/var/log/auth.log - Red Hat/CentOS/Fedora:
/var/log/secure - Sistemas con systemd puro:
journalctl -u ssh(sin fichero en disco)
# Seguir el log en tiempo real
tail -f /var/log/auth.log
# Ver con journalctl
journalctl -u ssh -f
journalctl -u sshd --since "2025-05-09 00:00:00"
# Buscar intentos fallidos de login
grep "Failed password" /var/log/auth.log
grep "Invalid user" /var/log/auth.log
# Buscar logins exitosos
grep "Accepted" /var/log/auth.log
grep "session opened" /var/log/auth.log
# Contar intentos fallidos por IP (top 10 atacantes)
grep "Failed password" /var/log/auth.log \
| awk '{print $(NF-3)}' \
| sort | uniq -c | sort -rn | head -10
# Buscar uso de sudo
grep "sudo" /var/log/auth.log
grep "COMMAND" /var/log/auth.log # comandos ejecutados con sudo
# Buscar cambios de contraseña
grep "passwd" /var/log/auth.log
# Rotación de logs (gestionada por logrotate)
ls /var/log/auth.log*
# auth.log auth.log.1 auth.log.2.gz auth.log.3.gz ...
last, lastb, who, w — Historial de sesiones
# last — historial de logins (lee /var/log/wtmp)
last
last -n 20 # últimas 20 entradas
last usuario # sesiones de un usuario concreto
last reboot # historial de reinicios
last -F # mostrar fechas completas con hora
# lastb — intentos fallidos de login (lee /var/log/btmp, requiere root)
lastb
lastb -n 20
lastb | awk '{print $3}' | sort | uniq -c | sort -rn | head # IPs más activas
# lastlog — último login de cada usuario del sistema
lastlog
lastlog -u usuario # solo un usuario
# who — usuarios conectados ahora mismo
who
who -a # información extendida
# w — usuarios conectados y qué están haciendo
w
w usuario # solo un usuario
# users — lista compacta de usuarios conectados
users
auditd — Sistema de auditoría del kernel
auditd registra eventos a nivel de kernel: accesos a ficheros, llamadas al sistema, cambios de privilegios,
ejecución de comandos. Es obligatorio en entornos con requisitos de conformidad (PCI-DSS, SOX, CIS Benchmarks).
# Instalación
apt install auditd audispd-plugins # Debian/Ubuntu
dnf install audit # Red Hat/CentOS
# Habilitar
systemctl enable --now auditd
# Log de auditoría
/var/log/audit/audit.log
# Configuración
/etc/audit/auditd.conf
/etc/audit/rules.d/audit.rules # reglas de auditoría
auditctl — Gestionar reglas en tiempo real:
# Ver reglas activas
auditctl -l
# Auditar accesos a un fichero sensible
auditctl -w /etc/passwd -p wa -k cambios_passwd
# -w: fichero a vigilar
# -p wa: permisos a auditar (w=escritura, a=atributos, r=lectura, x=ejecución)
# -k: etiqueta para buscar en los logs
# Auditar el directorio /etc/ssh
auditctl -w /etc/ssh -p wa -k config_ssh
# Auditar ejecución de comandos por un usuario
auditctl -a always,exit -F arch=b64 -F uid=1001 -S execve -k usuario_1001
# Hacer las reglas persistentes (fichero de reglas)
# /etc/audit/rules.d/audit.rules
-w /etc/passwd -p wa -k cambios_passwd
-w /etc/shadow -p wa -k cambios_shadow
-w /etc/sudoers -p wa -k cambios_sudoers
-w /etc/ssh/sshd_config -p wa -k config_ssh
ausearch — Buscar en los logs de auditoría:
# Buscar por etiqueta (key)
ausearch -k cambios_passwd
ausearch -k config_ssh
# Buscar por usuario
ausearch -ua 1001 # por UID
ausearch -ua usuario # por nombre
# Buscar por tipo de evento
ausearch -m USER_LOGIN
ausearch -m EXECVE
# Buscar en un rango de tiempo
ausearch --start 05/09/2025 08:00:00 --end 05/09/2025 18:00:00
# Formato interpretable
ausearch -k cambios_passwd -i # -i: interpretar UIDs como nombres
aureport — Informes de auditoría:
# Resumen general
aureport
# Informe de intentos fallidos de autenticación
aureport --auth --failed
# Informe de comandos ejecutados
aureport --exec
# Informe de ficheros accedidos
aureport --file
# Informe de usuarios
aureport --user
# Últimas 100 entradas de eventos de login
aureport -au -i --failed
Patrones de análisis habituales
# Detectar escaneo de puertos SSH (muchos "Invalid user" de la misma IP)
grep "Invalid user" /var/log/auth.log \
| awk '{print $(NF-3)}' | sort | uniq -c | sort -rn
# Ver si root ha conseguido conectarse por SSH
grep "Accepted.*root" /var/log/auth.log
# Detectar escalada de privilegios fallida
grep "authentication failure.*sudo" /var/log/auth.log
# Listar comandos ejecutados con sudo hoy
grep "$(date '+%b %e')" /var/log/auth.log | grep "COMMAND"
# Verificar si hay usuarios conectados con sesiones antiguas
w | awk 'NR>2 {print $1, $5}' # usuario y tiempo idle
# Resumen rápido del estado de seguridad
echo "=== Logins exitosos ===" && grep "Accepted" /var/log/auth.log | tail -5
echo "=== Intentos fallidos ===" && grep "Failed" /var/log/auth.log | wc -l
echo "=== IPs bloqueadas por fail2ban ===" && fail2ban-client status sshd 2>/dev/null