본문 바로가기

Programming & Network/Network

X-Forwarded-For (XFF)

정의 :
> 영어 정의 : Dentifying the originating IP address of a client connecting to a web server through an HTTP proxy or load balancer. The X-Forwarded-For HTTP request header was introduced by the Squid caching proxy server's developers.X-Forwarded-For is also an email-header indicating that an email-message was forwarded from one or more other accounts (probably automatically). Without the use of XFF or another similar technique, any connection through the proxy would reveal only the originating IP address of the proxy server, effectively turning the proxy server into an anonymizing service, thus making the detection and prevention of abusive accesses significantly harder than if the originating IP address were available. The usefulness of XFF depends on the proxy server truthfully reporting the original host's IP address; for this reason, effective use of XFF requires knowledge of which proxies are trustworthy, for instance by looking them up in a whitelist of servers whose maintainers can be trusted.

> 한국어 정의 : 요청 헤더프록시 서버를 통해 웹 서버에 연결하는 클라이언트의 원본 IP 주소를 식별하기 위한 사실상의 표준 헤더입니다. 클라이언트가 서버에 직접 연결하면 클라이언트의 IP 주소가 서버로 전송되며 서버 액세스 로그에 기록되는 경우가 많습니다. 하지만 클라이언트 연결이 정방향 또는 역방향 프록시를 통과하는 경우, 서버는 최종 프록시의 IP 주소만 보게 되므로 별 쓸모가 없는 경우가 많습니다. 특히 최종 프록시가 서버와 동일한 설치의 일부인 로드 밸런서인 경우 더욱 그렇습니다. 따라서 서버에 보다 유용한 클라이언트 IP 주소를 제공하기 위해 X-Forwarded-For 요청 헤더가 사용됩니다.


보안 및 개인정보 보호 문제 : 
이 헤더는 설계상 클라이언트의 IP 주소와 같이 개인정보에 민감한 정보를 노출합니다. 따라서 이 헤더를 배포할 때는 사용자의 개인정보 보호를 염두에 두어야 합니다.

클라이언트와 서버 사이에 신뢰할 수 있는 역방향 프록시(예:로드 밸런서)가 없는 경우 X-Forwarded-For 헤더를 신뢰할 수 없습니다. 클라이언트와 모든 프록시가 정상이고 정상적으로 작동하는 경우 헤더의 IP 주소 목록은 Directives 섹션에 설명된 의미를 갖습니다. 그러나 클라이언트 또는 프록시가 악의적이거나 잘못 구성된 위험성이 있는 경우 헤더의 일부(또는 전체)가 스푸핑 되었을 수 있습니다(목록이 아니거나 IP 주소가 전혀 포함되지 않을 수 있음).

클라이언트와 서버 사이에 신뢰할 수 있는 역방향 프록시가 있는 경우, 신뢰할 수 있는 프록시에 의해 추가되었으므로 최종 X-Forwarded-For IP 주소(신뢰할 수 있는 프록시당 하나씩)는 신뢰할 수 있습니다.(서버에 직접 접속하지 않고 해당 프록시를 통해서만 접속할 수 있는 경우에만 해당됩니다).

X-Forwarded-For의 보안 관련 사용(예:속도 제한 또는 IP 기반 액세스 제어)은 신뢰할 수 있는 프록시에서 추가한 IP 주소만 사용해야 합니다. 신뢰할 수 없는 값을 사용하면 속도 제한기 회피, 액세스 제어 우회, 메모리 고갈 또는 기타 보안 또는 가용성에 부정적인 결과를 초래할 수 있습니다.

반대로 가장 왼쪽(신뢰할 수 없는)값은 스푸핑 된 값의 사용 가능성으로 인한 부정적인 영향이 없는 경우에만 사용해야 합니다.

Reference 01
Reference 02

'Programming & Network > Network' 카테고리의 다른 글

CIDR(Classless Inter-Domain Routing)  (0) 2023.09.07
UTM (Unified Threat Management)  (0) 2023.09.06
OSI 7 계층  (0) 2023.08.29
About Cloud network tools  (0) 2023.01.05
Network 용어정리  (0) 2023.01.04