09. 11. 17.

넷스케일러에서의 사용자 IP 삽입

넷스케일러를 운영 중인 사이트에서 한번씩 아래와 같은 경우가 존재할 수 있다.

이미 내부의 목적에 의해 x-forwarded-for 또는 Client-IP를 사용하는 경우에 넷스케일러에서도 동일하게 사용자의 요청 헤더에 x-forwarded-for 또는 Client-IP를 사용할 경우 기존의 헤더 설정 값에 넷스케일러의 설정 값이 추가(ADD)되어 사용자의 IP가 두개가 기록되는 현상이 발생한다.

이럴 경우 다른 함수를 사용할 수도 있으나 그럴 상황이 허락되지 않을 경우 넷스케일러의 Rewrite 기능을 통해서 해결할 수 있는 방법이 있다. 내용은 기존에 이미 넷스케일러에서 사용하는 헤더 값과 동일한 값을 사용할 경우 기존 헤더 값을 지우고 넷스케일러의 해더 값을 삽입하는 방법이다.

add rewrite action del_x_forwarded_for delete_http_header x-forwarded-for
add rewrite action del_client_ip delete_http_header client-ip
add rewrite policy check_x_forwarded_for_policy 'HTTP.REQ.HEADER("x-forwarded-for").EXISTS' del_x_forwarded_for
add rewrite policy check_client_ip_policy 'HTTP.REQ.HEADER("client-ip").EXISTS' del_client_ip
add rewrite action insert_ns_client_header insert_http_header NS-Client 'CLIENT.IP.SRC'
add rewrite policy insert_ns_client_policy 'HTTP.REQ.HEADER("x-forwarded-for").EXISTS.NOT HTTP.REQ.HEADER("client-ip").EXISTS.NOT' insert_ns_client_header
bind rewrite global check_x_forwarded_for_policy 100 200
bind rewrite global check_client_ip_policy 200 300
bind rewrite global insert_ns_client_policy 300 END


위 설정은 global 정책으로 binding하였지만 경우에 따라서는 특정 virtual server에 정책을 binding하여 사용할 수 있다.

위 rewrite 설정은 로컬 랩에 구성된 넷스케일러 version 9.1 build 97.3 cl에서 확인결과 정상적으로 동작하였고 내부의 서버에서도 access_log 파일에 실제 사용자의 IP가 기록되었다. service의 IP insert 옵션을 사용하지 않도서도 사용자의 실제 IP를 입력하는 방법이기도 하다.