Steady Mind For My Life

https://github.com/jongseok3910/Spring-Study

전자정부프레임워크&Spring Project

Interceptor로 외부IP 접근 차단

함탕 2024. 7. 20. 23:30
728x90
728x90

본사에 개발서버를 구축해 놓고 개발하던 중 

고객사의 담당자로 부터 연락이 왔다.

 

개발서버에 있는 프로젝트에 신규기능 추가 및 수정을 하면

담당자가 개발서버에 붙어서 내용을 확인하는 식으로 업무를 진행하고 있었는데

보안이슈도 발생 할 수도 있으니 고객사 이외의 외부IP는 접근을 못하게 해달라는 요청이었다.

 

외부IP접근을 막는 방식은 두 가지가 있다.

1. IP TIME(공유기)단에서 외부IP를 막는방식

2. 스프링 프로젝트에서 Filter / Interceptor로 외부IP를 막는방식

 

공유기에서 보안설정을 통해 고객사를 제외한 IP는 차단하는 방식을

사용하고 있었는데, 문득 이런생각이 들었다.

 

' 지금은 본사에서 개발을 하니까 공유기 설정이 가능하지만

공유기 설정이 불가능한 외부에서 프로젝트를 진행한다면? '

 

어떤 환경에 있어도 외부IP를 막을 수 있도록 해야겠다는 생각을 했고

스프링 Interceptor를 사용할 외부IP접근 차단 로직을 구현하기로 했다.

 

1. Interceptor 구현(MyInterceptor.java)

@Component("myinterceptor")
public class MyInterceptor extends HandlerInterceptorAdapter {

	
	private static final List<String> ALLOWED_IPS = Arrays.asList("127.0.X.X", "192.168.X.X");

	@Override
	public boolean preHandle(HttpServletRequest request,
			HttpServletResponse response, Object handler) throws Exception {

			String ipAddress = request.getRemoteAddr(); //접속 IP를 가져온다.
						
				if(!ALLOWED_IPS.contains(ipAddress)) //list에 담아둔 허용IP와 접속된IP 비교
	            {
	                 response.setContentType("text/html; charset=UTF-8");
	                  PrintWriter out = response.getWriter();
	                  out.println("<script>alert('접근제한된 IP입니다.');history.go(-1);</script>");
	                  out.flush();
	                return false;
	            }
				return true;
	}


}

 

1. Array에 허용가능한 IP를 담아둔다.

2. preHandle 메소드에서 접속IP와 Array에 들어있는 허용IP를 비교한 후 

    같지 않으면 접속 불가.

 

 

2. Interceptor 등록(dispatcher-servlet.xml)

<mvc:interceptors>
   	<mvc:interceptor>
       	<mvc:mapping path="/**"/> /*허용 path*/
       	<mvc:exclude-mapping path="/portal/gd/**"/> /*제외 path*/
       	<mvc:exclude-mapping path="/intranet/**"/> /*제외 path*/
       	<bean class="egovframework.test.cmmn.interceptor.MyInterceptor"/>
   	</mvc:interceptor>
</mvc:interceptors>

 

1. 허용path와 제외path 추가 후 만들어는 Interceptor를 등록한다

* mapping path를 등록하지 않으면 Interceptor가 동작을 안하기 때문에 필수로 적어줘야한다.

 

 

** 테스트 결과 허용한IP 외에는 접근이 불가능하다

 

 

Intercepor를 통해 외부IP 차단로직을 직접 구현해 보니

생각보다 어렵지 않았고 공유기 설정과, 스프링 Interceptor에서

동시에 외부IP 접근을 차단하면 더욱 보안에 신경 쓸 수 있다는 생각이 들었다.

728x90
300x250