[Cloud] Load Balancer 사용할 때 Client의 IP가 기록이 안될 때

    반응형
    SMALL

     

    이슈 및 원인

    위와 같이 LB를 사용한 웹 서비스를 운영했을 때 아래와 같이 Web 서버에서 Access Log를 확인해보면 Load Balancer의 Private IP가 찍히는 것을 볼 수 있다.

    이는 외부 사용자가 웹 서버로 접근할 때 LB를 통해서 Forwarding되어서 그렇다. 

    즉, 1.2.3.4라는 공인 IP를 가진 사용자가 LB로 접근하면 LB에서 1.2.3.4 사용자의 요청을 대신해서 처리해주기에 실질 적으로 WEB에 접근하는 것은 LB다.

     

    해결하는 방법?

    여러가지 방법이 있으나 간단한 방식으로 해결할 수가 있다.

    HTTP Header 중 하나인 X-Forwarded-For 헤더를 사용하면 간단하게 해결할 수 있다.

    더보기

    X-Forwarded-For 헤더가 뭐죠?

    간단하게 웹 서버나 프로시 서버에서 사용하는 HTTP 헤더 중 하나로, 이 Header에 클라이언트와 웹 서버 또는 프록시 서버 간의 네트워크 통신에서 클라이언트의 실제 IP 주소를 식별하기 위해 사용하는 Header이다.

     

    Apache 환경에서의 Access Log에 Client IP 출력 시키기

    $ vim /etc/httpd/conf/httpd.conf
    
    196    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

     

    기존 위와 같은 LogFormat 지정 라인에서 빨간색으로 가리킨 곳을 %{X-Forwarded-For}i 로 변경

    196    LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

    그리고 Apache Daemon를 Restart하고 보면 아래와 같이 Client IP가 Logging되는 것을 볼 수 있다.

     

    문제점

    이렇게 하면 큰 문제점이 발생한다. 아무래도 Header이기에 위 처럼 실제 IP는 220.x.x.x 대역이나, X-Forwarded-For Header의 값을 Fiddler 와 같은 Tools로 아무 IP 값으로 변경하면 실제론 220.x.x.x 대역을 사용하지만 Web Server의 Access Log에는 아래와 같이 1.2.3.4로 찍히는 것을 볼 수 있다.

    X-Real-IP Header를 사용하면 이런 문제를 해결 할 수 있으나, X-Forwarded-For Header(XFF)를 사용한 이유는 프록시 구성시에 쓰이는 표준이기 XFF를 사용한 것이다.

     

    반응형
    LIST

    댓글