본문 바로가기

개발이야기

Tomcat 특정IP 제한

Tocmat으로 운영중인 사이트로 가끔씩 이상한 접근을 하는 IP들이 있어서

그런 IP들만 제한을 하기 위한 방법이다.

Catalina Container (Engine, Host, Context) 에 사용할 수 있다.

나 같은 경우는 /conf/server.xml의 Host 단위로 설정해서 사용한다.

<Valve className="org.apache.catalina.valves.RemoteAddrValve" deny="127.0.0.1"/>

그외에도 정규식으로도 적용이 가능하다. 

아래 URL에서 다양한 샘플을 볼수 있다.

대표적인 샘플 몇개를 적어놓는다.

<Valve className="org.apache.catalina.valves.RemoteAddrValve" deny="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1"/>

<Valve className="org.apache.catalina.valves.RemoteAddrValve" addConnectorPort="true" deny="127\.\d+\.\d+\.\d+;\d*|::1;\d*|0:0:0:0:0:0:0:1;\d*|.*;8443"/>

http://tomcat.apache.org/tomcat-9.0-doc/config/valve.html#Remote_Address_Valve

 

Apache Tomcat 9 Configuration Reference (9.0.39) - The Valve Component

When using mod_proxy_http, the client SSL information is not included in the protocol (unlike mod_jk and mod_proxy_ajp). To make the client SSL information available to Tomcat, some additional configuration is required. In httpd, mod_headers is used to add

tomcat.apache.org

위의 예에서도 보듯이  포트도 제한이 가능하고  deny 대신에 allow를 사용하면 반대로 특정 아이피만 허용가능하다.

그리고, 여러개의 아이피를 사용할때 구분자를 콤마(,)로 얘기해주는 곳도 있는데, 

내가 테스트했을 경우는 콤마(,)를 쓰면 제대로 동작을 안하다 위와같이 | 와 같은 구분자를 사용해줘야 한다. 

아무래도 정규식을 사용하다보니 콤마(,)를 사용하면 제대로 인식을 못하는듯..ㅠㅠ