Amigos, en este post explicaré como prevenir ataques de fuerza bruta y DDOS en Apache, al igual que en un post anterior utilizaré la herramienta fail2ban.
Instalación de Fail2ban
En un post anterior escribí acerca de la instalación de Fail2ban, los pasos de instalación se pueden ver en el siguiente enlace: https://guidocutipa.blog.bo/sistema-deteccion-de-intrusos-fail2ban/
Configuranto Fail2ban para Apache
Para activar los filtros de seguridad de Apache crearemos un nuevo archivo de configuración en el directorio /etc/fail2ban/jail.d/
# nano /etc/fail2ban/jail.d/apache.conf
En el nuevo archivo copiar la siguiente configuración:
[apache]
enabled = true
port = http,https
filter = apache-auth
logpath = /var/log/apache2/*error.log
maxretry = 3
bantime = 600
[apache-overflows]
enabled = true
port = http,https
filter = apache-overflows
logpath = /var/log/apache2/*error.log
maxretry = 3
bantime = 600
[apache-noscript]
enabled = true
port = http,https
filter = apache-noscript
logpath = /var/log/apache2/*error.log
maxretry = 3
bantime = 600
[apache-badbots]
enabled = true
port = http,https
filter = apache-badbots
logpath = /var/log/apache2/*error.log
maxretry = 3
bantime = 600
[http-get-dos]
enabled = true
port = http,https
filter = http-get-dos
logpath = /var/log/apache2/*access.log
maxretry = 400
findtime = 400
bantime = 200
action = iptables[name=HTTP, port=http, protocol=tcp]
- [apache] Para bloquear host remotos que tengan mas de 3 intentos fallidos de autenticacion
- [apache-overflows] Para bloquear host remotos que hagan peticiones de URLs sospechosas
- [apache-noscript] Para bloquear host remotos que intenten buscar scripts para ejecutar en el sitio web
- [apache-badbots] Para bloquear host remotos que traten de solicitar bot maliciosos
- [http-get-dos] Para detener ataques DOS de un host remoto
Para finalizar será necesario crear el archivo http-get-dos.conf con la siguiente configuración:
# nano /etc/fail2ban/filter.d/http-get-dos.conf
[Definition]
# Option: failregex
# Note: This regex will match any GET entry in your logs, so basically all valid and not valid entries are a match.
# You should set up in the jail.conf file, the maxretry and findtime carefully in order to avoid false positives.
failregex = ^<HOST> -.*"(GET|POST).*
# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
ignoreregex =
Para aplicar los cambios debemos reiniciar el servicio:
# systemctl restart fail2ban
Finalmentes validaremos que los nuevos filtros estén habilitados:
# fail2ban-client -i
fail2ban> status
fail2ban> status mysqld-aut