새소식

반응형
Development

[TOMCAT] Valve에 대해서(RemoteIp, Accesslog)

  • -
반응형

출처 : http://archive.apachecon.com/eu2007/materials/UnderstandingTomcatSecurity.pdf

Valve

  • request processing pipeline에 특정 기능을 수행하기 위해 추가될 수 있는 컴포넌트
  • introduced with Tomcat 4
  • Valve는 서블릿의 필터 개념을 서버와 가상호스트 레벨로 확장시킨 개념
  • 웹엔진, 가상호스트, 컨텍스트 (Engine, Host, Context) 순서로 Valve 코드를 실행시키게 되며,
    필터와 Valve가 모두 설정되어 있는 경우에는 Valve의 설정 모두 적용된 이후에 필터가 적용되게 된다.

 

AccessLog

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
    prefix="localhost_access_log" suffix=".log"
    pattern="%h %l %u %t &quot;%r&quot; %s %b" />

Tomcat Layer에 AccessLog 설정 시 이용 

 pattern 값은 원하는 형태로 변경하여 사용 

관련 attribute 정보 : https://tomcat.apache.org/tomcat-7.0-doc/config/valve.html#Access_Log_Valve/Attributes

 

다만, 아래의 RemoteIp 설정이 적용된 경우에는

%{org.apache.catalina.AccessLog.RemoteAddr}r 값을 통해서 %h (Remote host name)를 가져올 수 있다. 

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
    prefix="localhost_access_log" suffix=".log"
    pattern="%{org.apache.catalina.AccessLog.RemoteAddr}r %l %u %t &quot;%r&quot; %s %b" />

 

RemoteIp

<Valve className="org.apache.catalina.valves.RemoteIpValve"
  internalProxies="192\.168\.0\.10|192\.168\.0\.11"
  remoteIpHeader="x-forwarded-for"
  proxiesHeader="x-forwarded-by"
  protocolHeader="x-forwarded-proto" />

 

요청 헤더(예: "X-Forwarded-For")에서 proxy 또는 loadbalancer가 제공하는 IP 주소를 걸러

요청에 대한 명백한 클라이언트 원격 IP 주소를 찾는다

또 다른 기능은 요청 헤더(예: "X-Forwarded-Proto")를 통해 proxy 또는 loadbalancer에 의해 제시된  scheme(http/https) 및 서버 포트를 대체

https://tomcat.apache.org/tomcat-8.0-doc/api/org/apache/catalina/valves/RemoteIpValve.html

 

사전 nginx 설정

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

 

internalProxies

proxy 또는 loadbalancer IP 주소

 

 

처리 과정

$remoteIpHeader(기본값 x-forwarded-for)라는 Http 헤더에서 이전 proxy 또는 loadbalancer가 전달한 쉼표로 구분된 IP 및 호스트 이름 목록을 반복

  • 값은 오른쪽에서 왼쪽 순서로 처리
  • 목록의 각 IP/호스트에 대해
    • internalProxies 목록과 일치하면 제거
    • trustedProxies 목록과 일치하면 ip/host가 생성된 proxy 헤더에 추가됩니다.
    • 그렇지 않은 경우 IP/호스트가 remoteIp로 선언되고 탐색 중지 
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.