X-Forwarded-For란? 프록시 거쳐도 IP 식별하는 이유

X-Forwarded-For

X-Forwarded-For는 일반적으로 HTTP 헤더의 일부로 클라이언트의 IP 주소를 식별하는 데 사용됩니다. 이 헤더는 웹 요청이 프록시(Proxy) 또는 로드 밸런서(Road Balancer)를 통해 이루어질 때 실제 요청을 보낸 클라이언트의 IP를 식별할 때 유용하게 사용됩니다.

 

일반적으로 사용자의 웹 브라우저는 웹 서버에 직접 요청을 보냅니다. 이 경우, 웹 서버는 사용자의 IP 주소를 쉽게 식별할 수 있습니다. 그러나 요청이 프록시 서버 또는 로드 밸런서를 거쳐서 웹 서버에 도달하면, 웹 서버는 직접적으로 사용자의 IP를 알 수 없습니다. 왜냐하면 마지막으로 요청을 전달한 프록시나 로드 밸런서의 IP를 인식하기 때문입니다.

 

이런 한계를 극복하기 위해 프록시, 로드 밸런서는 X-Forwarded-For 헤더를 웹 요청에 추가할 수 있습니다. 이 헤더는 원래 클라이언트의 IP 주소를 포함합니다. 웹 서버가 X-Forwarded-For 값을 보고 실제 사용자의 IP를 알 수 있게 됩니다. 쉽게 말하면 X-Forwarded-For는 "이 요청을 보낸 사용자의 IP 주소는 00이다"라는 정보입니다.

 

X-Forwarded-For 구조 예시

 

X-Forwarded-For 헤더는 클라이언트 IP 주소, 프록시 1, 프록시 2 등과 같이 여러 IP 주소를 담을 수 있습니다. 여러 프록시를 거쳐 웹 서버에 도달하는 경우, 각 프록시는 이 헤더에 자신의 IP 주소를 추가합니다. 이 정보를 사용하면 웹 서버는 요청이 어느 경로를 통해 왔는지를 추적할 수 있습니다.

 

예시)

X-Forwarded-For 정보가 포함된 예시 헤더를 보시면 이해하 가실 겁니다. 아래의 헤더에는 X-Forwarded-For 값으로 178.82.72.134라는 IP 주소가 포함되어 있어 실제 요청(request)을 한 클라이언트의 IP 주소를 서버가 식별할 수 있습니다. (출처 : keycdn.com)

GET /foobar.jpg HTTP/1.1
Host: your_origin_host
X-Forwarded-Host: <zonename>-<hexid>.kxcdn.com
X-Forwarded-For: 178.82.72.134
X-Forwarded-Scheme: http
X-Pull: KeyCDN
Connection: close
Accept: */*
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36
Accept-Language: en-US,en;q=0.8,de;q=0.6,ja;q=0.4
Cookie: foobar

 

다만 이 정보는 조작될 수도 있는 취약점이 있습니다. 결론적으로 헤더만 조작하면 잘못된 IP 주소를 서버에 제공할 수 있기 때문입니다. 예를 들어, 프록시 도구인 피들러(fiddler)을 통해서도 헤더를 변경할 수 있습니다. 이에 따라 웹 서버도 신뢰도 있는 X-Forwarded-For 값을 얻기 위한 방안을 고려해야 합니다.

반응형

댓글

Designed by JB FACTORY