Bloccando slowloris usando fail2ban, quali sono i parametri corretti?

2

Ho una regola fail2ban per i registri di Apache2 che assomiglia a questa:

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

Questo rileva gli errori 408 che si verificano quando scade una connessione TCP.

La seguente è la definizione Jail che utilizza la definizione di cui sopra:

[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

Come possiamo vedere, ho impostato questo come massimo tentativo di 35 entro un'ora. In altre parole, se ottengo 35+ errori HTTP 408 entro un'ora, eseguo l'azione corrispondente che blocca l'indirizzo IP dell'utente.

Solo, alcuni dei miei clienti vengono bloccati una volta ogni tanto. Penso che in parte ciò accada perché alcuni chiudono il browser mentre alcune connessioni sono ancora aperte in background (ovvero l'utente fa clic per andare su un'altra pagina e non aspetta che venga caricato, ma invece si limita a chiudere la pagina.)

Che cosa fai contro Slowloris ? Niente?

Più lo guardo e più penso che questo non sia fattibile solo con l'errore Apache2 408 (cioè non è lo stesso che rilevare una connessione veramente lenta! Basta che la connessione venga persa una volta ogni tanto ...)

Ci sono log tra due 408 per un dato indirizzo IP che causa problemi. Sfortunatamente Apache non mostra quale connessione scade. Forse è possibile aggiungerlo ai log?

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 "-" "-"

Come da risposta di @ symcbean sotto, la pagina menziona l'uso del modulo reqtimeout Apache2. Ho installato quello con il predefinito impostazioni:

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

Non uso i moduli qos o security come menzionato in quella pagina. Invece, ho fail2ban per controllare i registri per 408 errori come mostrato sopra. Non penso che sia diverso dall'impostazione security mostrata su quella pagina tranne quella che dice "se più di 5 nell'ultimo minuto".

    
posta Alexis Wilke 07.04.2017 - 23:36
fonte

1 risposta

1

La tua configurazione sembra a posto finchè hai preso passaggi appropriati altrove per eliminare la connessione e restituire un errore 408 quando il server Web riceve qualcosa che sembra un attacco slowloris.

(nota che basta ridurre il timeout dai 60 secondi predefiniti a, per esempio , 3, aumenterà anche la capacità di rilevare gli attacchi senza installare moduli aggiuntivi)

Lo scenario di qualcuno che chiude un browser prima che la risposta sia improbabile che causi un errore 408 a meno che non ci sia qualcosa di molto strano nella tua rete locale.

In realtà dovresti esaminare i log che portano a una risposta per vedere se il tuo server restituisce effettivamente un errore 408; uno schema migliore potrebbe essere " 408

    
risposta data 08.04.2017 - 01:29
fonte

Leggi altre domande sui tag