Recibiendo Ataques DDoS y Tratando de Proteger mi Sitio Web con WAF y Fail2ban

Descargar Vídeo

Últimamente mi sitio web estuvo recibiendo ataques DDoS y gracias a Dios que mis configuraciones del WAF con ModSecurity, Fail2ban y Shorewall Firewall cumplieron sus trabajos para proteger mitigar el ataque DDoS baneando más de 30,000 direcciones ip públicas provenientes de muchos paises.

IPs Baneados

Las reglas para el WAF que utilicé para mitigar el ataque fueron los siguientes parámetros de configuración:

# Inicializar y contar peticiones por IP en una ventana de 20 segundos
SecAction \
"id:100001,\
phase:1,\
nolog,\
pass,\
initcol:ip=%{REMOTE_ADDR},\
setvar:ip.counter=+1,\
expirevar:ip.counter=20"


# Bloquear temporalmente si la IP supera las 50 peticiones en ese intervalo
SecRule IP:COUNTER "@gt 50" \
"id:100002,\
phase:1,\
deny,\
status:429,\
log,\
msg:'Potential DDoS / Rate Limit Exceeded from IP: %{REMOTE_ADDR}'"

Con Fail2ban tuve que habilitar el incremento progresivo del tiempo de baneo para castigar de forma acumulativa a los atacantes recurrentes con los siguientes parámetros de configuración:

[DEFAULT]
bantime.increment = true
bantime.maxtime = 4w
bantime.factor = 2

Los parámetros para los filtros que tengo aplicados y configurados para el WAF ModSecurity del Apache2 con Fail2ban son los siguientes:

[INCLUDES]
before = apache-common.conf


[Definition]
failregex = ^.\[client <HOST>\] ModSecurity: Access denied.$
^\[[^\]]+\] \[security2?:error\] \[pid \d+:tid \d+\] \[client <HOST>:\d+\] ModSecurity:
^%(__prefix_line)s\[security2:error\] \[pid \d+:tid \d+\] \[client <HOST>:\d+\] ModSecurity: (?:Access denied|Warning)\.
^%(_apache_error_client)s(?: \[client [^\]]+\])? ModSecurity:\s+(?:\[(?:\w+ \"[^\"]\"|[^\]])\]\s*)*Access denied with code [45]\d\d

Y los parámetros para el enjaulamiento que tengo aplicados y configurados para el WAF ModSecurity del Apache2 con Fail2ban son los siguientes:

[apache-modsecurity]
port = http,https
protocol = tcp
filter = apache-modsecurity
logpath = %(apache_error_log)s
maxretry = 2
findtime = 10m
bantime = 48h
enabled = true
logencoding = utf-8
action = shorewall[table=filter,loglevel=info]


Vídeos Relacionados

Page 1 of 31

Deja una respuesta