Cómo proteger tu servidor SSH con SSHGuard: guía práctica

El acceso SSH es uno de los puntos de entrada más críticos para la administración remota de servidores. Aunque ofrece una conexión encriptada y segura, su vulnerabilidad frente a ataques de fuerza bruta y accesos no autorizados requiere medidas de protección adicionales. En este contexto, SSHGuard se posiciona como una herramienta efectiva para proteger servidores mediante la detección y bloqueo automático de actividades sospechosas. A continuación, explicamos qué es SSHGuard, cómo funciona y cómo configurarlo para reforzar la seguridad de tu servidor.

¿Qué es SSHGuard?

SSHGuard es un sistema de prevención de intrusiones basado en registros (logs) que protege servidores de ataques de fuerza bruta, especialmente aquellos dirigidos al servicio SSH. Analiza archivos de registro en busca de patrones de comportamiento malicioso, como múltiples intentos fallidos de inicio de sesión. Cuando detecta actividad sospechosa, bloquea automáticamente las direcciones IP ofensivas utilizando reglas de firewall.

Además de SSH, SSHGuard puede proteger otros servicios como servidores de correo y FTP. Es compatible con varios sistemas de firewall, incluidos UFW, firewalld, iptables, nftables y PF, lo que lo convierte en una solución flexible para diferentes entornos.


Principales diferencias entre SSHGuard y Fail2Ban

Aunque SSHGuard y Fail2Ban tienen objetivos similares, presentan diferencias clave:

  • Método de monitoreo:
    SSHGuard analiza directamente los registros del sistema sin necesidad de expresiones regulares, mientras que Fail2Ban utiliza expresiones regulares para identificar patrones de abuso.
  • Flexibilidad:
    SSHGuard es ideal para proteger SSH y algunos servicios adicionales, mientras que Fail2Ban ofrece configuraciones más personalizables para una mayor variedad de servicios.
  • Desempeño:
    SSHGuard, escrito en C, ofrece mayor rapidez y eficiencia en el uso de recursos, mientras que Fail2Ban, desarrollado en Python, es más adaptable gracias a las bibliotecas extensas de este lenguaje.

Cómo instalar SSHGuard

La instalación varía según la distribución de Linux que utilices:

En Debian, Ubuntu o Linux Mint

sudo apt install sshguard
sudo systemctl enable --now sshguard.service

En Fedora

sudo dnf install sshguard
sudo systemctl enable --now sshguard.service

En AlmaLinux o Rocky Linux

SSHGuard está disponible en el repositorio EPEL. Para instalarlo:

sudo dnf install epel-release
sudo dnf install sshguard
sudo systemctl enable --now sshguard.service

Configuración de SSHGuard

El archivo de configuración principal de SSHGuard permite personalizar su comportamiento y reglas. Su ubicación depende de la distribución:

  • Debian y derivados: /etc/sshguard/sshguard.conf
  • RHEL, Fedora y derivados: /etc/sshguard.conf

Algunas opciones comunes que puedes configurar son:

  • BACKEND: Define el backend de firewall a utilizar (iptables, nftables, firewalld, etc.).
  • THRESHOLD: Número de intentos fallidos antes de bloquear una IP.
  • BLOCK_TIME: Duración (en segundos) del bloqueo.
  • WHITELIST_FILE: Ruta al archivo de direcciones IP permitidas, que nunca serán bloqueadas.

Configuración según el firewall utilizado

1. UFW o nftables

Aunque SSHGuard no tiene soporte directo para UFW, este actúa como una capa para manejar las reglas de iptables/nftables. Configura el backend como sshg-fw-nft-sets en el archivo sshguard.conf.

Actualiza las reglas de UFW para permitir que SSHGuard gestione las conexiones:

sudo nano /etc/ufw/before.rules
# Añadir las siguientes líneas después de "allow all on loopback":
-A ufw-before-input -j SSHGUARD

Reinicia UFW y SSHGuard:

sudo systemctl restart ufw
sudo systemctl restart sshguard

2. iptables

Configura el backend como sshg-fw-iptables en el archivo sshguard.conf y crea una nueva cadena de iptables:

sudo iptables -N sshguard
sudo iptables -A INPUT -p tcp --dport 22 -j sshguard
sudo iptables-save -f /etc/iptables/rules.v4
sudo systemctl restart sshguard

3. firewalld

Configura el backend como sshg-fw-firewalld en el archivo sshguard.conf. SSHGuard gestionará automáticamente las reglas sshguard4 (IPv4) y sshguard6 (IPv6). Para visualizar las IP bloqueadas:

sudo firewall-cmd --info-ipset=sshguard4
sudo firewall-cmd --info-ipset=sshguard6

Whitelisting: Excluyendo IPs confiables

Para evitar bloquear direcciones IP confiables, edita el archivo de lista blanca:

  • Debian: /etc/sshguard/whitelist
  • RHEL: /etc/sshguard.whitelist

Añade las IPs que desees excluir, por ejemplo:

192.168.0.1
192.168.1.0/24

Reinicia SSHGuard:

sudo systemctl restart sshguard

Monitorización y pruebas

Para verificar qué direcciones están bloqueadas, usa los siguientes comandos según tu configuración:

  • nftables:
sudo nft list table sshguard
  • iptables:
sudo iptables -L sshguard -n

Para monitorizar la actividad de SSHGuard en tiempo real:

sudo journalctl -u sshguard -f

Conclusión

SSHGuard es una herramienta ligera y eficaz para proteger servidores SSH contra ataques de fuerza bruta. Su configuración sencilla y soporte para múltiples firewalls lo convierten en una opción ideal para administradores que buscan una solución eficiente y fácil de implementar. Además, su capacidad para trabajar con IPv6, múltiples formatos de logs y configuraciones personalizadas garantiza un nivel de seguridad adaptable a diferentes necesidades.

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