Come determinare (e bloccare) gli indirizzi IP di scraper / bot tramite CloudFlare su Discourse?

Ho uno scenario in cui sono stati rilevati oltre 13.000 crawler e il traffico del database è esploso. È evidente che qualcuno sta facendo scraping del nostro forum, ma non sono sicuro di come determinare l’IP e adottare misure contro di esso, dato che passa attraverso il DNS di CloudFlare.

Hai qualche idea su come procedere?

Vorrei impostare una soluzione automatica di limitazione della velocità che rilevi comportamenti di rete aggressivi e poi limiti la velocità o disabiliti gli aggressori per un certo periodo di tempo.

Hai il template di Cloudflare nel tuo file di configurazione yml?

Sì, si trova in /var/discourse/containers/app.yml:

  - "templates/cloudflare.template.yml"

Vorrei precisare che sto riscontrando un serio problema: l’accesso al database (utilizzo un altro server database nello stesso sito) si mantiene costantemente tra 13 e 20 Mbps. Il traffico è aumentato drasticamente quando il numero di crawler è esploso e non è sceso da quasi due settimane. Il pannello di controllo del server indica che il traffico è schizzato a livelli assurdi nello stesso momento e non è diminuito da quel livello di accesso costante, rischiando addirittura di esaurire la banda disponibile dei server se questa situazione persiste.

Hai incluso il modello di limitazione della velocità? Vedi i numeri IP corretti nei log (non gli IP di Cloudflare)?

Anche io ho questo in app.yml:

  - "templates/web.ratelimited.template.yml"

Vedo anche gli indirizzi IP corretti per gli utenti - non sono sicuro a cosa ti riferisci con i log. Hmm.

Come forse ricorderete, ho pensato di provare a ridurre il consumo di banda in questo momento cambiando tutto in modo che utilizzi indirizzi IP privati interni, poiché questo mi impedirà almeno di ricevere bollette elevate.

Ho notato un’altra cosa strana. Ho modificato la connessione al database passando dall’indirizzo IP pubblico a quello privato per non consumare così rapidamente la quota di trasferimento mensile, ma sul server del database mi aspettavo di vedere solo connessioni effettuate tramite l’indirizzo IP privato dal server Docker di Discourse. Ora vedo effettivamente traffico dall’IP privato locale, ma continuo a vedere quantità eccessive di traffico proveniente dall’indirizzo IP pubblico, consumando quindi ancora rapidamente la quota mensile.

Ho cercato a lungo sia l’indirizzo IP pubblico che il nome host del server del database sul server Docker di Discourse, ma non riesco a trovarli da nessuna parte. Anche se accedo all’app (./launcher enter app) ed eseguo env | grep DB, vedo l’indirizzo IP PRIVATO corretto utilizzato per la LAN. Posso cercare nel filesystem, ma non trovo le occorrenze che mi aspetterei.

Avete qualche idea su come Discourse o l’immagine Docker possano ancora accedere all’indirizzo IP sbagliato? Non riesco proprio a capire da dove provenga tutto questo traffico con IP pubblico sul server di Discourse.