Tengo una aplicación que escucha en el puerto 5000 y se puede acceder a Internet a través de nginx con esta configuración:
upstream myapp {
server 127.0.0.1:5000;
}
server {
listen 80;
location / {
proxy_pass http://myapp;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
#...
}
Ahora, asumiendo que solo se puede acceder al puerto 5000 directamente desde el host local, asumo que todas las comunicaciones externas son manejadas por nginx, asumiendo que todas las solicitudes que recibe la aplicación que no tienen el X-Real -El encabezado de IP proviene de localhost.
¿Son estas suposiciones erróneas? ¿Podría una persona sin acceso a la máquina seguir accediendo a la aplicación web sin autenticación? ¿Me estoy perdiendo algo?
Editar: Creo que no estoy planteando una pregunta clara aquí. Probablemente una mezcla entre mi falta de conocimiento y yo pensando que estoy entendiendo algo fundamentalmente incorrecto. Entonces, creo que podrías resumir mis dudas al responder esto:
En esta situación, ¿puedo asumir que si una solicitud a mi aplicación web no tiene el encabezado "X-Real-IP" entonces proviene de localhost?
o lo contrario:
¿Puedo falsificar de alguna manera una solicitud que haga que nginx no establezca el encabezado X-Real-IP, dada la configuración anterior?
¡Salud!