Cómo Monitorear y Auditar Conexiones SSH en Servidores Linux: Una Guía Práctica de Seguridad

En el panorama actual de ciberseguridad, donde los ataques de fuerza bruta y las intrusiones no autorizadas están en constante aumento, monitorear quién accede a nuestros servidores se ha convertido en una práctica esencial. El protocolo SSH (Secure Shell), aunque diseñado para ser seguro, sigue siendo uno de los vectores de ataque más comunes contra servidores Linux.

El Problema: Visibilidad en los Accesos SSH

Los administradores de sistemas frecuentemente se enfrentan a preguntas críticas: ¿quién se está conectando a mi servidor?, ¿desde qué ubicaciones?, ¿hay intentos de acceso sospechosos? Sin las herramientas adecuadas, estas preguntas pueden quedar sin respuesta hasta que sea demasiado tarde.

«La seguridad que no se puede medir, no se puede mejorar», es un principio fundamental en la administración de sistemas moderna. Por ello, implementar un sistema de monitoreo efectivo de conexiones SSH no es solo una buena práctica, sino una necesidad imperante.

Configurando el Monitoreo: Más Allá del Puerto Estándar

Aunque SSH tradicionalmente opera en el puerto 22, muchos administradores optan por cambiar este puerto como medida de seguridad básica. Sin embargo, los principios de monitoreo se mantienen constantes, independientemente del puerto utilizado.

Abriendo el Puerto con iptables

Para nuestro ejemplo práctico, utilizaremos el puerto estándar 22, pero estos mismos comandos son aplicables a cualquier puerto personalizado:

# Para puerto estándar SSH (22)
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# Para cualquier puerto personalizado (ejemplo: 65432)
sudo iptables -A INPUT -p tcp --dport 65432 -j ACCEPT
Lenguaje del código: PHP (php)

Nota importante: Si tu servidor utiliza un puerto SSH personalizado, simplemente reemplaza «22» por tu puerto específico en todos los comandos siguientes.

Técnicas de Monitoreo en Tiempo Real

1. Análisis de Logs del Sistema

El archivo /var/log/auth.log en sistemas Ubuntu/Debian (o /var/log/secure en CentOS/RHEL) es la fuente principal de información sobre autenticaciones SSH:

# Revisar conexiones SSH recientes en puerto 22
sudo grep "sshd.*port 22" /var/log/auth.log | tail -20

# Filtrar solo conexiones exitosas
sudo grep "Accepted password\|Accepted publickey" /var/log/auth.log | tail -10

# Identificar intentos de acceso fallidos
sudo grep "Failed password" /var/log/auth.log | tail -15
Lenguaje del código: PHP (php)

2. Monitoreo de Conexiones Activas

Para obtener una vista en tiempo real de quién está conectado:

# Ver conexiones SSH activas
sudo netstat -tnpa | grep :22
# o usando la herramienta más moderna
sudo ss -tnp | grep :22

# Mostrar usuarios conectados actualmente
w
who
Lenguaje del código: PHP (php)

3. Análisis Estadístico de Conexiones

Una de las técnicas más reveladoras es el análisis estadístico de los intentos de conexión:

# Contar intentos por dirección IP
sudo grep "sshd" /var/log/auth.log | grep -oE "([0-9]{1,3}\.){3}[0-9]{1,3}" | sort | uniq -c | sort -nr | head -10

# Ver patrones de conexión por hora
sudo grep "$(date '+%b %d')" /var/log/auth.log | grep "sshd" | awk '{print $3}' | cut -d: -f1 | sort | uniq -c
Lenguaje del código: PHP (php)

Herramientas Avanzadas de Monitoreo

Script de Monitoreo Automatizado

Para administradores que requieren informes regulares, aquí presentamos un script completo:

#!/bin/bash
# ssh_monitor.sh - Monitor de conexiones SSH

echo "=== REPORTE DE SEGURIDAD SSH - $(date) ==="
echo

echo "1. CONEXIONES ACTIVAS:"
sudo ss -tnp | grep :22 | awk '{print "  - Desde:", $5, "hacia:", $4}'
echo

echo "2. ÚLTIMAS CONEXIONES EXITOSAS:"
sudo grep "Accepted" /var/log/auth.log | tail -5 | while read line; do
    echo "  - $line"
done
echo

echo "3. TOP 5 IPs CON MÁS INTENTOS DE CONEXIÓN:"
sudo grep "sshd" /var/log/auth.log | grep -oE "([0-9]{1,3}\.){3}[0-9]{1,3}" | sort | uniq -c | sort -nr | head -5 | while read count ip; do
    echo "  - $ip: $count intentos"
    # Opcional: información de geolocalización
    whois $ip | grep -i "country\|netname" | head -2 | sed 's/^/    /'
