Restringir los intentos de inicio de sesión de ssh con fail2ban (solución para los bots que intentan forzar las contraseñas a través de ssh)

imagen



SSH es bastante seguro, especialmente si toma precauciones razonables, como requerir autenticación basada en pares de claves. Sin embargo, todavía hay muchos bots en la naturaleza que intentan encontrar hosts vulnerables al intentar iniciar sesión con nombres de usuario y contraseñas comunes comprometidos, como root / root o admin / admin. Si bien es poco probable que tengan éxito, seguirán usando su ancho de banda y generarán cantidades masivas de registros.



Una forma de minimizar los intentos de inicio de sesión por fuerza bruta es cambiar el puerto predeterminado en el que escucha SSH. Sin embargo, esto no se considera una buena práctica; en primer lugar, recuerde que cada vez que se conecten al servidor, deben configurar el puerto correcto, que no sea el predeterminado. Además, puede crear otra vulnerabilidad de seguridad si el puerto seleccionado es mayor que 1024. Por lo general, solo la raíz puede vincularse a números de puerto inferiores a 1024. Sin embargo, si se usa un número de puerto más alto para SSH, bajo ciertas circunstancias, los usuarios sin acceso de raíz pueden reemplazar el demonio SSH con otro servicio posiblemente malicioso.

La mejor manera de resolver este problema es utilizar una herramienta que bloquee el acceso de un atacante al servidor SSH. Una de estas herramientas ampliamente utilizada es fail2ban ( www.fail2ban.org ). Al analizar los registros, fail2ban detecta repetidos intentos fallidos de autenticación y establece automáticamente reglas de firewall para descartar el tráfico que se origina en la dirección IP del atacante.



Instalar fail2ban en Ubuntu



Instalación manual



Instalar fail2ban en Ubuntu (y otras distribuciones basadas en Debian) es muy simple:



$ sudo apt install fail2ban
      
      





Comprobando cómo funciona



Puede comprobar si el servicio se está ejecutando con el siguiente comando:



$ sudo systemctl status fail2ban



La salida debería verse similar a la siguiente - el estado del servicio debería estar activo:



