Fai in modo che il server Nginx risponda lentamente


8

Quindi ho uno spammer sul mio sito. Potrei bloccare il suo IP usando 'nega', ma poi cambierà semplicemente il suo IP e dovrò continuare a giocare con lui con il gatto e il mouse.

Invece, sono curioso di sapere se esiste un modo per configurare nginx per rispondere più lentamente al suo IP.

In questo modo forse deciderà semplicemente che il sito non funziona correttamente e mi lascerà in pace.

Grazie

Risposte:


7

La direttiva Nginx limit_rateti consente di specificare la velocità con cui desideri valutare le risposte limite, ad es

location / {
  if ($slow) {
    limit_rate 4k;
  }
}

La documentazione di Nginx è qui . (dalla documentazione vedrai che il tuo backend potrebbe prendere la decisione e richiedere a Nginx di limitare il tasso al cliente)

Il modo in cui ottieni questo $slowset di variabili dipende dalla tua configurazione. Il modo più semplice sarebbe impostarlo tramite geomappatura:

geo $slow {
  default    0;

  1.2.3.0/24 1;
}

La mappatura "geografica" dipende dalla $slowbase dell'indirizzo IP del client. È 0 per impostazione predefinita e 1 se un indirizzo IP client si trova nella 1.2.3.0/24sottorete. Vedi la documentazione di Nginx su "geo" qui

L'uso di "fail2ban" è una ragionevole evoluzione dell'intera soluzione. È possibile utilizzare "fail2ban" per rilevare automaticamente attività insolite e raccogliere IP per Nginx, quindi ricaricare Nginx in modo che rileggi gli elenchi di indirizzi IP che devono essere rallentati e / o bloccati.


5

Se vuoi ingannare l'utente offensivo nel pensare che sta ancora passando inosservato da te, puoi utilizzare il modulo limite di richiesta di nginx ( http://wiki.nginx.org/HttpLimitReqModule ).

Per prima cosa definire una zona limite di richiesta:

http {
    limit_req_zone  $binary_remote_addr  zone=spammers:1m   rate=30r/m;
}

Questa zona utilizzerà l'indirizzo IP dell'autore del reato per identificare e limitare le richieste a 30 al minuto (1/2 secondo). Si noti che la dimensione della memoria della zona è impostata su 1 MiB, il che significa che può gestire 1 MiB / 64 byte per bucket di richiesta = 16384 indirizzi di spammer (che è forse un sovraccarico per il nostro caso). Regola rispettivamente, se necessario.

Successivamente, definiamo la direttiva che in realtà indirizzerà l'autore del reato attraverso il limitatore usando un caso (male, sfortunatamente) se:

location / {
    if ($remote_addr = 1.2.3.4) {
        limit_req   zone=spammer  burst=5;
    }
}

Puoi vedere i frutti del tuo lavoro nel registro di accesso del server.

Nota che questo hack non si adatta bene, dal momento che dovrai aggiornare il file di configurazione ogni volta che l'autore del reato cambia IP (figuriamoci includere più IP lì, il che significa più casi se), ma funziona.


1
Puoi anche combinare la mia risposta con il blocco geografico di Alexander Azarov e renderlo più scalabile!
Panagiotis PJ Papadomitsos,

2

Il modo migliore per gestire questo spammer è installare e configurare correttamente fail2ban. Fail2ban cercherà i pattern nei file di registro e bloccherà tutti gli ips che inviano spam al tuo sito. Naturalmente è necessario configurarlo per cercare il modello corretto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.