Gestionar la "cadena de confianza" de la IP real del usuario final

Es justo, podríamos simplemente eliminarlo y llegar al mismo resultado (excepto… ver abajo)

El límite de la aplicación realmente es nginx en sí mismo, no Discourse ni rails. Por lo tanto, la decisión sobre exactamente qué proxies remotos confiar se toma en el punto de entrada de la aplicación, que es nginx. Luego puede pasar esa decisión a Discourse.

Por defecto, Rails solo confía en direcciones locales al procesar x-f-f, así que lo hacemos en un lugar diferente donde podemos controlarlo fácilmente.

De hecho, resulta que Rails ni siquiera mira el encabezado x-real-ip… los encabezados que mira son

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

De alguna manera eso ha llegado desde

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

    Lanzamiento inicial de 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;

Tendremos que hacer algunas investigaciones, pero por ahora la respuesta es “funciona”. Supongo que es así como terminamos en esta situación.

Parece que quizás un gem lo usa?

1 me gusta