Passa al contenuto principale

Non sprecare le risorse del tuo server: blocca i bot indesiderati usando Nginx

· 4 minuti di lettura
Customer Care Engineer

block-unwanted-bots-using-nginx

I bot dei motori di ricerca (crawler) sono programmi speciali che scansionano i siti web su Internet. I motori di ricerca ne hanno bisogno per trovare, indicizzare e visualizzare le pagine nei risultati di ricerca. Ma non tutti i bot sono utili!

A volte il tuo sito può essere visitato da bot indesiderati che:

  • Raccolgono dati senza la tua autorizzazione.
  • Consumano risorse del server, rallentandolo.
  • Vengono utilizzati per cercare vulnerabilità.

Se vuoi proteggere il tuo sito da tali bot, è ora di configurare Nginx! In questo articolo, ti mostreremo come bloccarli facilmente e rapidamente utilizzando un file di configurazione speciale.


Perché la configurazione di Nginx invece di robots.txt?

Il file robots.txt è uno strumento per gestire il comportamento dei bot dei motori di ricerca. Indica loro quali parti del sito non dovrebbero essere sottoposte a crawling. È molto facile usare questo file: creane semplicemente uno nella directory principale del sito, ad esempio:

User-agent: BadBot  

Disallow: /  

Tuttavia, c'è un problema: le istruzioni in robots.txt sono una raccomandazione piuttosto che una regola applicata. I bot coscienziosi seguono le istruzioni di questo file, ma la maggior parte dei bot semplicemente lo ignora.

Al contrario, la configurazione di Nginx ti consente di bloccare fisicamente l'accesso ai bot indesiderati, garantendo un risultato efficace al 100%.


Come Nginx blocca i bot indesiderati: uso della risposta 444

A differenza di robots.txt, che fornisce solo raccomandazioni ai bot, Nginx blocca fisicamente il loro accesso. Un modo per raggiungere questo obiettivo è utilizzare una risposta speciale del server con il codice 444.

In Nginx, il codice di risposta 444 è un metodo interno per terminare la connessione con il client senza inviare alcuna risposta. Questo è un approccio efficiente per ignorare le richieste indesiderate e ridurre al minimo il carico del server.


Impostazione del blocco

Passaggio 1: Come identificare i bot indesiderati?

I bot indesiderati possono essere identificati dal loro User-Agent, che è un parametro inviato da tutti i client quando visitano il tuo sito. Ad esempio, alcuni User-Agent potrebbero essere simili a questi:

    AhrefsBot     SemrushBot     MJ12bot

Puoi trovare valori sospetti di User-Agent nel log di accesso di Nginx (se il tuo sito utilizza PHP-FPM):

sudo grep -i bot /var/log/nginx/access.log

Oppure nel log di accesso di Apache (se il tuo sito utilizza il modulo Apache o FastCGI come gestore PHP):

  • Per Ubuntu/Debian:
sudo grep -i bot /var/log/apache2/access.log
  • Per CentOS/AlmaLinux/RockyLinux:
sudo grep -i bot /var/log/httpd/access.log

Se stai utilizzando un pannello di controllo come FASTPANEL, ogni sito avrà il proprio file di log separato. Puoi analizzarli singolarmente o tutti insieme utilizzando un comando come:

  • Se il tuo sito utilizza il modulo Apache o FastCGI come gestore PHP:
sudo cat /var/www/*/data/logs/*-backend.access.log |  grep -i bot | tail -500
  • Se il tuo sito utilizza PHP-FPM:
sudo cat /var/www/*/data/logs/*-frontend.access.log |  grep -i bot | tail -500

Questo comando visualizzerà le ultime 500 richieste effettuate a tutti i tuoi siti in cui il parametro User-Agent contiene la parola "bot". Un esempio di una riga (una richiesta al tuo sito) potrebbe essere simile a questa:

IP - [03/Nov/2022:10:25:52 +0300] "GET link HTTP/1.0" 301 811 "-" "Mozilla/5.0 (compatible; DotBot/1.2; +https://opensiteexplorer.org/dotbot; [email protected])"

o

IP - [24/Oct/2022:17:32:37 +0300] "GET link HTTP/1.0" 404 469 "-" "Mozilla/5.0 (compatible; BLEXBot/1.0; +http://webmeup-crawler.com/)"

Lo User-Agent del bot si trova tra i segmenti “compatible;” e “/version.number“ alla fine della riga di richiesta tra parentesi. Quindi negli esempi precedenti, gli User-agent sono: BLEXBot e DotBot.

Analizza le informazioni che raccogli e annota le stringhe User-Agent dei bot più attivi per il passaggio successivo di configurazione del blocco

Passaggio 2: Creare un file per bloccare i bot

  1. Connettiti al tuo server tramite SSH.
  2. Prima di apportare modifiche, assicurati che la tua attuale configurazione di Nginx non contenga errori:
nginx -t

Se tutto va bene, vedrai:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

nginx: configuration file /etc/nginx/nginx.conf test is successful

In caso di errori, esaminali e correggili nel file indicato dai messaggi di errore.

  1. Crea un file separato che elenchi i bot da bloccare:
sudo nano /etc/nginx/conf.d/block_bots.conf

Aggiungi il seguente codice al file:

    map $http_user_agent $block_bot {

        default 0;

        ~*AhrefsBot 1;

        ~*SemrushBot 1;

        ~*MJ12bot 1;

    }



    server {

        if ($block_bot) {

            return 444;

        }
    }

Qui creiamo una map che determina quali bot devono essere bloccati.

Seguendo questo schema, elenca le stringhe User-Agent dei bot che desideri bloccare. Devi elencare ogni bot su una nuova riga e inserire un punto e virgola ; alla fine di ogni riga come delimitatore.

Dopo aver terminato la creazione dell'elenco, premi "Ctrl + O" sulla tastiera per salvare il file, quindi "Ctrl + X" per uscire dall'editor nano.

Passaggio 3: Applica le modifiche

Dopo aver apportato le modifiche, testa sempre la configurazione di Nginx per verificarne la correttezza, per assicurarti che non ci siano errori di sintassi:

sudo nginx -t

Se tutto va bene, vedrai:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

nginx: configuration file /etc/nginx/nginx.conf test is successful

In caso di errori, rivedi l'output per identificarli e correggerli nel file specificato.

Quindi ricarica la configurazione di Nginx per applicare le modifiche:

sudo systemctl reload nginx

In futuro, se avrai bisogno di aggiungere altri bot al file block_bots.conf, dovrai ripetere questo passaggio ogni volta


Conclusione

Ora sai come bloccare facilmente i bot di ricerca indesiderati sul tuo server usando Nginx! Tieni d'occhio i tuoi log e aggiungi nuove righe al file di configurazione block_bots.conf secondo necessità.

Assicurati di bloccare solo i bot dannosi in modo da non impedire ai motori di ricerca utili come Google o Bing di indicizzare il tuo sito.