Utilizzo di Discourse con Cloudflare: le migliori pratiche

Utilizzo di Discourse con Cloudflare

:bookmark: Questa guida spiega come configurare e utilizzare Discourse con Cloudflare, incluse le best practice di sicurezza e i suggerimenti per la risoluzione dei problemi.

:person_raising_hand: Livello utente richiesto: Amministratore

:information_source: È richiesto l’accesso alla console per le installazioni self-hosted

Riepilogo

Cloudflare può migliorare la tua istanza Discourse con prestazioni migliorate tramite CDN, livelli di sicurezza aggiuntivi come la protezione DDoS e il supporto HTTPS. Questa guida copre il processo di configurazione e le best practice per una configurazione ottimale.

Perché usare Cloudflare con Discourse

L’utilizzo di Cloudflare con la tua istanza Discourse offre diversi vantaggi chiave:

  • Prestazioni: la CDN di Cloudflare può migliorare l’accesso globale agli asset comuni, migliorando l’esperienza utente a livello globale (fonte)
  • Sicurezza: livelli di protezione aggiuntivi tra cui:

:warning: Per le installazioni self-hosted, sebbene Cloudflare offra questi vantaggi, aggiunge complessità alla tua configurazione.

Configurazione di Cloudflare

  1. Familiarizza con i Fondamenti di Cloudflare
  2. Segui le istruzioni di configurazione per configurare Cloudflare per il tuo dominio e ottenere i benefici di sicurezza, prestazioni e affidabilità

Best practice di configurazione

Impostazioni DNS

  • Assicurati che i record DNS che puntano alla tua istanza Discourse siano proxati
  • Accedi alle impostazioni DNS su dash.cloudflare.com/?to=/:account/:zone/dns

Configurazione SSL/TLS

  • Imposta la modalità di crittografia su “Full (strict)”
  • Accedi alle impostazioni SSL/TLS su dash.cloudflare.com/?to=/:account/:zone/ssl-tls

:warning: Una configurazione SSL/TLS errata può causare loop di reindirizzamento

Configurazione della cache

  • Imposta il livello di cache su “Standard”
  • Accedi alle impostazioni di cache su dash.cloudflare.com/?to=/:account/:zone/caching/configuration

Regole di pagina

