GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo bloquear ataques de fuerza bruta SSH usando SSHGUARD

SSHGuard es un demonio de código abierto que protege a los hosts de los ataques de fuerza bruta. Lo logra a través del monitoreo y la agregación de registros del sistema, la detección de ataques y el bloqueo de atacantes utilizando uno de los backends de firewall de Linux:iptables, FirewallD, pf e ipfw.

Inicialmente diseñado para proporcionar una capa adicional de protección para el servicio OpenSSH, SSHGuard también protege una amplia gama de servicios como Vsftpd y Postfix. Reconoce varios formatos de registro, incluidos Syslog, Syslog-ng y archivos de registro sin formato.

SSHGuard es bastante similar a Fail2ban solo que está escrito en C (Fail2ban está escrito en Python), es más ligero y ofrece menos funciones.

En esta guía, demostraremos cómo puede instalar y configurar SSHGuard para bloquear ataques de fuerza bruta SSH en su servidor Linux.

Paso 1:Instale SSHGuard en Linux

Comenzamos con la instalación de SSHGuard en Linux.

Instalar SSHGuard en Debian/Ubuntu

Primero, actualice las listas de paquetes y luego instale SSHGuard desde los repositorios predeterminados usando el administrador de paquetes apt.

$ sudo apt update
$ sudo apt install sshguard

Una vez instalado, el servicio SSHGuard se inicia automáticamente y puede verificarlo con el comando:

$ sudo systemctl status sshguard

Instalar SSHGuard en sistemas Yum/RHEL

Para distribuciones basadas en RHEL como CentOS, comience instalando el repositorio EPEL como se indica en el siguiente comando.

$ sudo yum install epel-release

O

$ sudo dnf install epel-release

Con EPEL en su lugar, continúe e instale SSHGuard usando el administrador de paquetes dnf.

$ sudo dnf install sshguard

Una vez instalado, inicie y configure SSHGuard para que se inicie al iniciar o reiniciar el sistema.

$ sudo systemctl start sshguard
$ sudo systemctl enable sshguard

Asegúrese de verificar que SSHGuard se está ejecutando como se esperaba.

$ sudo systemctl status sshguard

Paso 2:Configuración de SSHGuard en Linux

SSHGuard supervisa activamente los archivos de registro /var/log/auth.log, /var/log/secure systemd journal y syslog-ng para detectar intentos fallidos de inicio de sesión.

Por cada intento fallido de inicio de sesión, el host remoto se bloquea por un período de tiempo limitado que, de forma predeterminada, se establece en 120 segundos. A partir de entonces, el tiempo de prohibición aumenta en un factor de 1,5 con cada intento de inicio de sesión fallido sucesivo.

El tiempo que los hosts infractores están prohibidos, además de otros parámetros, se especifica en el archivo sshguard.conf. Puede acceder al archivo de configuración usando el editor vim como se muestra.

$ sudo vim /etc/sshguard/sshguard.conf

En las distribuciones basadas en RHEL, el archivo de configuración se encuentra en la siguiente ruta.

$ sudo vim /etc/sshguard.conf

Aquí hay una muestra del archivo de configuración visto desde Ubuntu/Debian.

Centrándonos en las principales opciones:

  • El BACKEND directiva apunta a la ruta completa del ejecutable backend. En este ejemplo, vemos que IPtables está configurado como el servidor de seguridad predeterminado.
  • El UMBRAL La directiva bloquea a los atacantes cuando su puntaje de ataque excede el valor especificado.
  • El BLOCK_TIME La opción es la cantidad de segundos que un atacante está bloqueado después de cada intento de inicio de sesión fallido sucesivo. De forma predeterminada, se establece en 120 después del primer intento. Esto aumenta con cada intento de inicio de sesión fallido sucesivo.
  • El TIEMPO_DETECCIÓN La opción hace referencia al tiempo en segundos durante el cual el sistema registra o recuerda al atacante antes de que se restablezca su puntuación.
  • El archivo_LISTA_BLANCA La opción apunta a la ruta completa del archivo de la lista blanca que contiene hosts que no deberían estar en la lista negra.

Paso 3:Configurar SSHGuard para bloquear ataques de fuerza bruta SSH

