X-Forwarded-For 개념

X-Forwarded-For

X-Forwarded-For는 HTTP 통신 과정에서 중간에 위치한 프록시 또는 로드밸런서 등의 서버를 경유할 때 원본 클라이언트의 IP 주소를 전달하기 위한 HTTP 헤더다. 단어에도 대신 전달됐다는 의미가 담겨 있다.

HTTP 요청은 클라이언트에서 서버로 전달될 때 여러 프록시 서버를 경유할 수 있는데 이 과정에서 서버는 실제 클라이언트의 IP 주소를 알 수 없게 된다. 대신 서버는 요청을 직접 보낸 마지막 서버의 IP 주소만 확인할 수 있다.

이 문제를 해결하기 위해 X-Forwarded-For 헤더가 사용된다. 이 헤더는 클라이언트가 원래 보낸 IP 주소와 프록시 서버의 IP 주소를 순서대로 기록해서 최종 목적지 서버로 전달한다.

X-Forwarded-For 예시

클라이언트 IP: 100.100.100.10
↓
1번 프록시 서버 IP: 150.150.150.20
↓
2번 프록시 서버 IP: 170.170.170.30
↓
최종 목적지 서버 IP: 200.200.200.40

이때 최종 목적지 서버에 전달된 요청의 헤더에는 아래와 같이 X-Forwarded-For 정보가 담긴다.

X-Forwarded-For: 100.100.100.10, 150.150.150.20

따라서 목적지 서버(200.200.200.40)는 실제 사용자의 IP(100.100.100.10)를 파악할 수 있다.

X-Forwarded-For 헤더의 취약점

하지만 X-Forwarded-For 헤더는 쉽게 변조될 수 있다. 예를 들어, 프록시 서버에서 X-Forwarded-For를 클라이언트 요청 값과 무관하게 원하는 IP로 던지는 식이다. 이런 이유로 웹서버에서 신뢰할 수 있는 프록시의 IP 목록을 별도로 관리하는 식으로 대응한다.

댓글 남기기