출처 http://crown0047.egloos.com/1150193


Client IP 문제(X-Forwarded-For) 해결 방안 JAVA

L4 에서 IP를 바꿔버리는 문제가 발생했습니다.
스위치를 예전 모델로 교체한다고 하여도 해당문제는 앞 단에 위치하게 되는 Firewall 장비에서 IP Remapping 할 가능성이 존재하므로,
L4 에서는 IP 를 Remapping 하면서 Client IP 를 아예 없애버리는 게 아니고 X-Forwarded-For 라는 헤더에 남겨 놓는다고 하니,
(대부분의 Proxy에서 이런 방법으로 IP를 기록합니다.)

기본적으로는 X-Forwarded-For 정보를 헤더에서 추출하고 그 값이 비어있을 경우 Remote-Addr 헤더 혹은 자바 라이브러리의 IP 확인하는 소스로 문제없이 사용이 가능합니다.

PS. 해당 값은 LP VIP 을 통해 들어갈 때만 생기게 됩니다. 
    위에 설명했듯이 클라이언트에서 보내주는 헤더값이 아니라 L4 VIP 를 통해 들어갈때 L4에서 헤더에 넣어주는 헤더값입니다.

우리 서버에서 실제 사용하는 소스

/**

* @param request
* @return
* 아이피 조회
*/
public static String getIp(HttpServletRequest request) {

String rtnIp = "";

rtnIp = request.getHeader("HTTP_X_FORWAREDE_FOR");

if (isEmpty(rtnIp) || rtnIp.toLowerCase().equals("unknown")) {
rtnIp = request.getHeader("X-Forwarded-For");
}

if (isEmpty(rtnIp) || rtnIp.toLowerCase().equals("unknown")) {
rtnIp = request.getHeader("Proxy-Client-IP");
}

if (isEmpty(rtnIp) || rtnIp.toLowerCase().equals("unknown")) {
rtnIp = request.getHeader("REMOTE_ADDR");
}

if (isEmpty(rtnIp) || rtnIp.toLowerCase().equals("unknown")) {
rtnIp = request.getRemoteAddr();
}

return nullToEmpty(rtnIp);
}


'웹전반(표준)' 카테고리의 다른 글

IE 버전별 테스트 사이트  (0) 2013.02.04
해킹 관련  (0) 2013.01.29
[링크] Tomcat Context 수동 Reload  (0) 2012.06.04
구글 분석 - 콘텐츠 실험  (0) 2012.06.04
jsp asp 암호화 관련 링크  (0) 2012.05.25
Posted by gt1000

블로그 이미지
gt1000

태그목록

공지사항

어제
오늘

달력

 « |  » 2024.4
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함