212.4 - Tareas de seguridad
Introducción
Las tareas de seguridad del sistema incluyen la detección de intrusiones, monitorización de integridad de archivos, auditoría de puertos abiertos, protección contra ataques de fuerza bruta, configuración de límites de recursos y gestión de privilegios elevados.
fail2ban: protección contra fuerza bruta
fail2ban monitoriza archivos de log y bloquea IPs que muestran comportamiento malicioso (intentos fallidos de autenticación).
Arquitectura
- Jails: definen qué servicio proteger, qué log monitorizar y qué acción tomar
- Filtros: expresiones regulares que detectan intentos fallidos en los logs
- Acciones: comandos que se ejecutan al detectar un ataque (ej: bloquear IP con iptables)
Archivos de configuración
| Archivo | Descripción |
|---|---|
/etc/fail2ban/jail.conf | Configuración por defecto (no modificar) |
/etc/fail2ban/jail.local | Configuración personalizada (sobreescribe jail.conf) |
/etc/fail2ban/jail.d/*.conf | Configuración modular por servicio |
/etc/fail2ban/filter.d/ | Filtros (expresiones regulares) |
/etc/fail2ban/action.d/ | Acciones de bloqueo |
Configuración de un jail
# /etc/fail2ban/jail.local
[DEFAULT]
bantime = 3600 # Tiempo de bloqueo en segundos (1 hora)
findtime = 600 # Ventana de tiempo para contar fallos
maxretry = 5 # Intentos máximos antes del bloqueo
ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 7200
[apache-auth]
enabled = true
port = http,https
filter = apache-auth
logpath = /var/log/apache2/error.logPara el examen: Siempre crear/modificar
jail.localen lugar dejail.conf. Los valores enjail.localsobrescriben los dejail.conf. Las actualizaciones del paquete pueden sobrescribirjail.conf.
Comandos de gestión
# Ver estado general
fail2ban-client status
# Ver estado de un jail específico
fail2ban-client status sshd
# Desbloquear una IP
fail2ban-client set sshd unbanip 192.168.1.100
# Bloquear una IP manualmente
fail2ban-client set sshd banip 10.0.0.50
# Recargar configuración
fail2ban-client reloadMonitorización de integridad: AIDE y Tripwire
AIDE (Advanced Intrusion Detection Environment)
AIDE crea una base de datos con huellas digitales de los archivos del sistema y detecta cambios no autorizados.
# Archivo de configuración
/etc/aide/aide.conf
# Inicializar la base de datos
aide --init
# Mover la nueva base de datos
mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db
# Verificar integridad
aide --check
# Actualizar base de datos después de cambios autorizados
aide --updateEjemplo de configuración de AIDE:
# Reglas de verificación
/etc p+i+u+g+sha256
/bin p+i+u+g+sha256
/sbin p+i+u+g+sha256
/usr/bin p+i+u+g+sha256
/usr/sbin p+i+u+g+sha256
# Exclusiones
!/var/log
!/var/cache
!/tmp
Atributos monitorizados: p (permisos), i (inodo), u (usuario), g (grupo), s (tamaño), sha256 (hash), m (mtime).
Tripwire
Tripwire funciona de manera similar a AIDE pero usa un esquema de claves para proteger la configuración y la base de datos.
# Inicializar base de datos
tripwire --init
# Verificar integridad
tripwire --check
# Actualizar base de datos
tripwire --update
# Actualizar política
tripwire --update-policyPara el examen: Tanto AIDE como Tripwire deben inicializarse en un sistema limpio (recién instalado). La base de datos debe almacenarse en un medio de solo lectura o externo para evitar que un atacante la modifique.
Detección de rootkits
chkrootkit
# Escaneo básico
chkrootkit
# Modo silencioso (solo alertas)
chkrootkit -q
# Especificar directorio de binarios alternativos
chkrootkit -p /media/usb/binrkhunter (Rootkit Hunter)
# Actualizar base de datos de firmas
rkhunter --update
# Establecer propiedades del sistema como referencia
rkhunter --propupd
# Escaneo completo
rkhunter --check
# Escaneo sin preguntas interactivas
rkhunter --check --skip-keypress
# Ver solo advertencias
rkhunter --check --report-warnings-onlyArchivo de configuración: /etc/rkhunter.conf
Para el examen: rkhunter debe actualizarse regularmente con
--updatey ejecutar--propupddespués de actualizaciones legítimas del sistema para evitar falsos positivos.
Auditoría de puertos y conexiones de red
nmap: escaneo de puertos
# Escaneo TCP básico
nmap 192.168.1.1
# Escaneo de puertos específicos
nmap -p 22,80,443 192.168.1.1
# Escaneo de rango de puertos
nmap -p 1-1024 192.168.1.1
# Escaneo SYN (sigiloso, requiere root)
nmap -sS 192.168.1.1
# Escaneo de red completa
nmap -sn 192.168.1.0/24
# Detección de servicios y versiones
nmap -sV 192.168.1.1
# Detección de sistema operativo
nmap -O 192.168.1.1netstat y ss: conexiones locales
# Listar puertos en escucha con proceso (netstat)
netstat -tlnp
# Equivalente con ss (más moderno y rápido)
ss -tlnp
# Todas las conexiones TCP
ss -ta
# Conexiones UDP en escucha
ss -ulnp
# Filtrar por puerto
ss -tlnp sport = :22
# Mostrar estadísticas de sockets
ss -s| Opción | Descripción |
|---|---|
-t | Solo TCP |
-u | Solo UDP |
-l | Solo en escucha (listening) |
-n | No resolver nombres |
-p | Mostrar proceso asociado |
-a | Todas las conexiones |
Para el examen:
sses el reemplazo moderno denetstat. Ambos con las opciones-tlnpmuestran los puertos TCP en escucha con el proceso asociado.
Límites de recursos: ulimit y limits.conf
ulimit (límites de shell)
# Ver todos los límites del usuario actual
ulimit -a
# Límite de archivos abiertos (soft)
ulimit -Sn 4096
# Límite de archivos abiertos (hard)
ulimit -Hn 65536
# Límite de tamaño de archivos core
ulimit -c unlimited
# Límite de procesos por usuario
ulimit -u 1024
# Límite de tamaño de archivo (bloques de 512 bytes)
ulimit -f 100000/etc/security/limits.conf
Configuración permanente de límites por usuario o grupo:
# Formato: dominio tipo recurso valor
# dominio: usuario, @grupo, *
# tipo: soft, hard, - (- = ambos)
# Límite de archivos abiertos para todos
* soft nofile 4096
* hard nofile 65536
# Límite de procesos para el grupo developers
@developers soft nproc 2048
@developers hard nproc 4096
# Sin límite de core para admin
admin - core unlimited
# Prioridad máxima de nice para el grupo audio
@audio - rtprio 99Para el examen: Los límites
softpueden ser aumentados por el usuario hasta el valorhard. Solo root puede aumentar los límiteshard. El tipo-establece ambos simultáneamente.
Configuración de sudo
Archivo /etc/sudoers y visudo
Siempre editar con visudo para validar la sintaxis:
# Formato: usuario host=(ejecutar_como) comando
root ALL=(ALL:ALL) ALL
# Grupo admin puede ejecutar cualquier comando
%admin ALL=(ALL:ALL) ALL
# Usuario backup puede ejecutar solo tar sin contraseña
backup ALL=(root) NOPASSWD: /usr/bin/tar, /usr/bin/rsync
# Alias de comandos
Cmnd_Alias NETWORKING = /sbin/ifconfig, /sbin/route, /usr/bin/ip
%netadmin ALL=(root) NETWORKING
# Configuración por defecto
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Defaults logfile="/var/log/sudo.log"
Defaults passwd_timeout=2
Defaults timestamp_timeout=5Directorio /etc/sudoers.d/
# Configuración modular
# Archivo: /etc/sudoers.d/backup
backup ALL=(root) NOPASSWD: /usr/bin/rsync, /usr/bin/tarPara el examen: Nunca editar
/etc/sudoersdirectamente con un editor de texto.visudovalida la sintaxis antes de guardar, evitando dejar el archivo en un estado inválido que podría bloquear el acceso sudo.
Sistema de auditoría (auditd)
El demonio auditd registra eventos del sistema para cumplimiento normativo y detección de intrusiones.
Configuración de reglas
# Monitorizar cambios en /etc/passwd
auditctl -w /etc/passwd -p wa -k passwd_changes
# Monitorizar ejecución de comandos privilegiados
auditctl -w /usr/bin/sudo -p x -k sudo_exec
# Monitorizar acceso a directorio de configuración
auditctl -w /etc/ssh/ -p rwa -k ssh_config
# Regla de llamada al sistema (syscall)
auditctl -a always,exit -F arch=b64 -S execve -k command_exec
# Listar reglas activas
auditctl -l
# Eliminar todas las reglas
auditctl -DPermisos monitorizados: r (lectura), w (escritura), x (ejecución), a (atributos).
Consulta de registros
# Buscar eventos por clave
ausearch -k passwd_changes
# Buscar por usuario
ausearch -ua 1000
# Buscar por tipo de evento
ausearch -m USER_LOGIN
# Generar informe resumido
aureport
# Informe de autenticaciones
aureport -au
# Informe de modificaciones de archivos
aureport -f
# Informe de eventos fallidos
aureport --failedReglas persistentes
Las reglas se almacenan en /etc/audit/rules.d/audit.rules:
# Reglas permanentes
-w /etc/passwd -p wa -k identity
-w /etc/group -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/sudoers -p wa -k sudo_rules
-a always,exit -F arch=b64 -S execve -k commandsLynis: auditoría de seguridad
Lynis es una herramienta de auditoría de seguridad que evalúa la configuración del sistema.
# Auditoría completa del sistema
lynis audit system
# Auditoría con perfil específico
lynis audit system --profile /etc/lynis/custom.prf
# Solo verificar actualizaciones
lynis update info
# Ver pruebas disponibles
lynis show testsLynis genera un informe con puntuación de “hardening index” y sugerencias de mejora. Los resultados se almacenan en /var/log/lynis.log y /var/log/lynis-report.dat.
Para el examen: Lynis es una herramienta de auditoría no intrusiva que solo analiza y reporta. No modifica la configuración del sistema automáticamente.
Trampas del examen
Errores comunes y distinciones criticas que LPI suele evaluar en este subtema:
-
fail2ban: editar
jail.local, NUNCAjail.conf—jail.confse sobreescribe con actualizaciones del paquete.jail.localsobreescribe los valores dejail.confy persiste entre actualizaciones. El examen puede preguntar cual archivo modificar. -
bantimees el tiempo de bloqueo,findtimees la ventana de deteccion —maxretry=5confindtime=600significa 5 intentos fallidos en 10 minutos para ser bloqueado.bantime=3600bloquea durante 1 hora. Confundirfindtimeconbantimees comun. -
AIDE y Tripwire deben inicializarse en un sistema LIMPIO —
aide --initotripwire --initcrean la base de datos de referencia. Si se ejecutan en un sistema ya comprometido, la referencia incluira los archivos maliciosos. La base de datos debe guardarse en medio externo o de solo lectura. -
aide --checkverifica,aide --updateactualiza la base de datos — despues de cambios legitimos (actualizaciones del sistema), hay que ejecutar--updatepara que AIDE no genere falsos positivos en la siguiente verificacion. -
rkhunter --propupddespues de actualizaciones del sistema — tras actualizar paquetes legitimamente, ejecutar--propupdpara que rkhunter registre los nuevos hashes como validos. Sin esto, cada binario actualizado genera una alerta falsa. -
ss -tlnpes el reemplazo moderno denetstat -tlnp— ambos muestran puertos TCP en escucha con el proceso asociado.sses mas rapido y esta disponible en sistemas modernos. El examen puede preguntar por ambos comandos. -
nmap -sS(SYN scan) requiere privilegios de root — el escaneo SYN es “sigiloso” porque no completa el handshake TCP.nmapsin opciones usa TCP connect (no requiere root).-sVdetecta versiones de servicios. -
visudoSIEMPRE para editar/etc/sudoers—visudovalida la sintaxis antes de guardar. Editar directamente con un editor puede dejar el archivo corrupto y bloquear todo acceso sudo. Tambien se pueden usar archivos modulares en/etc/sudoers.d/. -
auditctl -wpara monitorizar archivos,-apara syscalls —-w /etc/passwd -p wamonitoriza escrituras y cambios de atributos en passwd.-a always,exit -S execvemonitoriza ejecuciones de programas. Son sintaxis diferentes para objetivos diferentes. -
NOPASSWDen sudoers: posicion importa —usuario ALL=(root) NOPASSWD: /usr/bin/tarpermite ejecutar solo tar sin contrasena.NOPASSWD: ALLpermite TODO sin contrasena, lo cual es un riesgo de seguridad grave.