2012-09-06 11 views
6

A avere un flood http sul mio server, non così tante query, ma comunque. Le query nel logConfig di nginx per filtrare http flood

95.55.237.3 - - [06/Set/2012: 14: 38: 23 0400] "GET/HTTP/1.0" 200 35551 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) "" - "| "-" 93.78.44.25 - - [06/Sep/2012: 14: 38: 23 +0400] "GET/HTTP/1.0" 200 36051 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.1; -US) "" - "| "-" 46.118.112.3 - - [06/Sep/2012: 14: 38: 23 +0400] "GET/HTTP/1.0" 200 35551 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.1; -US) "" - "| "-"

ho provato questo filtri in nginx config

server { 
    ..... 
    set $add 1; 
    set $ban ''; 

###### Rule 1 ######## 
if ($http_referer = '-') { 
    set $ban $ban$add; 
} 
if ($request_uri = '/') { 
    set $ban $ban$add; 
} 

if ($http_user_agent = 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US)') { 
    set $ban $ban$add; 
} 

if ($ban = 111) { 
    return 444; 
} 
###################### 
...... 
} 

ma query bot stil ottenere 200 OK. Qualcuno potrebbe aiutare?

risposta

31

Prova ad aggiungere qualcosa di simile alle seguenti direttive per la vostra configurazione per evitare http inondazioni:

http { 
    limit_conn_zone $binary_remote_addr zone=conn_limit_per_ip:10m; 
    limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=5r/s; 

    server { 
    limit_conn conn_limit_per_ip 10; 
    limit_req zone=req_limit_per_ip burst=10 nodelay; 
    } 
} 

Vedi http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html e http://nginx.org/en/docs/http/ngx_http_limit_req_module.html per ulteriori informazioni

C'è tutta la seguente direttiva http://nginx.org/en/docs/http/ngx_http_core_module.html#limit_rate

NOTA: http://www.botsvsbrowsers.com/details/504401/index.html dice che l'utente precedente non è un bot noto

+0

questo può essere negativo per molti computer sulla stessa LAN, condividere un indirizzo IP – brauliobo

+3

@brauliobo seriamente quante persone navigano dalla stessa LAN al giorno d'oggi se non per la riproduzione di giochi multiplayer. puoi anche regolare la quantità di ips consentiti nel tempo impostato ... –

+0

@stupidtroll conosci i router? sono utilizzati in ogni casa e azienda, mettendo tutti gli utenti sotto uno o pochi IP internet – brauliobo

3

È inoltre possibile bloccare un IP specifico, come misura aggiuntiva.

http{ 
    deny 127.45.4.1; 
    ... 
} 

o mettere IP bloccati in file separato

http{ 
    include blockedips.conf 
    ... 
} 

blockedips.conf

deny 1.12.4.5; 
3

Si potrebbe anche bloccare specifico paese

http{ 
    geoip_country /usr/share/GeoIP/GeoIP.dat; 
    map $geoip_country_code $allowed_country { 
     default yes; 
     FK no; 
     FM no; 
     EH no; 
    } 
} 

GeoIP.dat possono essere scaricati da http://dev.maxmind.com/geoip/geoip2/geolite2/ (non sono affiliato con maxmind)