맨위로가기

XFF

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

X-Forwarded-For(XFF)는 HTTP 헤더 필드 중 하나로, 프록시 서버를 거쳐 웹 서버에 연결되는 클라이언트의 원래 IP 주소를 식별하는 데 사용된다. XFF 필드는 쉼표로 구분된 IP 주소 목록을 포함하며, 가장 왼쪽에 있는 IP 주소는 원래 클라이언트의 주소이다. 이 헤더는 표준화되지 않았으며, 위조될 수 있으므로 신뢰성에 주의하여 사용해야 한다. XFF는 프록시 서버, 캐시 엔진, 로드 밸런서 등 다양한 환경에서 지원되며, 웹 서버 로그에 클라이언트 IP 주소를 기록하는 데 활용될 수 있다.

더 읽어볼만한 페이지

  • 익명 - 아무개
    아무개는 특정 개인을 지칭하지 않고 신원을 알 수 없는 사람을 나타내는 다양한 언어 및 문화적 표현을 의미한다.
  • 익명 - 온라인 탈억제 효과
    온라인 탈억제 효과는 익명성, 비가시성, 비동기성 같은 온라인 환경의 특성으로 인해 현실과는 다른 행동 변화를 유발하며, 긍정적·부정적 측면 모두를 지니고 있어 주의 깊은 관리가 필요하다.
  • HTTP - HTTPS
    HTTPS는 HTTP에 보안 기능이 더해진 통신 규약으로, 웹 브라우저와 서버 간 통신을 암호화하여 보안을 강화하지만, 인증서 비용, 서버 부하, 혼합 콘텐츠 문제 등의 단점도 존재한다.
  • HTTP - HTTP 쿠키
    HTTP 쿠키는 웹 서버가 사용자 브라우저에 저장하는 작은 텍스트 파일로, 웹 사이트가 방문 기록, 로그인 정보 등을 기억하여 HTTP의 상태 비저장성을 보완하고 세션 관리, 개인 설정, 사용자 추적 등에 활용되지만 개인 정보 보호 및 보안 문제에 대한 논란이 있다.
XFF
HTTP 헤더 필드
필드 종류요청 헤더
설명클라이언트가 서버로 요청을 보낼 때 사용하는 헤더 필드
X-Forwarded-For (XFF)
용도클라이언트의 원 IP 주소 식별
형식X-Forwarded-For: 클라이언트 IP 주소
프록시 서버 환경프록시 서버를 거치는 경우, 각 프록시 서버의 IP 주소가 순서대로 추가됨
보안 고려 사항XFF 헤더는 위조 가능성이 있으므로, 신뢰할 수 있는 프록시 서버에서만 사용해야 함
XFF 헤더에 의존하여 접근 제어를 수행하는 것은 위험할 수 있음
동작 방식
클라이언트HTTP 요청 시 X-Forwarded-For 헤더를 추가하지 않음 (또는 기존 헤더를 수정)
프록시 서버요청을 전달할 때, 수신한 요청에 X-Forwarded-For 헤더가 없으면 헤더를 생성하고 클라이언트 IP 주소를 추가
이미 X-Forwarded-For 헤더가 존재하면, 쉼표(,)와 함께 클라이언트 IP 주소를 추가
웹 서버X-Forwarded-For 헤더를 확인하여 클라이언트의 IP 주소를 식별
가장 왼쪽의 IP 주소가 원래 클라이언트의 IP 주소
예시
X-Forwarded-For 헤더 값192.0.2.43, 203.0.113.60
설명192.0.2.43은 클라이언트 IP 주소, 203.0.113.60은 프록시 서버 IP 주소
관련 헤더
X-Forwarded-Proto클라이언트가 사용한 프로토콜 (HTTP 또는 HTTPS) 식별
X-Real-IP클라이언트의 실제 IP 주소 (일부 프록시 서버에서 사용)
ForwardedRFC 7239에 정의된 표준 헤더, XFF를 대체하기 위해 제안됨

2. 형식

X-Forwarded-For (XFF) 필드는 클라이언트 IP 주소와 프록시 서버 IP 주소 목록을 쉼표와 공백으로 구분하여 나타낸다. 가장 왼쪽의 IP 주소가 원래 클라이언트의 IP 주소이고, 이후 요청을 전달한 각 프록시 서버의 IP 주소가 순서대로 추가된다.[35][2]

일반적인 형식은 다음과 같다.

: `X-Forwarded-For: client, proxy1, proxy2`

