
프록시는 한 시스템의 요청을 다른 시스템으로 전달하기 위해 존재한다는 전제하에 작동합니다. 일반적으로 부하 분산(확장성), 데이터 유출 방지(보안), 압축(성능)과 같은 부가 가치를 제공하며, 그렇지 않다면 중간에 위치할 이유가 없습니다.
중요한 점은 클라이언트가 보낸 요청이 그 외에는 수정되지 않은 채 대상 목적지로 전달된다는 것입니다.
바로 이 지점에서 상황이 까다로워질 수 있습니다. 현재 프록시를 통해 제공되는 전체 앱의 절반 이상이 X-Forwarded-For를 사용하고 있습니다. 실제 운영 중인 앱의 56%가 이를 사용하므로 상당히 중요한 데이터라고 할 수 있습니다. X-Forwarded-For는 클라이언트의 원래 IP 주소를 함께 전달하여 요청을 받는 앱이 이를 알 수 있게 해 주는 사용자 지정 HTTP 헤더입니다. 이 헤더가 없으면 앱에는 프록시 IP 주소만 표시되며, 일부 앱에서는 이로 인해 문제가 발생합니다.
상당수의 애플리케이션이 사기를 방지하고 액세스를 허용하기 위해 클라이언트의 실제 IP 주소를 파악하는 데 의존하기 때문입니다. 최근 평소에 사용하던 기기가 아닌 다른 기기에서 은행이나 Gmail 또는 Xbox 계정(아시다시피 Minecraft가 있는 곳이죠)에 로그인했다면 보안 경고를 받았을 수도 있습니다. 로그인 위치에 관한 정보도 추적되는데, 이는 부분적으로 사기 시도와 오용을 탐지하기 위한 것입니다.
일부 시스템에서는 실제 IP 주소를 사용해 접근을 허용하거나 차단하며, 사용자의 물리적 위치를 추정하기도 합니다. 그래서 이메일 경고에 “불가리아에서 로그인한 사람이 본인인가요?” 같은 문구가 자주 포함되는 것입니다.
일부 시스템에서는 액세스 제어를 적용하기 위해 X-Forwarded-For를 사용하기도 합니다. 예를 들어 WordPress는 .htaccess 파일을 사용해 IP 주소를 기준으로 액세스를 허용 목록에 추가합니다. 물론 최선의 해결책은 아니지만 흔히 사용되는 방식이며, 오용으로부터 애플리케이션을 어느 정도 보호하려는 노력만큼은 인정해 줄 만합니다.
좋은 방법인지 여부와 관계없이 X-Forwarded-For를 인증 또는 권한 부여 체계의 일부로 사용하려면, 이것이 실제로 진짜 클라이언트 IP 주소인지 최대한 확인해야 합니다. 이는 전반적인 보안 체계에서 비교적 흔히 사용되는 요소 중 하나로, 기업의 이익뿐만 아니라 사용자도 보호합니다.
하지만 클라이언트가 해당 헤더에 담아 보내는 값을 무조건 신뢰한다면, 누군가 그 값을 위조해 부정 접근을 차단하기 위한 보안 메커니즘을 우회할 수 있게 될지도 모릅니다. 몇 줄의 코드를 작성하거나 HTTP 헤더를 손쉽게 조작할 수 있는 수많은 Chrome 플러그인 중 하나를 사용하면, 사실상 원하는 거의 모든 값을 위조할 수 있습니다.
실제 IP 주소를 얻고 있는지 확인하는 방법 중 하나는 사용자 입력을 신뢰하지 않는 것입니다. 네, 또다시 보안 규칙 제0조입니다. 사용자 입력은 절대 신뢰하지 마세요. HTTP 헤더도 겉보기와 관계없이 사용자 입력이라는 사실을 우리는 알고 있습니다.
이미 프록시를 사용하고 있다면 좋습니다. 그렇지 않다면 하나 마련해야 합니다. 그래야 올바른 값을 추출해 X-Forwarded-For에 넣고 스푸핑 시도를 원천 차단할 수 있기 때문입니다.
기본적으로 프록시가 요청을 들여다보고 IP 패킷에 숨겨진 실제 IP 주소를 찾아낼 수 있어야 합니다. 일부 프록시는 구성이나 정책을 통해 이를 수행할 수 있지만, 다른 프록시는 프로그래밍 방식의 처리가 필요합니다. 어떤 방식으로 알아내든 바로 그 값이 X-Forwarded-For HTTP 헤더에 입력해야 할 값이며, 이후에는 평소대로 처리하면 됩니다. 이렇게 하면 앱이나 다운스트림 서비스가 액세스 및 권한 부여를 비롯한 의사 결정을 내릴 때 정확한 정보를 활용할 수 있습니다.
대부분의 아키텍처와 상황에서 이 방법은 위조된 X-Forwarded-For가 무단 액세스에 악용될 가능성을 줄여 줍니다. 언제나 그렇듯이 클라이언트와 그 적법성을 정확히 파악하는 데 활용할 수 있는 정보가 많을수록 보안은 더욱 강화됩니다. IP 주소(X-Forwarded-For에 포함)를 디바이스 유형, 사용자 에이전트 및 HTTP와 네트워크 프로토콜을 통해 자동으로 전달되는 기타 정보와 결합하면, 더 충분한 맥락을 바탕으로 합리적인 결정을 내릴 수 있습니다.
안전하게 지내세요!
X-Forwarded-For 처리 관련 자료:
작성자 소개

