X-Forwarded-For 헤더에서 소스 클라이언트의 IP 주소를 식별하고 액세스 제어하는 ​​방법

X-Forwarded-For(XFF) 헤더란 무엇입니까?


  • HTTP 프록시 또는 로드 밸런서를 통해 웹 서버에 연결된 클라이언트의 소스 IP 주소를 식별하는 (사실상) 표준 헤더.

  • 형식


    X-Forwarded-For: <client>, <proxy1>, <proxy2>
    
  • <client>클라이언트의 IP 주소
  • <proxy1>, <proxy2>
  • 요청이 여러 프록시를 통해 발생하면 각 프록시의 IP 주소가 추가됩니다.
  • 가장 오른쪽의 IP 주소가 가장 뒤쪽 프록시이고 가장 왼쪽의 IP 주소가 원래 클라이언트의 IP 주소를 나타냅니다.


  • 연결 소스 클라이언트의 IP 주소 확인 방법



    정상적인 경우




  • 위 그림과 같은 구성으로 EC2 인스턴스(Apache 등)에서 접속원 클라이언트의 IP 주소를 특정하고 싶은 경우는 X-Forwarded-For 헤더 오른쪽에서 두 번째 값을 확인한다.
    ※ ELB에 대한 직접 액세스 등을 허용하지 않는다고 가정합니다

  • XFF 헤더를 가장한 경우




  • 클라이언트가 의도적으로 헤더에 값을 설정(위장)했을 경우도, X-Forwarded-For 헤더의 오른쪽으로부터 2 번째의 값을 확인한다.

  • Apache의 소스 IP 주소를 기반으로 액세스 제어


  • 접속원 클라이언트(위의 예에서 오른쪽에서 2번째)의 IP 주소가 XXX.XXX.XXX.XXX인 경우에 /test에의 액세스를 허가하고 싶은 경우, httpd.conf에 이하를 기술한다.
  • SetEnvIf X-Forwarded-For "(:?^| )XXX\.XXX\.XXX\.XXX, [\d.]+$" allowed
    
    <Location /test>
    Order deny,allow        # 拒否してから許可
    Deny from all           # 全アクセスを拒否
    Allow from env=allowed  # envからのアクセスを許可
    </Location>
    

    참고 정보


  • X-Forwarded-For
  • CloudFront→ELB→EC2 구성에서 IP 주소 액세스 제어
  • ELB 아래 아파치의 액세스 제어
  • 좋은 웹페이지 즐겨찾기