Cursos Servidores con Centos 6
Sistema Operativo ALDOS
MongoDB Banner
Curso PHP
Dezoft

Si algunos de nuestros foros, manuales, ALDOS, paquetería o proyectos te han resultado de ayuda, apreciaremos mucho nos apoyes con un donativo.

Configuración de Fail2ban en CentOS 7

Autor: Joel Barrios Dueñas
Correo electrónico: darkshram en gmail punto com
Sitio de Red: http://www.alcancelibre.org/
Jabber ID: darkshram@jabber.org

Creative Commons Reconocimiento-NoComercial-CompartirIgual 2.1

© 1999-2018 Joel Barrios Dueñas. Usted es libre de copiar, distribuir y comunicar públicamente la obra y hacer obras derivadas bajo las condiciones siguientes: a) Debe reconocer y citar al autor original. b) No puede utilizar esta obra para fines comerciales (incluyendo su publicación, a través de cualquier medio, por entidades con fines de lucro). c) Si altera o transforma esta obra o genera una obra derivada, sólo puede distribuir la obra generada bajo una licencia idéntica a ésta. Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la licencia de esta obra. Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor. Los derechos derivados de usos legítimos u otras limitaciones no se ven afectados por lo anterior. Licencia completa en castellano. La información contenida en este documento y los derivados de éste se proporcionan tal cual son y los autores no asumirán responsabilidad alguna si el usuario o lector hace mal uso de éstos.

Introducción.

Acerca de Fail2ban.

Fail2Ban es un software diseñado para la prevención de intrusos en el sistema. Protege los servidores de la computadora de ataques de fuerza bruta. Está escrito en Python y ejecuta en sistemas tipo POSIX con interfaz de control de tráfico de paquetes o muro cortafuegos, como TCP Wrapper, iptables, FirewallD o Shorewall.

URL: http://www.fail2ban.org/.

Equipamiento lógico necesario.

Fail2ban está disponible en casi todos los almacenes yum de terceros para CentOS y Red Hat™ Enterprise Linux, como AL-Server o EPEL.

Elija entre AL-Server y EPEL e instalé la configuración correspondiente. Ambos almacenes YUM son incompatibles entre si.

Si prefiere utilizar AL-Server, descargue el archivo correspondiente ejecutando lo siguiente:

wget -N -P /etc/yum.repos.d http://www.alcancelibre.org/al/server/AL-Server.repo

Ejecute lo siguiente si prefiere utilizar EPEL:

rpm -Uvh https://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-7-11.noarch.rpm

Ejecute lo siguiente para instalar Fail2ban con cualquiera de los dos almacenes YUM:

yum -y install fail2ban

Fail2ban tiene varios sub-paquetes dependiendo de las necesidades del administrador del sistema operativo:

  • fail2ban: meta-paquete vacío que tiene como dependencias sólo los componentes básicos seleccionados por el distribuidor de los paquetes utilizados.
  • fail2ban-all: paquete que instala todos los complementos.
  • fail2ban-firewalld: complemento para FirewallD.
  • fail2ban-hostsdeny: complemento para TCP Wrappers.
  • fail2ban-mail: complemento que incluye todos los filtros necesarios para correo electrónico.
  • fail2ban-sendmail: complemento específico para Sendmail.

  • fail2ban-server: paquete principal con los componentes mínimos.

  • fail2ban-shorewall: complemento específico para Shorewall.

Instale los paquetes fail2ban-mail y fail2ban-shorewall.

yum -y install fail2ban-mail fail2ban-shorewall

Procedimientos.

Evite tocar el archivo /etc/fail2ban/jail.conf. Es un archivo extenso y complejo en cuanto sa contenido y será muy difícil administrar las configuraciones. Jail2ban dará prioridad a las opciones que se definan en el archivo /etc/fail2ban/jail.local.

Proceda a crear el archivo /etc/fail2ban/jail.local:

vim /etc/fail2ban/jail.local

Añada la cabecera [DEFAULT]:

[DEFAULT]

Es importante señalar que la ausencia de esta cabecera ocasionará que falle el inicio del servicio fail2ban.