Para protegerse de los ataques de fuerza bruta, debe configurar los siguientes firewalls para que funcionen con sshguard.

Bloquear ataques SSH mediante UFW

Si tiene UFW instalado y habilitado en su sistema Ubuntu/Debian, modifique el archivo /etc/ufw/before.rules.

$ sudo vim etc/ufw/before.rules

$ sudo vim etc/ufw/before.rules

Agregue las siguientes líneas justo después de la sección "permitir todo en loopback".

# allow all on loopback
-A ufw-before-input -i lo -j ACCEPT
-A ufw-before-output -o lo -j ACCEPT

# hand off control for sshd to sshguard
:sshguard - [0:0]
-A ufw-before-input -p tcp --dport 22 -j sshguard

Guarde el archivo y reinicie UFW.

$ sudo systemctl restart ufw

Ahora intente iniciar sesión en el servidor desde un sistema diferente con las credenciales incorrectas y observe que quedará bloqueado durante 120 segundos después del primer intento fallido de inicio de sesión.

Puede verificar esto revisando el archivo de registro auth.log.

$ sudo tail -f  /var/log/auth.log

Después del siguiente intento fallido de registro, el tiempo de bloqueo aumenta a 240 segundos, luego a 480 segundos, luego a 960 segundos y así sucesivamente.

Bloquear ataques SSH usando Firewalld

Si está ejecutando firewalld, asegúrese de que esté configurado y habilitado. Luego ejecute el siguiente comando para habilitar sshguard en su zona preferida.

$ sudo firewall-cmd --permanent --zone=public --add-rich-rule="rule source ipset=sshguard4 drop"

Para aplicar los cambios, vuelva a cargar Firewalld y sshguard.

$ sudo firewall-cmd --reload
$ sudo systemctl restart sshguard

Luego verifique la regla de la siguiente manera:

$ sudo firewall-cmd —-info-ipset=sshguard4

Bloquear ataques SSH usando IPtables

Si aún usa Iptables, primero, cree una nueva regla de cadena para sshguard en Iptables para comenzar a bloquear invitados no deseados.

# iptables -N sshguard

A continuación, actualice la cadena INPUT para dirigir el tráfico a sshguard y bloquee todo el tráfico de personas malintencionadas.

# iptables -A INPUT -j sshguard

Para bloquear puertos específicos como SSH, POP e IMAP de los abusadores, ejecute el comando:

# iptables -A INPUT -m multiport -p tcp --destination-ports 22,110,143 -j sshguard

Y finalmente, guarde la regla para que los cambios surtan efecto.

# iptables-save > /etc/iptables/iptables.rules

Paso 4:Cómo incluir en la lista blanca los hosts bloqueados por SSH

Para incluir en la lista blanca un host bloqueado, simplemente especifique su nombre de host o dirección IP en el archivo de la lista blanca que se encuentra en:

/etc/sshguard/whitelist - Ubuntu/Debian 
/etc/sshguard.whitelist - RHEL-based distros

Luego, asegúrese de reiniciar el demonio sshguard y el servidor de seguridad para que se apliquen los cambios.

En esta guía, demostramos cómo puede bloquear ataques SSH Bruteforce usando SSHGuard en sistemas Linux.

Consulte nuestra página de inicio para obtener más guías.


Linux
  1. Ssh:¿cómo conectarse a una PC a través de otra PC usando Ssh?

  2. Ssh:¿cómo acelerar el inicio de sesión de Ssh demasiado lento?

  3. ¿Cómo enviar Ssh a un servidor usando otro servidor?

  4. ¿Cómo restablecer la contraseña de administrador de Plesk usando SSH en el servidor Linux?

  5. ¿Cómo fuerzo la separación de Screen de otra sesión SSH?

Cómo realizar una copia de seguridad remota de Linux mediante SSH

Cómo:cPHulk Brute Force Protection en cPanel y WHM

Cómo generar y usar una clave SSH usando PuTTY

¿Cómo bloquear una dirección IP usando .htaccess?

Cómo encriptar dispositivos de bloque usando LUKS en Linux

Cómo crear una VM remota usando el controlador SSH genérico de docker-machine