FAIL2BAN Aplicación escrita en Python para la prevención de intrusos en un sistema, que actúa penalizando o bloqueando las conexiones remotas que intentan accesos por fuerza bruta

Pablo Nicolás Vallejos 26/09/2022

INSTALACIÓN sudo yum install fail2ban systemctl stop firewalld sudo yum remove firewalld sudo yum install iptables systemctl enable iptables

CONFIGURACIÓN Los archivos de configuración se encuentran en la carpeta /etc/fail2ban. Lo primero que tenemos que hacer es crear algunos archivos. El primero: /etc/fail2ban/filter.d/apache-get-dos.conf con este contenido: [INCLUDES] before = common.conf [Definition] failregex = ^<HOST> .*“GET (?!\/robots\.txt).*” (200|401|403|404|503)\s ignoreregex =

El segundo: /etc/fail2ban/filter.d/apache-post-dos.conf con este contenido: [INCLUDES] before = common.conf [Definition] failregex = ^<HOST> .*“POST (?!\/robots\.txt).*” (200|401|403|404|503)\s ignoreregex =

El tercero: /etc/fail2ban/jail.d/custom.conf [DEFAULT] bantime = 300 findtime = 300 banaction = iptables-allports

El cuarto: /etc/fail2ban/jail.local [apache-get-dos] enabled = true port = http,https filter = apache-get-dos logpath = /var/log/httpd/custom_access datepattern = d/b/Y:H:M:S z maxretry = 300 findtime = 300 bantime = 60 [apache-post-dos] enabled = true port = http,https filter = apache-post-dos logpath = /var/log/httpd/custom_access datepattern = d/b/Y:H:M:S z maxretry = 60 findtime = 60 bantime = 60

Por último hay que modificar el archivo de configuración de apache para agregar un nuevo log con un tipo de entrada particular. Para ello editamos el archivo: /etc/httpd/conf/httpd.conf y agregamos esta linea en el apartado de logs: LogFormat “%h %l %u %t %I %O \”%r\“ %>s %b \”%{Referer}i\“ \”%{User-Agent}i\“ %V %p” custom_vhost CustomLog /var/log/httpd/custom_access custom_vhost

Por último, reiniciamos el apache y fail2ban sudo systemctl restart httpd sudo systemctl restart fail2ban

STATUS Si todo sale bien, con los hecho anteriormente ya tenemos funcionando fail2ban para los métodos GET y POST. Ahora, si queremos verificar el estado de fail2ban debemos usar los siguientes comandos # Reiniciar fail2ban sudo systemctl restart fail2ban

# Conocer el estado de fail2ban sudo fail2ban-client status

# Conocer el estado de un filtro en particular sudo fail2ban-client status apache-get-dos

# Banear una ip en particular sudo fail2ban-client set apache-get-dos banip 192.168.89.165

# Sacar del baneo a una ip en particular sudo fail2ban-client set apache-get-dos unban 192.168.89.165

# Conocer las reglas de IPTABLES aplicadas iptables -L

# Probar las expresiones regulares de los filtros con el log custom que creamos fail2ban-regex /var/log/httpd/custom_access /etc/fail2ban/filter.d/apache-post-dos.conf

fail2ban-regex /var/log/httpd/custom_access /etc/fail2ban/filter.d/apache-get-dos.conf

REFERENCIAS https://pipo.blog/articles/20210915-fail2ban-apache-dos https://samnicholls.net/2016/06/06/fail2ban-apache-dos/ https://www.garron.me/en/go2linux/fail2ban-protect-web-server-http-dos-attack.html https://docs.rackspace.com/support/how-to/use-iptables-with-centos-7/