예를 들어, 요청이 proxy1, proxy2, proxy3을 거친 경우, X-Forwarded-For 헤더는 다음과 같이 표시된다.[3]

: `X-Forwarded-For: 203.0.113.195, 70.41.3.18, 150.172.238.178`

여기서 203.0.113.195는 클라이언트 IP 주소, 70.41.3.18은 proxy1의 IP 주소, 150.172.238.178은 proxy2의 IP 주소이다. proxy3의 IP 주소는 헤더에 표시되지 않고 요청의 원격 주소로 나타난다.

X-Forwarded-For 헤더는 공식적으로 표준화되지 않았기 때문에, IP 주소 형식에 몇 가지 변형이 있을 수 있다. 예를 들어, 일부 구현은 클라이언트의 포트 번호를 포함하거나, IPv6 주소를 대괄호로 묶기도 한다.

예시는 다음과 같다.

: `X-Forwarded-For: 203.0.113.195:41237, 198.51.100.100:38523`

: `X-Forwarded-For: [2001:db8::1a2b:3c4d]:41237, 198.51.100.100:26321`

: `X-Forwarded-For: [2001:db8::aa:bb]`

X-Forwarded-For 필드는 조작하기 쉬우므로[6], 제공된 정보를 신중하게 다루어야 한다. 마지막 IP 주소는 항상 마지막 프록시에 연결하는 IP 주소이므로, 이 정보가 가장 신뢰할 수 있다.

3. 사용

X-Forwarded-For 헤더는 HTTP 프록시 서버가 요청을 전달할 때 추가되거나 수정된다. 서버는 클라이언트의 주소를 기존 X-Forwarded-For 헤더에 쉼표로 구분하여 추가하거나, 클라이언트 주소를 값으로 하는 새로운 X-Forwarded-For 헤더를 생성한다.

X-Forwarded-For 필드는 위조하기 쉽기 때문에 제공된 정보를 주의해서 사용해야 한다. 가장 오른쪽에 있는 IP 주소는 항상 마지막 프록시에 연결하는 IP 주소이므로 가장 신뢰할 수 있는 정보 출처이다. X-Forwarded-For 데이터는 순방향 또는 역방향 프록시 시나리오에서 사용할 수 있다. 서버가 신뢰할 수 있는 리버스 프록시 뒤에 있고 해당 프록시에서만 연결을 허용하는 경우, 헤더 값은 일반적으로 신뢰할 수 있다고 간주할 수 있다.

단순히 X-Forwarded-For 필드를 로깅하는 것만으로는 항상 충분하지 않다. 체인에서 마지막 프록시 IP 주소는 X-Forwarded-For 필드 내에 포함되지 않고 실제 IP 헤더에 있기 때문이다. 웹 서버는 완전성을 위해 요청의 소스 IP 주소와 X-Forwarded-For 필드 정보를 모두 로깅해야 한다.

4. 대안

2014년을 기준으로 IETF RFC 7239는 XFF에 비해 더 많은 기능을 제공하는 `Forwarded` HTTP 헤더를 표준화하였다.[36] `Forwarded` 헤더의 문법 예시는 다음과 같다.

Forwarded: for=192.0.2.60;proto=http;by=203.0.113.43

HAProxy는 "XFF"의 대안으로 PROXY 프로토콜을 도입하였는데, 이는 래퍼 PROXY 프로토콜 파싱에 더 효율적이다.[37] 이 프로토콜은 여러 전송 프로토콜에 사용 가능하며 내부 프로토콜 점검이 필요하지 않아 HTTP에 국한되지 않는다. RFC 7239는 `X-Forwarded-For` HTTP 헤더와 유사한 목적을 가지면서 더 많은 기능을 가진 `Forwarded` HTTP 헤더를 표준화했다.[4] `Forwarded` 헤더의 구문 예시는 다음과 같다.

Forwarded: for=192.0.2.60;proto=http;by=203.0.113.43

Forwarded: for="[2001:db8::1234]"

HAProxy는 `X-Forwarded-For` 또는 `Forwarded` 헤더를 사용하지 않고 발신 클라이언트의 IP 주소를 전달할 수 있는 PROXY 프로토콜을 정의한다.[5] 이 프로토콜은 HTTP뿐만 아니라 여러 전송 프로토콜에서 사용할 수 있으며, 내부 프로토콜을 검사할 필요가 없다.

5. 지원 제품

X-Forwarded-For 필드는 다양한 프록시 서버, 캐시 엔진, 웹 서버 및 로드 밸런서에서 지원된다.