Lori MacVittie는 F5 CTO 오피스의 수석 엔지니어이자 최고 에반젤리스트로, 애플리케이션 딜리버리, 자동화 전략 및 인프라 분야에서 깊이 있는 전문성을 보유하고 있습니다. AI 에이전트를 위한 가드레일을 정의하고, 취약한 멀티클라우드 아키텍처를 분석하며, 확장 가능한 시스템의 한계를 탐구하는 등 복잡한 문제를 명확하게 풀어내는 것으로 잘 알려져 있습니다. 애플리케이션 개발, IT 아키텍처, 네트워크 및 시스템 운영 전반에 걸쳐 30년 이상의 업계 경험을 쌓았습니다. F5에 합류하기 전에는 수상 경력이 있는 기술 편집자로 활동했습니다. MacVittie는 컴퓨터 과학 석사 학위를 보유하고 있으며, 보안, 클라우드 및 엔터프라이즈 아키텍처 분야를 아우르는 다수의 저서를 집필한 작가입니다. 또한 보드게임과 비디오 게임을 열정적으로 즐기며, 치즈에 대해서는 거리낌 없이 확고한 견해를 갖고 있습니다.
Lori Mac Vittie의 다른 블로그 게시물관련 블로그 게시물
성평등을 향한 여정: 사이버 보안 분야에서 성공적인 커리어를 개척하는 방법에 관한 Jenn Gile과의 Q&A
F5의 ‘성평등을 향한 여정’ 시리즈 네 번째 Q&A에서는 Rachael Shah와 NGINX 제품 마케팅 책임자 Jenn Gile이 사이버 보안 직종에 대한 오해를 바로잡고, 사이버 보안 분야의 성별 격차를 해소하기 위한 조언과 그 이점에 대해 이야기합니다.
TLS 검사에서 피터 파커 원칙 다루기
“큰 힘에는 큰 책임이 따른다.” 볼테르와 처칠도 이와 비슷한 말을 남겼지만, 이 문구는 스파이더맨 코믹스에서 벤 삼촌의 말로 가장 널리 알려져 있습니다. 물론 이 문구가 문화적으로 널리 통용되는 이유 중 하나는 TLS 검사를 비롯해 수많은 상황과 주제에 적용할 수 있기 때문입니다.
Venafi와 F5를 통한 머신 아이덴티티 보호
‘머신 아이덴티티’란 간단히 말해 자동화된 프로세스가 자신의 신원을 식별할 수 있도록 하고, 다른 자동화 시스템과 프로세스가 관련 리소스에 적절한 수준의 접근 권한을 부여하도록 하는 방법을 의미합니다. 이 개념 자체는 새로운 것이 아닙니다. 비교적 새로운 점은 이를 구현해야 하는 규모입니다.
마이너와 미니언: 데이터 유출만이 비용을 초래하는 것은 아닙니다
물론 데이터 유출은 더 큰 비용을 초래할 수 있고(적어도 지금은), 실패 사실을 세상에 드러낼 수밖에 없게 합니다(통지 의무가 있으니까요). 하지만 보안을 단순히 데이터 노출 문제로만 봐서는 안 됩니다. 요즘은 데이터가...
내 클라우드에서 나가!
F5의 Jay Kelley가 전하는 최신 소식에는 Microsoft Office 365용 신규 ID 및 액세스 솔루션을 배포할 때 고려해야 할 사항이 정리되어 있습니다.
Shift(웹 앱) 보안 레터
웹 앱 보안을 개발 초기 단계로 앞당기세요. F5 블로그에서 DevOps 파이프라인 초기에 보안을 통합하여 취약점을 예방하고 시간을 절약하는 방법을 알아보세요.