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.