대부분의 웹 서버는 로그 파일에 X-Forwarded-For 필드에 포함된 IP 주소를 기록하도록 설정할 수 있다.

5. 1. 프록시 서버 및 캐시 엔진

X-Forwarded-For 필드는 Squid[7][8], Apache mod_proxy[9] (\IHS 포함[10]), Pound[11], HAProxy[12], Varnish Cache[13], IronPort Web Security Appliance, CAI Networks WebMux, 어레이 네트웍스, Radware's Appdirector and Web Server Director, F5 Big-IP[15], Blue Coat ProxySG[16], Cisco 캐시 엔진, McAfee Web 게이트웨이, Phion Airlock, Finjan Vital Security, NetApp NetCache, jetNEXUS, Crescendo Networks Maestro, Microsoft ISA Server 2004/2006 (ISA 서버용 Winfrasoft X-Forwarded-For 탑재)[19], Winfrasoft X-Forwarded-For Microsoft 및 Forefront TMG 2010 (프리 웹 필터 TMG 또는 XFF-Filter.dll)[20] 등 다양한 프록시 서버 및 캐시 엔진에서 지원되며, Apache 등의 웹 서버와 연동될 수 있다.

X-Forwarded-For 필드 기록 기능은 Microsoft IIS 6.0 및 7.0에서 "Winfrasoft X-Forwarded-For for IIS" (서드 파티 ISAPI 필터) 또는 "HTTP Module" (서드 파티 필터)를 통해 지원된다.[21]

5. 2. 로드 밸런서


  • "Zeus Traffic Manager"와 "Zeus Load Balancer"는 X-Forwarded-For 필드를 지원한다.
  • Radware의 로드 밸런서는 One-armed router|원암 라우터영어[22]와 multi-armed 설정을 위한 X-Forwarded-For를 지원한다.
  • 시트릭스 시스템즈의 "NetScaler"는 클라이언트의 IP 주소를 클라이언트의 연결 요청에 삽입하기 위해 X-Forwarded-For를 비롯한 사용자 정의 필드를 지원한다.[23]
  • "Cisco Ace Load Balancing Modules"는 송신원 네트워크 주소 변환(source NAT, SNAT)을 실행하기 위해 로드 밸런서를 설정할 때나, 로드 밸런서의 one-armed 설정을 유효하게 한 경우, 이 필드를 삽입할 수 있다. 일반적으로 그것으로 충분하지만, 한편, 클라이언트의 송신원 IP 주소를 위해 실체 서버가 이용할 수 있는 구조를 이 제품은 제공한다. 제품 매뉴얼에는 "x-forward"라고 기술되어 있지만, 이것은 X-Forwarded-For의 대체라고 추정된다.[24]
  • CAI Networks의 로드 밸런서는 one-armed single network 설정을 위한 X-Forwarded-For를 지원한다.
  • F5 네트웍스의 로드 밸런서는 one-armed와 multi-armed 설정을 위한 X-Forwarded-For를 지원한다.[25]
  • jetNEXUS의 로드 밸런서는 one-armed와 multi-armed 설정을 위한 X-Forwarded-For를 지원한다.
  • KEMP Technologies|KEMP Technologies영어 "LoadMaster"는 one-armed와 multi-armed 설정 모두에서 비투과적 부하 분산 처리를 위해 X-Forwarded-For를 지원한다.[26]
  • Coyote Point Systems|Coyote Point Systems영어 "Equalizer"는 one-armed와 multi-armed 설정 모두에서 부하 분산 처리를 위해 X-Forwarded-For 필드를 지원한다.[27]
  • HAProxy는 one-armed와 multi-armed 설정 모두에서 비투과적 또는 투과적 부하 분산 처리를 위해 X-Forwarded-For를 지원한다.
  • OpenBSD "relays"는 이 필드를 삽입하거나 개변할 수 있다.[28]
  • 아마존의 Elastic Load Balancing 서비스는 IPv4, IPv6 모두에서 이 필드를 지원한다.[29]
  • "LBL LoadBalancer"는 one-armed와 multi-armed 설정을 위해 X-Forwarded-For를 지원한다.

5. 3. 웹 서버

많은 웹 서버는 로그 파일에 `X-Forwarded-For` 필드에 포함된 IP 주소를 기록하도록 설정할 수 있다. 아파치 HTTP 서버에서는 표준 기능으로 구현되어 있으며, 설정을 변경하는 것만으로 로그에 기록하게 된다[15][30][31][32]。마이크로소프트 IIS는 서드 파티 애플리케이션이 필요하다[33]。IIS7용으로는 IIS.net 웹사이트에서 IIS 로그에 `X-Forwarded-For` 값을 기록하는 무료 IIS 모듈을 구할 수 있다[34]

