Proteger conexión SSH y otros servicios contra intentos de conexión – fail2ban

¡Hola a todos! El termino «ban» es muy utilizado en ciertas jergas de internet (grasa?), pero también significa «prohibición» al traducirlo del inglés; básicamente tiene que ver con bloquear a alguien por incumplir con las normas del servicio; En la seguridad informática existen ciertos ataques llamados de «Fuerza bruta», el cual tiene como objetivo obtener acceso mediante el intento repetitivo de inicio de sesión probando todas las combinaciones posibles hasta encontrar aquella que se lo permita, apoyándose de diccionarios de contraseñas tan extensos que hasta dichos  «archivitos» de textos pueden llegar a pesar varios Gigas… Si no se tiene la protección debida, estos ataques están activos día y noche (el tiempo que sea necesario) hasta que una palabrita del diccionario le pega a la contraseña del servicio que se quiere entrar (recordar que el nombre de usuario debe hacer match también…); de ésta forma, se obtiene un acceso no autorizado.

Para éste tipo de ataques y, obviamente por diversas razones de seguridad, les traigo un programita llamado fail2ban, el cual es una herramienta que monitorea los intentos de inicio de sesión en diversos servicios, como lo son: SSH, FTP, SMTP, HTTP, etc.; si encuentra «n» cantidad de intentos de inicio de sesión fallidos desde un mismo orígen (IP), se creará una regla de firewall automáticamente (iptables) para bloquear dicha conexión, desbloqueándola en «n» segundos después.

Con esta protección, podemos reducir grandemente la efectividad de los ataques de fuerza bruta dado que la mayoría del tiempo estará «baneada» la IP del atacante, por cuanto es una buena opción para proteger un servicio específico. En nuestro caso, protegeremos el servicio SSH (como se menciona en el título de ésta entrada).

La verdad, no es recomendable publicar un servicio tan vital como lo es el SSH, pero en ocasiones sí que es necesario… supongo que lo mejor sería crear reglas en el FW para así determinar las IPs públicas que tendrán acceso exclusivo a éste servicio, o mejor aún, contar con una protección perimetral que ayude; como mínimo, un firewall UTM con la protección respectiva (o directamente equipos con IPS, IDS, antimalware, etc.). En nuestro caso, asumiremos que no se tiene nada de esto y solo protegeremos éste servicio por medio de nuestro servidor.

Instalación de fail2ban

Para instalar fail2ban en Ubuntu (Aplica para cualquier distribución basado en Debian), ingresamos la siguiente línea de comando

sudo apt install fail2ban

Ahora verificaremos si esta funcionando bien, específicamente el servicio (Si está iniciado).

sudo service fail2ban status

Si no esta activo el servicio, sería de revisar el mensaje de error que les aparece, pero generalmente debe de funcionar bien. El programa tiene sus parámetros por defectos el cual le permite estar funcionamiento con «reglas de cumplimiento» básicas pero funcionales.

Configuración básica de fail2ban

El archivo de configuración general está en /etc/fail2ban/fail2ban.conf , pero éste no lo tocaremos dado que esta todo bien configurado para el funcionamiento básico.

El archivo de, por así decirlo, «sub-configuración» que modificaremos, es /etc/fail2ban/jail.conf , por cuanto es recomendable hacer un «respaldo» del mismo por si nos equivocamos.

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.conf.bk

Y ahora veamos los parámetros básicos que son útiles para la protección mencionada.

  • ignoreip (*): Aquí podemos colocar la lista de direcciones IP’s, separados por un espacio, que no serán bloqueadas por fail2ban.
  • maxretry (*): Es el número máximo de intentos de inicio de sesión fallidos antes de que la IP (host) sea bloqueado.
  • bantime (*): Definimos el tiempo en segundos que estará «bloqueado» un host (IP) que haya superado el maxretry.
  • findtime (*): Es el tiempo con el cual se podrá evaluar el número de intentos de inicio de sesión fallidos y con lo que se considerará si se bloqueará (maxretry) o no.
  • filter: se refiera a la utilización de un filtro apropiado en /etc/fail2ban/filter.d
  • logpath: Se trata del archivo de log que fail2ban utiliza para revisar los intentos de inicio de sesión.
  • destemail: Dirección de correo al cual queremos recibir las notificaciones de bloqueo. De la mano con el parámetro mta.

He colocado un (*) a los parámetros que seguramente modificaremos. Están libres de configurar como gusten; en mi caso:

  • ignoreip = 127.0.0.1/8 192.168.1.5
  • bantime = 3600
  • findtime = 600
  • maxretry = 3

Para que se apliquen los cambios, debemos de reiniciar el servicio.

sudo service fail2ban restart

Interpretar los Logs…

El archivo de logs de éste programa lo encontraremos en:

/var/log/fail2ban.log

Normalmente, veremos algo parecido:

Donde se nos muestran los parámetros que hemos configurado, nos notifica los servicios iniciados y protegidos, y en fin… información del servicio fail2ban.

Luego, veremos otros tipos de logs:

2018-11-14 14:16:23,380 fail2ban.filter         [13530]: INFO    [sshd] Found 125.65.xx.xx
2018-11-14 14:16:25,440 fail2ban.filter         [13530]: INFO    [sshd] Found 125.65.xx.xx
2018-11-14 14:16:31,975 fail2ban.filter         [13530]: INFO    [sshd] Found 125.65.xx.xx
2018-11-14 14:16:32,910 fail2ban.actions        [13530]: NOTICE  [sshd] Ban 125.65.xx.xx
2018-11-14 14:22:24,386 fail2ban.actions        [13530]: NOTICE  [sshd] Unban 115.238.xx.xx
2018-11-14 14:26:05,263 fail2ban.actions        [30447]: NOTICE  [sshd] 115.238.xx.xx already banned

Trataré de explicar un poco lo que pasa:

  • El «Found 125.65.x.x» indica que la IP (125.65.x.x) intentó iniciar sesión en el servicio SSH pero no pudo ingresar.
    • Notar que, según la configuración dada en la imagen de arriba, después de 3 intentos se debe de «banear» (maxretry).
  • El «Ban 125.65.xx.xx» quiere decir que se ha bloqueado la IP dado que superó los intentos de inicio de sesión fallidos en el tiempo establecido (maxretry & bantime).
  • El «Unban 115.238.xx.xx» significa que ya terminó el tiempo de bloqueo de dicha IP (bantime).
  • Finalmente, «115.238.245.x already banned«, quiere decir que dicha IP ya estaba bloqueada.

Entre corchetes vamos a ver el servicio al que corresponde el log, por cuanto no hay pierde.

Bien, eso es todo. ¡Saludos!

Comentarios por Facebook

comentarios

4 respuestas a “Proteger conexión SSH y otros servicios contra intentos de conexión – fail2ban”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*