Gestione della "catena di fiducia" dell'IP reale dell'utente finale

È una domanda legittima: potremmo semplicemente eliminarlo e ottenere lo stesso risultato (tranne… vedi più sotto).

Il confine dell’applicazione è effettivamente nginx stesso, non Discourse o Rails. Di conseguenza, la decisione su quali proxy remoti fidarsi viene presa al punto di ingresso dell’applicazione, che è nginx. Questi può poi trasmettere tale decisione a Discourse.

Per impostazione predefinita, Rails si fida solo degli indirizzi locali quando elabora x-f-f, quindi lo gestiamo in un punto diverso dove possiamo controllarlo facilmente.

In realtà, sembra che Rails non guardi nemmeno l’intestazione x-real-ip… le intestazioni che controlla sono:

  • forwarded
  • client-ip
  • x-forwarded-for

In qualche modo è arrivato fin qui

commit 21b562852885f883be43032e03c709241e8e6d4f (tag: v0.8.0)
Author: Robin Ward
Date:   Tue Feb 5 14:16:51 2013 -0500

    Initial release of Discourse

diff --git a/config/nginx.sample.conf b/config/nginx.sample.conf
new file mode 100644
index 00000000..62fabf4a
--- /dev/null
+++ b/config/nginx.sample.conf
...
+    proxy_set_header  X-Real-IP  $remote_addr;

Dovremo fare un po’ di indagini, ma per ora la risposta è “funziona”. Suppongo che sia così che siamo finiti in questa situazione.

Sembra che forse un gem lo utilizzi?

1 Mi Piace