Come bloccare lo spam referral usando Nginx?
-
19-08-2019 - |
Domanda
Sto eseguendo due bastardi sotto un server Nginx. Continuo a ricevere richieste per un file inesistente. Gli indirizzi IP cambiano frequentemente ma l'URL di riferimento rimane lo stesso. Vorrei risolverlo.
Soluzione
https://calomel.org/nginx.html
Blocca la maggior parte di " spam referrer " - "più un fastidio che un problema"
nginx.conf
## Deny certain Referers (case insensitive)
## The ~* makes it case insensitive as opposed to just a ~
if ($http_referer ~* (babes|click|diamond|forsale|girl|jewelry|love|nudit|organic|poker|porn|poweroversoftware|sex|teen|video|webcam|zippo))
{ return 403; }
Altri suggerimenti
L'uso di Nginx modulo mappa è un po 'più efficiente e facile da gestire quando l'elenco si allunga.
Inseriscilo nel tuo blocco http {}:
map $http_referer $bad_referer {
hostnames;
default 0;
# Put regexes for undesired referers here
"~social-buttons.com" 1;
"~semalt.com" 1;
"~kambasoft.com" 1;
"~savetubevideo.com" 1;
"~descargar-musica-gratis.net" 1;
"~7makemoneyonline.com" 1;
"~baixar-musicas-gratis.com" 1;
"~iloveitaly.com" 1;
"~ilovevitaly.ru" 1;
"~fbdownloader.com" 1;
"~econom.co" 1;
"~buttons-for-website.com" 1;
"~buttons-for-your-website.com" 1;
"~srecorder.co" 1;
"~darodar.com" 1;
"~priceg.com" 1;
"~blackhatworth.com" 1;
"~adviceforum.info" 1;
"~hulfingtonpost.com" 1;
"~best-seo-solution.com" 1;
"~googlsucks.com" 1;
"~theguardlan.com" 1;
"~i-x.wiki" 1;
"~buy-cheap-online.info" 1;
"~Get-Free-Traffic-Now.com" 1;
}
Inseriscilo nel blocco del tuo server {}:
if ($bad_referer) {
return 444; # emtpy response
}
Ha funzionato per me.
Ottenuto da http://fadeit.dk/blog/post/nginx-referer-spam- blacklist
Sono stato in una situazione simile prima in cui dovevo bloccare le persone in base al comportamento invece di altre regole arbitrarie che un firewall poteva risolvere da solo.
Il modo in cui ho aggirato il problema era di fare in modo che la mia logica (Rails nel tuo caso) facesse il blocco ... Ma molto lontano:
- Chiedi alla tua logica di mantenere un elenco di blocchi come file di testo in chiaro separato da nuova riga.
- Crea uno script bash (o altro) come root per leggere questo file e aggiungere i suoi listees alla block list del tuo firewall
- Crea un cron job per chiamare nuovamente lo script come root
Il motivo per cui lo faccio in questo modo (piuttosto che concedere le autorizzazioni a Django per modificare la configurazione del firewall) è semplicemente: sicurezza. Se la mia applicazione fosse stata compromessa, non vorrei che danneggiasse qualcos'altro.
Lo script bash è qualcosa del genere:
exec < /path/to/my/djago-maintained/block-list
while read line
do
iptables -A INPUT --source $line/32 -j DROP
done
Ho creato un modulo per controllare l'IP in arrivo nelle black list https://github.com/oneumyvakin/ngx_http_blacklist_lookup_module
utilizza liste nere di projecthoneypot.org, blocklist.de e uceprotect.net