DDOS 등 공격으로 인해 서비스서버 앞단에 방어 장비가 적용되는 경우,
소스에서 실제 접속자 IP (이하 REALIP)를 정상적으로 받지 못하는 문제가 발생할 수 있습니다.
이와 같은 문제는 변수 값 수정을 통해 확인이 가능합니다.
일반적으로 REMOTE_ADDR 변수를 사용하여 REALIP를 받아오지만,
위와 같은 경우 방어 장비의 IP로 응답하게 되어 실제 REALIP 정보를 알 수 없게 되며,
REMOTE_ADDR 대신 HTTP_X_FORWARDED_FOR 변수를 사용하는 방법이 있습니다.
테스트 PC의 IP 정보를 확인 후 ( http://ipconfig.kr ) 아래와 같은 테스트 소스를 이용해 어떤 변수가 정상적으로
테스트 PC의 IP를 받아오는지 먼저 확인 후, 기존 REALIP 정보를 받는 변수를 수정하시면 됩니다.
<%
ipaddress1 = Request.ServerVariables("REMOTE_ADDR")
ipaddress2 = Request.ServerVariables("HTTP_X_FORWARDED_FOR")
Response.Write "REMOTE_ADDR : " &ipaddress1
Response.Write "<br>"
Response.Write "HTTP_X_FORWARDED_FOR : " &ipaddress2
%>
또한, https 프로토콜의 경우 HTTP_X_FORWARDED_FOR 헤더변수를 빈값으로 응답하는 경우가 있습니다.
이경우 아래와 같은 조건절로 REALIP값을 받아오도록 처리하시면 되며,
실제 소스에서 최종 REALIP를 받아 처리하는 과정에 조건을 넣어주시면 됩니다.
http, https 프로토콜에서 REALIP 정보를 정확히 받도록 조건을 추가는 작업으로 보시면 됩니다.
<%
realip = Request.ServerVariables("HTTP_X_FORWARDED_FOR")
if isNull(realip) then
realip = Request.ServerVariables("REMOTE_ADDR")
end if
Response.Write "<b>REALIP</b> : " &realip
%>
개발 소스마다 적용 방법은 다를 수 있으며, 요청 헤더 정보를 받는 변수에 따라 케이스가 다를 수 있습니다.
사용하시던 헤더 변수가 정상적으로 테스트 IP를 받고 있는지 여부를 확인 후 적용 해보시기 바랍니다.