Debajo de lo anterior añada lo siguiente para definir la lista blanca mínima de direcciones IP que serán excluidas de supervisión por Fail2ban:

ignoreip = 127.0.0.1/8 ::1

Añada la dirección IP y máscara de subred correspondiente a su red de área local. Ejemplo:

ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24

Defina los valores de bantime, findtime y maxretry por los que considere pertinentes. Bantime define el tiempo que tendrán prohibido acceder al servidor los anfitriones infractores. Findtime define el lapso de tiempo durante el cual un anfitrión remoto será prohibido si supera el límite intentos de acceso de maxretry. Maxretry define el número máximo de intentos antes de prohibir un un anfitrión. Para resumir el escenario predeterminado: los anfitriones remotos serán bloqueados por 10 minutos si dentro de un período de 10 minutos intentan acceder al menos 5 veces. Utilice el siguiente ejemplo:

bantime  = 120m
findtime  = 10m
maxretry = 5

En este escenario: los anfitriones remotos serán bloqueados por 120 minutos si dentro de un período de 10 minutos intentan acceder al menos 5 veces.

Añada lo siguiente para personalizar los valores de destemail y sender para definir la cuenta de correo electrónico hacia la cual se enviarán los reportes de actividad y la dirección de correo electrónico de origen. En esta última debe definirse una cuenta de correo local con un nombre de anfitrión plenamente calificado (FQDN). Ejemplo:

destemail = sysadmin@midominio.org
sender = root@mail.midominio.org

De modo predeterminado Fail2ban utiliza iptables para bloquear anfitriones. Es adecuado si se utiliza un cortafuegos basado exclusivamente sobre iptables.

banaction = iptables-multiport
banaction_allports = iptables-allports

Defina lo siguiente sólo si utiliza FirewallD como muro cortafuegos predeterminado:

banaction = firewallcmd-multiport
banaction_allports = firewallcmd-allports

Defina lo siguiente sólo si utiliza Shorewall como muro cortafuegos predeterminado:

banaction = shorewall
banaction_allports = shorewall

Defina el valor de action para determinar qué hará Fail2ban al prohibir un anfitrión. El valor peude ser cualquiera de los siguientes:

  • action: Sólo prohibir anfitrión remoto.
  • action_mw: Prohibir anfitrión remoto y enviar reporte por correo electrónico al administrador del sistema.
  • action_mwl: Prohibir anfitrión remoto y enviar reporte por correo electrónico incluyendo el reporte de whois y lineas de registro relevantes.
  • action_xarf: Prohibir anfitrión remoto y enviar un mensaje de correo electrónico al administrador con copia para la dirección de correo electrónico de contacto para reporte de abusos de la dirección IP involucrada —determinada por la información obtenida con whois. Incluye además líneas de registro relevantes.
  • action_cf_mwl: Prohibir anfitrión remoto en CloudFlare y enviar reporte por correo electrónico incluyendo el reporte de whois y lineas de registro relevantes.

Para efectos de este documento se utilizará action_mwl. Añada lo siguiente:

action = %(action_mwl)s

Todos los filtros están desactivados de modo predeterminado en /etc/fail2ban/jail.conf. Puede activar los filtros que guste sin necesidad de tocar este archivo.

Añada lo siguiente para habilitar el filtro de SSH.

[sshd]
enabled = true
port    = ssh

Si utiliza SSH en un puerto distinto al 22, defina éste en el valor de port. Ejemplo:

[sshd]
enabled = true
port    = 22022

Añada lo siguiente si utiliza Postfix y Dovecot:

[postfix]
enabled = true

[dovecot]
enabled = true

Añada en su lugar lo siguiente si utiliza Sendmail y Dovecot:

[sendmail-auth]
enabled = true

[dovecot]
enabled = true

Añada lo siguiente sólo si utiliza Roundcube Mail, si la configuración de éste incluye la opción «$config['log_logins'] = true;» en el archivo /etc/roundcubemail/config.inc.php y si existe el archivo /var/log/roundcubemail/errors.

[roundcube-auth]
enabled = true

