Bloqueo de cámara lenta con fail2ban, ¿cuáles son los parámetros correctos?

2

Tengo una regla fail2ban para los registros de Apache2 que se ve así:

[Definition]
failregex = ^[^ ]+ <HOST> .* \[\] "[^\"]*" 408 \d+

Esto detectará los 408 errores que suceden cuando una conexión TCP se agota.

La siguiente es la definición de Jail que usa la definición anterior:

[snap-apache-timeout]
enabled  = true
filter   = snap-apache-timeout-filter
action   = snap-firewall-action[scheme=all,period=year,reason=fail2ban: apache timeout]
logpath  = %(apache_access_log)s
maxretry = 35
findtime = 3600

Como podemos ver, lo configuro como un máximo de 35 intentos dentro de una hora. En otras palabras, si obtengo más de 35 errores HTTP 408 en una hora, ejecuto la acción correspondiente que es bloquear la dirección IP del usuario.

Solo, tengo algunos de mis clientes bloqueados de vez en cuando. Estoy pensando que esto sucede en parte porque algunos cierran su navegador mientras que algunas conexiones aún estaban abiertas en segundo plano (es decir, el usuario hace clic para ir a otra página y no espera que se cargue, sino que simplemente cierra la página).

¿Qué haces contra Slowloris ? ¿Nada?

Cuanto más lo veo y más pienso que esto no es muy factible solo con el error Apache2 408 (es decir, ¡no es lo mismo que detectar una conexión realmente lenta! Solo que la conexión se pierde de vez en cuando ...)

Hay registros entre dos 408 para una dirección IP dada que causa problemas. Desafortunadamente, Apache no muestra cuál es el tiempo de conexión. Tal vez es posible agregar eso a los registros?