● fail2ban.service - Fail2Ban Service
     Loaded: loaded (/lib/systemd/system/fail2ban.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2021-05-18 12:36:36 ***; ** min ago
       Docs: man:fail2ban(1)
    Process: 723*** ExecStartPre=/bin/mkdir -p /run/fail2ban (code=exited, status=0/SUCCESS)
   Main PID: 723*** (f2b/server)
      Tasks: 5 (limit: 38293)
     Memory: 18.0M
     CGroup: /system.slice/fail2ban.service
             └─723488 /usr/bin/python3 /usr/bin/fail2ban-server -xf start
      
      





Veamos cómo fail2ban cambió las reglas de iptables:



$ sudo iptables -L -n -v
      
      





También debería ver que hay una nueva cadena f2b-sshd en la configuración de iptables a la que hace referencia la regla de la cadena INPUT:



Chain INPUT (policy ACCEPT 73411 packets, 6622K bytes)
 pkts bytes target     prot opt in     out     source               destination
 1019 65297 f2b-sshd   tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            multiport dports 22


Chain f2b-sshd (1 references)
 pkts bytes target     prot opt in     out     source               destination
    8   480 REJECT     all  --  *      *       94.191.93.46         0.0.0.0/0            reject-with icmp-port-unreachable
    0     0 REJECT     all  --  *      *       77.50.75.162         0.0.0.0/0            reject-with icmp-port-unreachable
   10   600 REJECT     all  --  *      *       51.254.143.190       0.0.0.0/0            reject-with icmp-port-unreachable
   10   600 REJECT     all  --  *      *       46.101.97.5          0.0.0.0/0            reject-with icmp-port-unreachable
    9   540 REJECT     all  --  *      *       43.129.28.88         0.0.0.0/0            reject-with icmp-port-unreachable
    9   540 REJECT     all  --  *      *       41.221.168.167       0.0.0.0/0            reject-with icmp-port-unreachable
    9   540 REJECT     all  --  *      *       35.247.219.12        0.0.0.0/0            reject-with icmp-port-unreachable
   12   720 REJECT     all  --  *      *       220.180.119.192      0.0.0.0/0            reject-with icmp-port-unreachable
   10   600 REJECT     all  --  *      *       218.75.121.75        0.0.0.0/0            reject-with icmp-port-unreachable
    0     0 REJECT     all  --  *      *       213.87.101.176       0.0.0.0/0            reject-with icmp-port-unreachable
    0     0 REJECT     all  --  *      *       192.139.15.34        0.0.0.0/0            reject-with icmp-port-unreachable
   21  1260 REJECT     all  --  *      *       187.104.145.210      0.0.0.0/0            reject-with icmp-port-unreachable
    8   480 REJECT     all  --  *      *       177.191.189.13       0.0.0.0/0            reject-with icmp-port-unreachable
   10   600 REJECT     all  --  *      *       159.89.82.134        0.0.0.0/0            reject-with icmp-port-unreachable
   10   600 REJECT     all  --  *      *       159.75.140.97        0.0.0.0/0            reject-with icmp-port-unreachable
    8   480 REJECT     all  --  *      *       157.92.13.105        0.0.0.0/0            reject-with icmp-port-unreachable
   11   660 REJECT     all  --  *      *       117.80.225.245       0.0.0.0/0            reject-with icmp-port-unreachable
    9   540 REJECT     all  --  *      *       106.53.121.179       0.0.0.0/0            reject-with icmp-port-unreachable
  865 56057 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0
      
      







El paquete fail2ban contiene una herramienta llamada fail2ban-client. Te permite verificar el estado del servicio e interactuar con él (por ejemplo, te permite bloquear y desbloquear manualmente direcciones IP, habilitar y deshabilitar jaulas, etc.)



Veamos qué cárceles están activas:



$ sudo fail2ban-client status
      
      





Status
|- Number of jail:	1
`- Jail list:	sshd
      
      







Solo hay una cárcel, sshd, que es responsable de monitorear los registros del servidor SSH en busca de inicios de sesión fallidos y configurar las reglas del firewall para bloquear más intentos.



Ahora podemos comprobar las estadísticas de la cárcel sshd:



$ sudo fail2ban-client status sshd
      
      





Status for the jail: sshd
|- Filter
|  |- Currently failed:	8
|  |- Total failed:	26
|  `- File list:	/var/log/auth.log
`- Actions
   |- Currently banned:	22
   |- Total banned:	25
   `- Banned IP list:	106.53.121.179 117.80.225.245 157.92.13.105 159.75.140.97 159.89.82.134 177.191.189.13 187.104.145.210 213.87.101.176 218.75.121.75 220.180.119.192 35.247.219.12 41.221.168.167 43.129.28.88 46.101.97.5 51.254.143.190 77.50.75.162 94.191.93.46 1.55.165.141 120.53.245.68 104.131.178.145 106.56.102.83 152.32.146.21
      
      





Configuración de fail2ban



En la mayoría de los casos, la configuración predeterminada debería ser suficiente. Sin embargo, es útil comprender cuáles son estos valores predeterminados y cómo se pueden cambiar para adaptarlos a sus necesidades.



En una configuración estándar, fail2ban protegerá el servidor SSH y bloqueará al atacante durante 10 minutos después de 5 intentos fallidos de inicio de sesión en 10 minutos. El archivo de configuración predeterminado se puede encontrar en /etc/fail2ban/jail.conf. El archivo está bien documentado y en su mayoría se explica por sí mismo. Tenga en cuenta que no debe realizar ningún cambio en este archivo, ya que puede sobrescribirse durante la actualización de fail2ban.



Después de cambiar la configuración, no olvide reiniciar el servicio:



$ sudo systemctl restart fail2ban
      
      





Debo señalar que en este caso, cambié los parámetros de configuración, entendí la estrategia de ataque y recibí una lista diaria de hosts atacantes y la bloqueé.



Pero te lo contaré más adelante en una nota separada, si esta es útil e interesante para alguien.



All Articles