Crea le seguenti regole di pagina su dash.cloudflare.com/?to=/:account/:zone/rules:

  • Imposta il Livello di Cache su “Bypass” per community.example.com/session/*
  • Configura le Impostazioni delle Regole per normalizzare gli URL in entrata

Impostazioni di rete

Configura quanto segue su dash.cloudflare.com/?to=/:account/:zone/network:

Abilita:

  • Compatibilità IPv6
  • Geolocalizzazione IP
  • Registrazione errori di rete
  • Routing Onion

Disabilita:

  • Pseudo IPv4
  • Buffering delle risposte
  • Intestazione True-Client-IP
  • gRPC

Imposta la Dimensione Massima di Upload in base alla policy del tuo sito (si consigliano 100 MB)

Impostazioni WAF (Web Application Firewall)

Se il tuo piano Cloudflare supporta le Regole Gestite, creane le seguenti:

  1. Salta WAF durante la creazione/modifica di post:
    (http.request.uri.path eq "/posts(/[0-9]+)?" and http.request.method in {"POST" "PUT"})
    
  2. Per gli utenti del plugin Data Explorer, salta WAF sulle query di amministrazione:
    (http.request.uri.path contains "/admin/plugins/explorer/queries/" and http.request.method eq "PUT")
    

Per entrambe le regole:

  • Scegli “Salta tutte le regole rimanenti”
  • Abilita “Registra le richieste corrispondenti”

Accedi alle impostazioni WAF su dash.cloudflare.com/?to=/:account/:zone/firewall/managed-rules

Ottimizzazione dei contenuti

Configura quanto segue su dash.cloudflare.com/?to=/:account/:zone/speed/optimization:

  • Abilita Brotli
  • Disabilita Rocket Loader™
  • Disabilita Auto Minify

:warning: Discourse riceve frequentemente segnalazioni di sito non disponibile a causa dell’abilitazione di Rocket Loader™

Configurazione aggiuntiva per installazioni self-hosted

Per garantire l’inoltro corretto dell’indirizzo IP, aggiungi quanto segue alla sezione dei template nel tuo containers/app.yml:

- "templates/cloudflare.template.yml"

Correlato: Come si configura Cloudflare?

Risorse di supporto

Risoluzione dei problemi

Problemi di Content Security Policy (CSP)

Se riscontri errori CSP:

  • Verifica che Rocket Loader sia disabilitato
  • Controlla che gli script siano aggiunti correttamente all’impostazione del sito content security policy script src

Funzionalità OneBox

Se OneBox viene bloccato:

  • Verifica se Super Bot Fight Mode è abilitato
  • Regola l’impostazione “Definitely automated” se è impostata su “Managed” o “Block”
  • Considera la creazione di una regola WAF personalizzata per lo user agent di OneBox
28 Mi Piace

Buongiorno,

Grazie per questa guida che ho seguito alla lettera ma riscontro un problema, ogni volta che attivo Cloudflare nella mia console ricevo un errore con la CSP che mi visualizza (Rifiutato di eseguire script inline perché viola la seguente direttiva della Content Security Policy: "script-src) e dopo avermi indicato gli URL presenti nella mia CSP: (È necessaria la parola chiave ‘unsafe-inline’, un hash (‘sha256-VCiGKEA…’) o un nonce (‘nonce-…’) per abilitare l’esecuzione inline.

Ho provato a cercare ovunque ma non riesco a trovare una soluzione diversa dalla disattivazione del proxy che risolve il mio problema?

GRAZIE.

Puoi verificare se Rocket Loader è disattivato?

Un’altra cosa da fare è verificare che gli script siano aggiunti correttamente a content security policy script src nelle impostazioni del sito.

Se nessuna di queste soluzioni funziona, ti suggerisco di contattare Cloudflare all’indirizzo https://community.cloudflare.com/t/using-discourse-with-cloudflare-best-practices/602890.

1 Mi Piace

Grazie @nat e @tcloonan

Questo è stato nella mia lista di cose da fare per un anno o due, ma sono stato scoraggiato dall’età di alcuni dei vecchi thread su questo argomento :smiley:

Ci sono problemi o cose speciali per le persone che utilizzano AWS S3 per l’archiviazione e per i backup? :thinking:

Hai ancora bisogno del template cloudflare in app.yml per indirizzi IP reali o è cambiato nel corso degli anni?

1 Mi Piace

Sì. Hai ancora bisogno del template cloudflare. Senza di esso, tutto il traffico sembrerà provenire dai server di cloudflare anziché dall’IP del browser dell’utente.

Non lo vedo menzionato nell’OP, il che sembra una grave omissione. Come hai dedotto che ti servisse?

2 Mi Piace

Ciao! Sono in giro dal 2014 (alcuni anni per lo più in silenzio) ma stiamo lavorando alla migrazione della nostra community dal 2020 con un importer personalizzato, e stiamo lavorando alla seconda versione del nostro plugin interno per inserire e abilitare bbob come motore bbcode in Discourse. Puoi seguire i nostri progressi qui: GitHub - RpNation/bbcode: RpNation's Official BBCode Implementation for Discourse

Respiro questo software da un po’. Usiamo Cloudflare, quindi ho ri-ricercato quali eventuali problemi abbia con Discourse, dato che ora siamo nella fase in cui posso iniziare a preoccuparmi di cose meno vitali che non sono considerate bloccanti.

@nat Potresti aggiungere una modifica riguardo al template per le istanze self-hosted!

4 Mi Piace

Fatto, grazie a entrambi per averlo segnalato!

4 Mi Piace

Grazie mille! Probabilmente è stato anche il motivo per cui il mio sito è diventato improvvisamente inaccessibile. Devo aver giocato un po’ troppo con le impostazioni di Cloudflare.

Poiché il mio vecchio provider di domini supportava DNSSec solo in modo inadeguato e errato, ho dovuto cercarne uno nuovo. È stato allora che mi è venuto in mente Cloudflare. Il piano gratuito è completamente sufficiente per me. È un peccato che le tariffe non scalino nemmeno in modo ragionevole in base ai requisiti.

2 Mi Piace

Si sta aggiungendo in questa posizione?

1 Mi Piace

Solo per precisione, la query per l’esclusione WAF è:

(http.request.uri.path eq "/posts(/[0-9]+)?" and http.request.method in {"POST" "PUT"})

Puoi copiarla e incollarla se fai clic su Edit expression a sinistra invece di utilizzare la selezione del modulo.

Notato oggi mentre aggiornavo e improvvisamente metà del forum non funzionava a causa di Auto Minify :weary:

Modifica: ho appena notato che questo è un post wiki. Sciocco da parte mia, ho modificato il post iniziale.

3 Mi Piace

Modalità di crittografia SSL/TLS Completa (strict). Ci saranno problemi se non viene chiusa? Non verrà comunque definito un SSL automatico?

Per aggiungere a questo, sembra che la funzionalità OneBox venga bloccata quando la modalità Super Bot Fight è attiva e l’impostazione “Definitely automated” è impostata su “Managed” o “block”.

È possibile aggirare questo problema impostando una regola WAF personalizzata per l’user agent di Onebox, ma forse esiste un modo più sicuro per farlo?

Correlato a

questa parte potrebbe aver bisogno di una formulazione migliore:

@supermathie Suggerimento:

dovrai aggiungere la seguente riga alla fine della sezione dei template nel tuo containers/app.yml.

come illustrato in Using Discourse with Cloudflare: Best Practices - #11 by shawa

Nel migliore dei casi, si potrebbe fornire anche un link a una guida generale sui template nella configurazione del server, che non sono riuscito a trovare a prima vista.

Suggerirei di disattivare i bot AI in Cloudflare. Questo si trova in sicurezza → bot → blocca bot AI.

I bot AI stavano martellando il mio sito con 30.000-40.000 visualizzazioni di pagine giornaliere. Dopo aver attivato questo filtro, il mio traffico di bot AI è diminuito in modo significativo.

4 Mi Piace

Il codice sopra dovrebbe essere modificato in:

 - "templates/cloudflare.template.yml"

Grazie,
Major

2 Mi Piace

È vero che il supporto WebSockets dovrebbe essere abilitato in Cloudflare?

Ha funzionato bene per noi per anni senza, e per quanto ho potuto trovare informazioni qui sul forum, Discourse non fa uso di WebSockets.

Non capisco se devo farlo

Hai ragione. Non credo che usiamo Websockets.

L’ho rimosso e ho anche aggiornato lo snippet del modello dell’utente sopra.

2 Mi Piace

A proposito, penso che tutte le impostazioni di rete siano irrilevanti per Discourse:

  • La compatibilità IPv6 non può più essere disabilitata e, naturalmente, Discourse non dipende da essa, ma può funzionare perfettamente su un sistema solo IPv4.
  • La geolocalizzazione IP aggiunge l’intestazione CF-IPCountry alle richieste, che tuttavia non viene utilizzata da Discourse. Utilizza la propria funzionalità MaxMind (opzionale).
  • Network Error Logging aggiunge l’intestazione di risposta Report-To, che i browser possono utilizzare per segnalare errori. Tuttavia, è deprecata, e anche se la funzionalità può essere abilitata con tutti i piani Cloudflare, l’elemento della dashboard per visualizzare effettivamente i report è disponibile solo con il piano Enterprise. Quindi, in questo caso, per alcuni browser meno recenti potrebbe trattarsi solo di una regressione della privacy e di un sovraccarico di rete.
  • Onion Routing migliora la privacy per le richieste provenienti dalla rete Tor. Discourse non se ne preoccuperà né lo saprà.
  • La funzionalità Pseudo IPv4 potrebbe essere necessaria se l’host esegue software, come analytics obsoleti o simili, che supportano solo indirizzi IPv4. Le intestazioni proxy di Cloudflare, come Cf-Connecting-IP (o altre, a seconda della configurazione), possono quindi essere regolate per avere un indirizzo IPv4 più o meno univoco, invece dell’effettivo indirizzo IPv6 del client, per aggirare il fatto che il supporto IPv6 per le richieste client->Cloudflare non può più essere disabilitato. Ancora una volta, Discourse non se ne preoccuperà. Voglio dire, sarebbe un problema, ad esempio, per il rilevamento GeoIP, ma la funzionalità è disabilitata per impostazione predefinita e gli amministratori dovrebbero ovviamente abilitarla solo se strettamente richiesto dal software che utilizzano, accettando lo svantaggio di IP client non reali. Può anche essere configurata per aggiungere solo una nuova intestazione con l’indirizzo IPv4 pseudo, e gli analytics (o qualsiasi altra cosa) possono quindi riscrivere le intestazioni IP del client dove necessario, mentre le richieste a Discourse non verrebbero interessate. In ogni caso, per la funzionalità generale di Discourse, la funzionalità è irrilevante.
  • True-Client-IP Header aggiunge solo questa intestazione oltre a CF-Connecting-IP e X-Forwarded-For. Discourse non la utilizza, inoltre il modello di configurazione di Discourse utilizza CF-Connecting-IP invece. Quindi non ha alcun effetto.
  • gRPC non è utilizzato da Discourse, ma avere Cloudflare abilitato per inoltrare richieste gRPC non fa male, come per i WebSockets. Entrambi potrebbero essere necessari per altri software in esecuzione sullo stesso dominio Cloudflare.
  • Maximum Upload Size 100 MB è il valore predefinito e minimo. Dimensioni di upload maggiori richiedono piani Business o Enterprise, e Discourse non si interromperà se Cloudflare consente upload più grandi.

L’unica cosa di cui non sono sicuro se possa avere un effetto è Response Buffering. E non posso testare poiché è una funzionalità esclusiva per Enterprise. Ma non riesco a immaginare che al client importi se i pacchetti vengono trasmessi in streaming da CF edge man mano che arrivano, o inviati in un unico blocco una volta completati all’edge. Per i dati memorizzati nella cache (memorizzati nella cache su Cloudflare, intendo), questo viene sempre fatto comunque e non causa problemi, almeno. Questa funzionalità influisce solo sui dati non memorizzati nella cache.

Quindi, in sostanza, rimuoverei l’intera sezione “Network settings” in quanto irrilevante per la funzionalità di Cloudflare, ma altri software potrebbero richiedere determinate impostazioni o gli amministratori potrebbero preferirle in un certo modo, e dovrebbero sapere che Discourse funzionerà in ogni caso.

1 Mi Piace