exdox.com:443 a.b.c.d - - [07/Apr/2017:15:08:54 +0000] "-" 408 5845 "-" "-"
exdox.com:443 a.b.c.d - - [07/Apr/2017:15:08:39 +0000] "GET /finball/location/exdox_snap5-204/data HTTP/1.1" 200 2569 "exdox.com" "https://exdox.com/dashboard" "Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko" TLSv1.2 ECDHE-RSA-AES256-SHA384
exdox.com:443 a.b.c.d - - [07/Apr/2017:15:09:03 +0000] "GET /finball/location/exdox_snap5-204/logo.png/icon-77x77.png?fallback=ok HTTP/1.1" 200 10883 "exdox.com" "https://exdox.com/finball/location/exdox_snap5-204/data" "Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko" TLSv1.2 ECDHE-RSA-AES256-SHA384
exdox.com:443 a.b.c.d - - [07/Apr/2017:15:09:05 +0000] "GET /favicon.ico HTTP/1.1" 200 1406 "exdox.com" "-" "Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko" TLSv1.2 ECDHE-RSA-AES256-SHA384
exdox.com:443 a.b.c.d - - [07/Apr/2017:15:09:06 +0000] "GET /finball/location/exdox_snap5-204/data/create/20170406 HTTP/1.1" 303 238 "exdox.com" "https://exdox.com/finball/location/exdox_snap5-204/data" "Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko" TLSv1.2 ECDHE-RSA-AES256-SHA384
exdox.com:443 a.b.c.d - - [07/Apr/2017:15:09:06 +0000] "GET /finball/location/exdox_snap5-204/data/create/20170406 HTTP/1.1" 303 238 "exdox.com" "https://exdox.com/finball/location/exdox_snap5-204/data" "Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko" TLSv1.2 ECDHE-RSA-AES256-SHA384
exdox.com:443 a.b.c.d - - [07/Apr/2017:15:09:11 +0000] "GET /finball/location/exdox_snap5-204/data/create/20170405 HTTP/1.1" 303 237 "exdox.com" "https://exdox.com/finball/location/exdox_snap5-204/data" "Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko" TLSv1.2 ECDHE-RSA-AES256-SHA384
exdox.com:443 a.b.c.d - - [07/Apr/2017:15:09:11 +0000] "GET /finball/location/exdox_snap5-204/data/create/20170405 HTTP/1.1" 303 237 "exdox.com" "https://exdox.com/finball/location/exdox_snap5-204/data" "Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko" TLSv1.2 ECDHE-RSA-AES256-SHA384
exdox.com:443 a.b.c.d - - [07/Apr/2017:15:09:06 +0000] "GET /finball/location/exdox_snap5-204/data/20170406?a=edit HTTP/1.1" 200 3521 "exdox.com" "https://exdox.com/finball/location/exdox_snap5-204/data" "Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko" TLSv1.2 ECDHE-RSA-AES256-SHA384
exdox.com:443 a.b.c.d - - [07/Apr/2017:15:09:12 +0000] "GET /finball/location/exdox_snap5-204/data/20170405?a=edit HTTP/1.1" 200 6516 "exdox.com" "https://exdox.com/finball/location/exdox_snap5-204/data" "Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko" TLSv1.2 ECDHE-RSA-AES256-SHA384
exdox.com:443 a.b.c.d - - [07/Apr/2017:15:09:16 +0000] "GET /finball/location/exdox_snap5-204/logo.png/icon-77x77.png?fallback=ok HTTP/1.1" 200 10883 "exdox.com" "https://exdox.com/finball/location/exdox_snap5-204/data/20170405?a=edit" "Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko" TLSv1.2 ECDHE-RSA-AES256-SHA384
exdox.com:443 a.b.c.d - - [07/Apr/2017:15:09:17 +0000] "GET /favicon.ico HTTP/1.1" 200 1406 "exdox.com" "-" "Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko" TLSv1.2 ECDHE-RSA-AES256-SHA384
exdox.com:443 a.b.c.d - - [07/Apr/2017:15:09:56 +0000] "GET /finball/location/exdox_snap5-204/data HTTP/1.1" 200 2569 "exdox.com" "https://exdox.com/finball/location/exdox_snap5-204/data/20170405?a=edit" "Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko" TLSv1.2 ECDHE-RSA-AES256-SHA384
exdox.com:443 a.b.c.d - - [07/Apr/2017:15:10:01 +0000] "GET /finball/location/exdox_snap5-204/logo.png/icon-77x77.png?fallback=ok HTTP/1.1" 200 10883 "exdox.com" "https://exdox.com/finball/location/exdox_snap5-204/data" "Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko" TLSv1.2 ECDHE-RSA-AES256-SHA384
exdox.com:443 a.b.c.d - - [07/Apr/2017:15:10:01 +0000] "GET /favicon.ico HTTP/1.1" 200 1406 "exdox.com" "-" "Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko" TLSv1.2 ECDHE-RSA-AES256-SHA384
exdox.com:443 a.b.c.d - - [07/Apr/2017:15:10:21 +0000] "-" 408 193 "-" "-"

Según la respuesta de @ symcbean a continuación, la página menciona el uso del módulo reqtimeout Apache2. Lo tengo instalado con el predeterminado configuración:

RequestReadTimeout header=20-40,minrate=500
RequestReadTimeout body=10,minrate=500

No uso los módulos qos o security como se menciona en esa página. En su lugar, tengo fail2ban para verificar los registros de 408 errores como se muestra arriba. No creo que sea diferente de la configuración de security que se muestra en esa página, excepto que uno dice "si hay más de 5 en el último minuto".

    
pregunta Alexis Wilke 07.04.2017 - 23:36
fuente

1 respuesta

1

Tu configuración se ve bien siempre y cuando tengas tomado pasos apropiados en otro lugar para interrumpir la conexión y devolver un error 408 cuando el servidor web recibe algo que parece un ataque de slowloris.

(Tenga en cuenta que solo está reduciendo el timeout de los 60 segundos predeterminados para, digamos , 3, también aumentará la capacidad de detectar ataques sin instalar módulos adicionales)

Es improbable que el escenario de que alguien cierre un navegador antes de la respuesta cause un error 408 a menos que haya algo muy extraño en su red local.

Realmente debería mirar los registros que conducen a una respuesta para ver si su servidor realmente está devolviendo un error 408; un mejor patrón podría ser " 408

    
respondido por el symcbean 08.04.2017 - 01:29
fuente

Lea otras preguntas en las etiquetas