done
Lenguaje del código: PHP (php)

Monitoreo Continuo con journalctl

Para sistemas que utilizan systemd, journalctl ofrece capacidades avanzadas:

# Seguir logs SSH en tiempo real
sudo journalctl -u ssh -f

# Ver logs de SSH de las últimas 24 horas
sudo journalctl -u ssh --since "24 hours ago"

# Filtrar por eventos específicos
sudo journalctl -u ssh --since "1 hour ago" | grep "Failed\|Accepted"
Lenguaje del código: PHP (php)

Detección de Amenazas y Patrones Sospechosos

Indicadores de Compromiso

Los administradores deben estar atentos a estos patrones:

  1. Múltiples intentos fallidos desde la misma IP
  2. Conexiones desde ubicaciones geográficas inusuales
  3. Intentos de conexión fuera del horario laboral
  4. Uso de nombres de usuario comunes (admin, root, test)

Automatización de Alertas

# Script para detectar ataques de fuerza bruta
#!/bin/bash
THRESHOLD=10
LOGFILE="/var/log/auth.log"

# Buscar IPs con más de X intentos fallidos en la última hora
sudo grep "$(date '+%b %d %H:')" $LOGFILE | grep "Failed password" | \
awk '{print $(NF-3)}' | sort | uniq -c | \
while read count ip; do
    if [ $count -gt $THRESHOLD ]; then
        echo "ALERTA: $ip ha intentado $count conexiones fallidas en la última hora"
        # Aquí podrías enviar una notificación por email o Slack
    fi
done
Lenguaje del código: PHP (php)

Aplicabilidad Universal: Más Allá del Puerto 22

Es crucial entender que estos métodos de monitoreo son completamente escalables y aplicables a cualquier configuración SSH:

  • Puerto personalizado (ej: 2222): Solo cambia :22 por :2222 en los comandos
  • Múltiples puertos SSH: Aplica el monitoreo a cada puerto individualmente
  • Configuraciones con balanceadores: Adapta los filtros de log según tu configuración

Ejemplo para Puerto Personalizado

# Para SSH en puerto 2222
sudo ss -tnp | grep :2222
sudo grep "port 2222" /var/log/auth.log | grep "Accepted"
Lenguaje del código: PHP (php)

Mejores Prácticas y Recomendaciones

Configuración de Logging Avanzado

Para un monitoreo más detallado, considera ajustar la configuración SSH:

# En /etc/ssh/sshd_config
LogLevel VERBOSE
# Esto proporcionará información más detallada en los logs
Lenguaje del código: PHP (php)

Integración con Herramientas de Monitoreo

Los datos recopilados pueden integrarse fácilmente con:

  • Elastic Stack (ELK) para visualización avanzada
  • Prometheus + Grafana para métricas en tiempo real
  • Splunk para análisis empresarial
  • Nagios/Zabbix para alertas automáticas

Consideraciones de Rendimiento y Almacenamiento

El monitoreo intensivo puede generar grandes volúmenes de logs. Implementa estrategias de rotación:

# Configurar logrotate para auth.log
sudo nano /etc/logrotate.d/rsyslog

# Ejemplo de configuración
/var/log/auth.log {
    daily
    rotate 30
    compress
    delaycompress
    missingok
    postrotate
        systemctl reload rsyslog
    endscript
}
Lenguaje del código: PHP (php)

Conclusión: Seguridad Proactiva vs. Reactiva

El monitoreo efectivo de conexiones SSH representa la diferencia entre una postura de seguridad reactiva y proactiva. Las herramientas y técnicas presentadas en este artículo permiten a los administradores mantener visibilidad completa sobre el acceso a sus sistemas, independientemente del puerto utilizado.

La implementación de estos métodos de monitoreo no solo mejora la postura de seguridad, sino que también proporciona datos valiosos para auditorías de cumplimiento y análisis forense en caso de incidentes.

Recordatorio importante: Estas técnicas son aplicables a cualquier puerto SSH, simplemente ajustando los números de puerto en los comandos presentados. La seguridad no debe depender únicamente del cambio de puerto, sino de un monitoreo continuo y efectivo.


Para mantenerte actualizado sobre las mejores prácticas de seguridad en sistemas Linux, considera implementar estas técnicas de monitoreo como parte de tu estrategia integral de ciberseguridad.

Suscríbete al boletín SysAdmin

Este es tu recurso para las últimas noticias y consejos sobre administración de sistemas, Linux, Windows, cloud computing, seguridad de la nube, etc. Lo enviamos 2 días a la semana.

¡Apúntate a nuestro newsletter!


– patrocinadores –

Noticias destacadas

– patrocinadores –

¡SUSCRÍBETE AL BOLETÍN
DE LOS SYSADMINS!

Scroll al inicio
×