6. 한국 인터넷 환경에서의 활용 및 고려사항

(이전 출력이 비어있으므로, 수정할 내용이 없습니다. 원본 소스(`source`)가 제공되어야 'XFF' 문서의 '한국 인터넷 환경에서의 활용 및 고려사항' 섹션 내용을 작성하고, 그 내용을 바탕으로 수정 작업을 진행할 수 있습니다.)

참조

[1] 웹사이트 Overview of parsed mail headers http://mailheader.ma[...] 2014-05-05
[2] 웹사이트 squid : follow_x_forwarded_for configuration directive http://www.squid-cac[...] 2017-11-12
[3] 웹사이트 X-Forwarded-For https://developer.mo[...] 2020-11-06
[4] IETF Forwarded HTTP Extension IETF 2014-06
[5] 문서 Willy Tarreau: The PROXY protocol http://haproxy.1wt.e[...] 2012-12-24
[6] 웹사이트 X-Forwarded-For Spoofer https://addons.mozil[...] addons.mozilla.org 2011-07-08
[7] 문서 Squid configuration directive forwarded_for http://www.squid-cac[...]
[8] 문서 SquidFaq/ConfiguringSquid http://wiki.squid-ca[...]
[9] 문서 mod_proxy http://httpd.apache.[...]
[10] 문서 リバース・プロキシーとしての IHS の構成 http://publib.boulde[...]
[11] 문서 Pound proxy http://www.apsis.ch/[...]
[12] 문서 HAProxy 設定マニュアル http://haproxy.1wt.e[...]
[13] 문서 Varnish FAQ https://varnish-cach[...]
[14] 문서 IronPort Web Security Appliances http://www.cisco.com[...]
[15] 문서 Apache または PHP で "X-Forwarded-For" を使用する http://devcentral.f5[...]
[16] 문서 Bluecoat Knowledge Base Article 2996 https://kb.bluecoat.[...]
[17] 문서 Cisco Cache Engine ユーザガイド Version 2.1.0 - Appendix A: Command Reference - グローバル設定コマンド - "http" http://www.cisco.com[...]
[18] 문서 Web キャッシュを調節 - NetApp NetCache C720 http://www.isp-plane[...]
[19] 문서 TMG, ISA サーバと IIS 向け X-Forwarded-For http://www.winfrasof[...]
[20] 문서 TMG2010 向け X-Forwarded-For フリー・ウェブフィルター http://itboard.ro/bl[...]
[21] 문서 IIS7 向け X-Forwarded-For HTTP Module, ソースも提供! http://devcentral.f5[...]
[22] 문서 VLAN間でのルーティングに利用されるルーターの設定
[23] 문서 Citrix NetScaler Traffic Management Guide - Release 9.1 http://support.citri[...]
[24] 문서 Cisco ACE with Source NAT and Client IP Header http://www.cisco.com[...]
[25] 문서 Using the X-Forwarded-For HTTP header field to preserve the original client IP address for traffic translated by a SNAT http://support.f5.co[...]
[26] 문서 LoadMaster Product Manual http://www.kemptechn[...]
[27] 문서 Equalizer User Guide http://www.coyotepoi[...]
[28] 문서 relayd.conf manual page http://www.openbsd.o[...]
[29] 문서 Using IPv6 with Elastic Load Balancing http://docs.amazonwe[...]
[30] 웹사이트 Extended X-Forwarded-For Logging with Apache http://www.gadgettra[...] www.gadgettrail.com 2005-01-11
[31] 문서 LogFormat
[32] 문서 "X-Forwarded-For"ヘッダー情報をIHSアクセス・ログに記録する方法 (NTWK-09-036) http://www-06.ibm.co[...]
[33] 문서 Winfrasoft X-Forwarded-For for IIS http://www.winfrasof[...]
[34] 문서 Client-ip not logged on application server when using ARR http://blogs.iis.net[...]
[35] 웹인용 squid : follow_x_forwarded_for configuration directive http://www.squid-cac[...] 2017-11-12
[36] 웹인용 RFC 7239 - Forwarded HTTP Extension https://tools.ietf.o[...] 2015-05-08
[37] 문서 Willy Tarreau: The PROXY protocol http://haproxy.1wt.e[...] haproxy.1wt.eu 2012-12-24



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com