반응형
X-Forwarded-For 헤더는 클라이언트의 원래 IP 주소를 추적하기 위해 프록시나 로드 밸런서가 HTTP 요청에 추가하는 헤더입니다. 이 헤더는 프록시 서버 또는 로드 밸런서를 거치는 과정에서 업데이트되며, 최종적으로 요청을 처리하는 서버에서 클라이언트의 원래 IP를 확인할 수 있게 합니다.
X-Forwarded-For 헤더의 구성
X-Forwarded-For 헤더의 값은 쉼표(,)로 구분된 IP 주소들의 목록으로 구성됩니다.
예시:
X-Forwarded-For: 192.168.1.1, 203.0.113.10, 198.51.100.5
위의 예에서:
1. 192.168.1.1은 최종 클라이언트(사용자)의 IP 주소입니다.
2. 203.0.113.10은 첫 번째 프록시 서버의 IP 주소입니다.
3. 198.51.100.5는 두 번째 프록시 서버의 IP 주소입니다.
목록의 첫 번째 IP 주소가 실제 클라이언트(원본 요청을 보낸 사용자)의 IP 주소를 나타냅니다.
IP 결정 과정
- 클라이언트 요청 시작: 사용자가 웹 브라우저나 기타 클라이언트에서 요청을 보냅니다.
- 이 요청에는 클라이언트의 IP 주소가 포함됩니다.
- 프록시 서버 또는 로드 밸런서가 요청 수신:
- 프록시 서버는 요청에 X-Forwarded-For 헤더를 추가하거나 기존의 헤더에 자신의 IP를 추가합니다.
- 예를 들어, 클라이언트의 IP가 192.168.1.1이고 프록시 서버의 IP가 203.0.113.10이라면 헤더는 다음과 같이 설정됩니다:
X-Forwarded-For: 192.168.1.1
- 다음 프록시 서버는 기존 헤더에 자신의 IP를 추가합니다:
X-Forwarded-For: 192.168.1.1, 203.0.113.10
- 최종 서버가 요청 수신:
- 최종적으로 요청을 수신한 서버는 X-Forwarded-For 헤더의 첫 번째 IP 주소(192.168.1.1)를 클라이언트의 실제 IP 주소로 간주합니다.
X-Forwarded-For 헤더의 관리
1. 프록시 서버 및 로드 밸런서 구성:
- 프록시가 요청의 헤더를 신뢰하고 올바르게 업데이트하도록 설정되어야 합니다.
- 예를 들어 AWS Elastic Load Balancer(ELB)나 NGINX에서 X-Forwarded-For를 활성화하여 클라이언트 IP를 추가할 수 있습니다.
2. 보안 고려 사항:
- 클라이언트가 악의적으로 X-Forwarded-For 헤더를 조작할 수 있으므로, 신뢰할 수 있는 프록시나 로드 밸런서에서만 헤더를 추가하고 수정하도록 설정해야 합니다.
- 서버에서는 X-Forwarded-For를 처리하기 전에 신뢰할 수 없는 IP를 필터링해야 합니다.
실제 적용 예시
NGINX 설정에서 원본 IP 추출:
NGINX에서 X-Forwarded-For를 활용해 클라이언트 IP를 확인하려면 아래 설정을 사용할 수 있습니다:
http {
set_real_ip_from 203.0.113.0/24; # 신뢰할 수 있는 프록시 IP 범위
real_ip_header X-Forwarded-For; # X-Forwarded-For 헤더 사용
}
AWS ELB의 경우:
AWS ELB는 기본적으로 요청 헤더에 X-Forwarded-For를 추가합니다. ELB 뒤에 있는 서버는 항상 헤더의 첫 번째 IP를 원본 클라이언트 IP로 간주해야 합니다.
요약
- X-Forwarded-For 헤더는 클라이언트의 원래 IP 주소를 포함하며, 요청이 프록시 서버를 거칠 때마다 업데이트됩니다.
- 첫 번째 IP 주소는 실제 클라이언트의 IP 주소를 나타냅니다.
- 신뢰할 수 있는 프록시와 로드 밸런서를 통해 헤더가 올바르게 처리되도록 구성해야 합니다.
- 보안을 위해 클라이언트가 헤더를 조작할 가능성을 염두에 두고, 신뢰할 수 없는 IP를 필터링해야 합니다.
반응형