Añada lo siguiente sólo si utiliza VSFTPD, la configuración de éste incluye la opción «dual_log_enable=YES» en el archivo /etc/vsftpd/vsftpd.conf y si además existe el archivo /var/log/vsftpd.log.

[vsftpd]
enabled = true

Hasta este punto, el contenido del archivo /etc/fail2ban/jail.local debe ser similar a la siguiente:

[DEFAULT]

bantime  = 120m
findtime  = 10m
maxretry = 5

ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24

destemail = sysadmin@midominio.org
sender = root@mail.midominio.org

banaction = firewallcmd-multiport
banaction_allports = firewallcmd-allports

[sshd]
enabled = true
port    = 22022

[postfix]
enabled = true

[dovecot]
enabled = true

[roundcube-auth]
enabled = true

[vsftpd]
enabled = true

La configuración se verá similar a la siguiente en un escenario donde se utiliza SSH en el puerto 22022, Shorewall como muro cortafuegos predeterminado, Sendmail como MTA, Dovecot y VSFTPD:

[DEFAULT]

bantime  = 120m
findtime  = 10m
maxretry = 5

ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24

destemail = sysadmin@midominio.org
sender = root@mail.midominio.org

banaction = shorewall
banaction_allports = shorewall

[sshd]
enabled = true
port    = 22022

[sendmail-auth]
enabled = true

[dovecot]
enabled = true

[roundcube-auth]
enabled = true

[vsftpd]
enabled = true

Guarde los cambios y salga del editor de texto.

Si aún no lo ha hecho, genere los archivos /var/log/roundcubemail/errors y /var/log/vsftpd.log:

touch /var/log/roundcubemail/errors
chown apache:apache /var/log/roundcubemail/errors
touch /var/log/vsftpd.log
chmod 600 /var/log/vsftpd.log

Fail2ban fallará al iniciar si definió los filtros para Roundcube Mail y VSFTPD y los archivos de registro correspondientes son inexistentes.

Activar, iniciar y reiniciar el servicio.

Ejecute lo siguiente para activar el servicio junto con inicio del sistema:

systemctl enable fail2ban

Ejecute lo siguiente para iniciar por primera vez el servicio fail2ban:

systemctl start fail2ban

Ejecute lo siguiente para reiniciar el servicio fail2ban:

systemctl restart fail2ban

Ejecute lo siguiente para hacer que el servicio fail2ban vuelva a leer la configuración:

systemctl reload fail2ban

Examine el contenido del archivo /var/log/fail2ban.log en caso de haber errores al iniciar el servicio:

tail -80 /var/log/fail2ban.log

Comprobaciones:

Fail2ban incluye una herramienta denominada fail2ban-client que permite realizar tareas administrativas de manera fácil.

Ejecute lo siguiente para ver el estado del servicio:

fail2ban-client status

Lo anterior debe devolver algo similar a lo siguiente:

Status
|- Number of jail:	4
`- Jail list:	dovecot, postfix, roundcube-auth, sshd

Ejecute lo siguiente para examinar el estado de prohibiciones del filtro para dovecot:

fail2ban-client status dovecot

Lo anterior debe mostrar algo similar a lo siguiente en un sistema recién configurado:

Status for the jail: dovecot
|- Filter
|  |- Currently failed:	0
|  |- Total failed:	0
|  `- File list:	/var/log/maillog
`- Actions
   |- Currently banned:	0
   |- Total banned:	0
   `- Banned IP list:	

En un sistema que lleva algunos días operando se debe mostrar una salida similar a la siguiente:

Status for the jail: dovecot
|- Filter
|  |- Currently failed:	3
|  |- Total failed:	366
|  `- File list:	/var/log/maillog
`- Actions
   |- Currently banned:	1
   |- Total banned:	47
   `- Banned IP list:	200.1.2.3

Ejecute algo similar al siguiente ejemplo para eliminar la prohibición de una dirección IP específica:

fail2ban-client unban 200.1.2.3

Ejecute lo siguiente para eliminar todas las prohibiciones.

fail2ban-client unban --all

Ejecute lo siguiente para conocer y estudiar más detalles respecto del uso de fail2ban-client:

man 1 fail2ban-client

Bibliografía.

Ver la versión para imprimir