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 = ^ .*"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 = ^ .*"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/