Hoy vamos a instalar Fail2ban en nuestro servidor, es una herramienta de prevención de intrusiones gratuita, de código abierto y ampliamente utilizada para protegernos contra ataques de fuerza bruta, y muchas cosas más. Hoy lo vamos a instalar para proteger la conexión SSH a nuestro servidor.
Instalación de Fail2ban en CentOS / RHEL 8
El paquete fail2ban no está en los repositorios oficiales pero está disponible en el repositorio EPEL. Los cargamos haciendo:
dnf install epel-release O dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
Luego, instalamos el paquete Fail2ban ejecutando el siguiente comando.
dnf install fail2ban
Configuración de Fail2ban para proteger SSH
Los archivos de configuración de fail2ban se encuentran en /etc/fail2ban/ y los filtros se almacenan en el directorio /etc/fail2ban/filter.d/ (el archivo de filtro para sshd es /etc/fail2ban/filter.d/sshd.conf ).
El archivo de configuración global para el servidor fail2ban esta en /etc/fail2ban/jail.conf , sin embargo, no se recomienda modificar este archivo directamente, ya que probablemente se sobrescribirá o mejorará en caso de una actualización del paquete en el futuro.
Como alternativa, se recomienda crear y agregar sus configuraciones en un archivo jail.local o archivos .conf
separados en el directorio /etc/fail2ban/jail.d/. Cuidado con esto porque los parámetros de configuración establecidos en jail.local anularán lo que esté definido en jail.conf.
Para este artículo, crearemos un archivo separado llamado jail.local ubicado en la carpeta /etc/fail2ban/
nano /etc/fail2ban/jail.local
Ahora copiamos y pegamos la siguiente configuración en la sección [DEFAULT]
que contiene opciones globales y [sshd]
que contiene parámetros para la «cárcel» de sshd.
[DEFAULT] ignoreip = 192.168.23.139/24 bantime = 21600 findtime = 300 maxretry = 3 banaction = iptables-multiport backend = systemd [sshd] enabled = true
Expliquemos brevemente las opciones en la configuración anterior:
- ignoreip : especifica la lista de direcciones IP o nombres de host que no se prohibirán.
- bantime : especificó el número de segundos que un host está prohibido (es decir, la duración efectiva de la prohibición).
- maxretry : especifica el número de fallas antes de que se bloquee un host.
- findtime : fail2ban prohibirá un host si ha generado » maxretry » durante los últimos segundos » findtime «.
- banaction : acción de prohibición.
- backend : especifica el backend utilizado para obtener la modificación del archivo de registro.
La configuración anterior, por lo tanto, significa que si una IP ha intentado conectarse por ssh y ha fallado 3 veces en los últimos 5 minutos, la va a prohibir por 6 horas e ignore la dirección IP 192.168.23.139.
A continuación, podemos iniciar, habilitar o saber el estatus del servicio fail2ban usando el clásico comando systemctl.
systemctl start fail2ban systemctl enable fail2ban systemctl status fail2ban
Probando fail2ban-client
Después de configurar fail2ban para asegurar sshd, vamos a simular loguearnos y fallar.
Para ver el estado actual del servidor fail2ban, ejecute el siguiente comando.
fail2ban-client status
Para monitorear la «cárcel» sshd hacemos
fail2ban-client status sshd
Para des-banear una dirección IP en fail2ban (en todas las cárceles y bases de datos), ejecutamos el siguiente comando.
fail2ban-client unban 192.168.23.1
Para obtener más información sobre fail2ban, podemos hacer uso del manual.
man jail.conf man fail2ban-client