X-Forwarded-For ( XFF )는 HTTP 헤더 필드 ( 영어 ) 의 하나. HTTP 프록시 서버 또는 부하 분산 장치 (로드 밸런서)를 통해 웹 서버 에 연결하는 클라이언트의 소스 IP 주소 를 특정하기위한 사실상의 표준 이다. 이 헤더는 Squid 캐싱 프록시 서버의 개발자에 의해 시작 도입 된 것이지만, RFC 에 표준 "요청 필드"( request field 연결 요청에 헤더 필드)가 아니다. 그러나 IETF 의 네트워크 작업 그룹 (Network Working Group)은 2011 년 10 월부터 동종의 HTTP 헤더Forwarded-For 의 표준화 작업을 시작했다 [1] .
이 의미에서 캐싱 서버 (캐시 서버)는 대체로 대형 ISP 의 이용자가 WWW 에 연결하면 ISP가 사용을 권장하거나 강제로 사용하는 프록시 서버를 말합니다 데이터 캐싱하면 외부 네트워크 대역폭을 줄이는 기능을 가지고있다. 어떤 경우 이러한 프록시 서버는 투명 프록시이며, 이용자는 그것을 이용하고있는 것을 깨닫지 않을지도 모른다.
XFF 나 다른 유사한 기술을 이용하지 않으면 프록시를 통해 모든 연결은 프록시 서버의 소스 IP 주소만을 드러낸다.더 나아가 프록시 서버를 사실상 익명 서비스 ( 영어 버전 ) 로 바꿔 버리면, 따라서 원본 IP 주소를 사용할 수 없으며 그 경우에 비해 악성 액세스를 감지하고 막는 것은 매우 어려워 ( 공개 프록시 ). XFF의 이용은 원본 호스트의 IP 주소를 정직하게보고하는 프록시 서버의 존재를 가정하고있다. 즉 이러한 이유로 XFF를 효과적으로 이용하기 위해서는 프록시 신뢰할 수있는 정보가 필수적이다. 예를 들어, 신뢰할 수있는 사람이 관리하는 서버가 목록 화되어있는 화이트리스트에 해당 프록시 서버가 실려 있는지를 검색하는 등 정보를 얻을 필요가있다.
포맷 [ 편집 ]
이 필드의 일반적인 형식은 다음과 같다.
- X-Forwarded-For : client1, proxy1, proxy2
여기서 값 (변수)는 쉼표와 공백으로 구분 된 IP 주소 목록이다. 콜론과 공간의 다음에 오는 가장 왼쪽 열에있는 값은 최 하류에 위치하는 클라이언트의 IP 주소, 계속 연결 요청을 전송하는 각각 연속 프록시 연결 요청을 보내는 IP 주소를 추가 간다. 이 예에서는 연결 요청 proxy1, proxy2을 통과하고 마지막에 연결 요청을 원격 주소로 나온다 proxy3에 전해진다.
X-Forwarded-For 필드를でち上げる은 간단해서 [2] 주어진 정보는 신중하게 취급해야한다. 마지막 IP 주소는 항상 마지막 프록시에 연결하는 IP 주소이고, 즉이 정보 소스가 가장 신뢰할 수있는 것을 의미한다.
포워드 프록시 또는 리버스 프록시 를 사용하는 시나리오에서는 X-Forwarded-For 데이터가 이용 가능하다.
클라이언트가 포워드 프록시를 사용하는 시나리오의 경우 연결된 네트워크 관리자는 클라이언트 내부 네트워크의 프록시 연결 고리를 통해 연결하는 클라이언트의 실체 IP 주소를 추적 할 수 있으며, 게이트웨이 기기에서 그 IP 주소가 기록된다. 보안적인 이유에서 인터넷에 연결 요청을 전송하기 전에 관리하는 게이트웨이 장비는 모든 X-Forwarded-For를 날카롭게한다. 또한 X-Forwarded-For 정보가 관리하는 네트워크 내에서 모든 생성 된 경우이 시나리오에서는 X-Forwarded-For 정보를 신뢰할 수 있도록해야한다.
관리 네트워크가 리버스 프록시를 사용하는 시나리오의 경우에도 관리 웹 서버가 인터넷에서 경로 정보가없는 경우에도, - 예를 들어 웹 서버가 OSI 참조 모델 7 층 에 위치한 프록시 장비 뒤에 숨어있는 경우에도 웹 서버 관리자는 웹 서버에 인터넷 연결 클라이언트의 실체 IP 주소를 추적 할 수있다.또한 인터넷에서 사기 정보를 수신 할 수있는 경우이 시나리오에서는 모든 X-Forwarded-For 정보는 믿을만한 것이 아니다 . X-Forwarded-For 필드에 통지 된 프록시 IP 주소를 신뢰할 수 있는지 확인하기 위해斯様견실 IP 주소 목록을 이용해야한다.
프록시 연결 고리의 말단에있는 IP 주소는 X-Forwarded-For 필드에 포함되어 있지 않기 때문에, X-Forwarded-For 필드의 로그 를 그냥 얻을 항상 충분하다고는 할 수 없다. 그 정보는 사실은 IP 헤더에 포함되어있다. 철저히하기 위해서는, 웹 서버는 연결 요청 IP 주소와 X-Forwarded-For 필드 정보의 쌍방 을 기록해야한다.
각종 제품의 지원 상황 [ 편집 ]
| 이 기사에 잡다한 내용을 나열한 항목 이 있습니다. 사항을 총알 열거했을뿐 절은 본문으로 통합 한 가지 정리 · 제거해야합니다. ( 2011 년 7 월 ) |
프록시 서버 및 캐시 엔진 [ 편집 ]
X-Forwarded-For 필드는 많은 프록시 서버 나 캐시 엔진에서 지원되며, Apache 등의 웹 서버와 함께 할 수있는 것도 포함된다. 예를 들면,
등이있다.
X-Forwarded-For 필드를 기록하는 방법은 Apache HTTP Server를 비롯한 많은 웹 서버에서 지원되고있다. Microsoft IIS 6.0과 7.0 "Winfrasoft X-Forwarded-For for IIS"이라는 타사 의 ISAPI 필터가이 기능을 실현하고있다. IIS 7.0은 또한 "HTTP Module"이라는 타사 필터를 사용할 수있는 [17]
로드 밸런서 [ 편집 ]
- "Zeus Traffic Manager"와 "Zeus Load Balancer"는 X-Forwarded-For 필드를 지원하고있다.
- Radware의로드 밸런서는 one-armed ( 영어 버전 ) [주석 1] 과 multi-armed 설정 용 X-Forwarded-For를 지원하고있다.
- 시트릭스 시스템즈 의 "NetScaler"은 클라이언트의 IP 주소를 클라이언트의 연결 요청에 삽입하기 위해 X-Forwarded-For를 비롯한 사용자 정의 필드를 지원하는 [18] .
- "Cisco Ace Load Balancing Modules"는 원본 네트워크 주소 변환 ( "source NAT"SNAT)를 실행하기 위해로드 밸런서를 구성 할 때나,로드 밸런서의 one-armed 설정을 활성화 한 경우이 필드를 삽입 가능하며, 보통 충분하지만, 한편 클라이언트 소스 IP 주소에 대한 실체 서버를 사용할 수있는 구조를이 제품을 제공한다. 제품 설명서에는 "x-forward"라고 설명하고 있지만, 이것은 X-Forwarded-For 대안이다 추정된다 [19] .
- CAI Networks의로드 밸런서는 one-armed single network 설정을위한 X-Forwarded-For를 지원하고있다.
- F5 네트웍스의로드 밸런서는 one-armed와 multi-armed 설정을위한 X-Forwarded-For를 지원하는 [20] .
- jetNEXUS로드 밸런서는 one-armed와 multi-armed 설정을위한 X-Forwarded-For를 지원하고있다.
- KEMP Technologies ( 영어 ) "LoadMaster"는 one-armed와 multi-armed 설정 모두에서 비 투명 부하 분산 처리를위한 X-Forwarded-For를 지원하는 [21].
- Coyote Point Systems ( 영어 ) "Equalizer"는 one-armed와 multi-armed 설정 모두에 부하 분산 처리를위한 X-Forwarded-For 필드를 지원하는 [22] .
- HAProxy는 one-armed와 multi-armed 설정 모두에서 비 투명 또는 투명 부하 분산 처리를위한 X-Forwarded-For를 지원하고있다.
- OpenBSD "relays"이 필드를 삽입하거나 변경할 수있다 [23] .
- Amazon 's Elastic Load Balancing service 는 IPv4, IPv6 모두에서이 필드를 지원하는 [24] .
- "LBL LoadBalancer"는 one-armed와 multi-armed 설정을위한 X-Forwarded-For를 지원하고있다.
웹 서버 로그에 대한 X-Forwarded-For [ 편집 ]
많은 웹 서버 로그 파일에 X-Forwarded-For 필드에있는 IP 주소를 기록하도록 설정할 수있다. Apache HTTP Server는이 표준 기능으로 구현되어 있으며, 단순히 설정을 변경하여 기록하게된다 [11] [25] [주석 2] [주석 3] . 그러나 Microsoft IIS는 서드 파티 애플리케이션이 필요하다 [주석 4] . IIS7 용은 IIS.net 웹 사이트에서뿐만 아니라 IIS 로그에 X-Forwarded-For 값을 쓸 자유 IIS 모듈을 가져 가능하다 [26] .
각주 [ 편집 ]
주석 [ 편집 ]
출처 [ 편집 ]
관련 항목 [ 편집 ]
외부 링크 [ 편집 ]
출처 - wiki