반응형

프록시서버로 사용하는 NGINX에서 에러가 발생하면 아래와 같은 이미지 형태로 노출이 됩니다.

 

에러 페이지 커스텀 설정하기

에러 코드 + nginx 버전 정보 노출은 취약점으로 버전 정보를 지우라고 되어있어서 아래와 같이 nginx.conf파일을 수정하였다.

 

server 속성에 error_page 코드별 접근시 처리 할 url을 설정하고

그 아래에 매칭할 root 디렉토리를 설정해준다.

error_page  400 401 402 403 404 405 406 411 414 497 500 501 502 503 504 505 /error.html;
location = /error.html {
	root 에러페이지가 존재하는 디렉토리 주소(절대주소);
}

 

이후 404에러를 접근해보면 아래와 같이 커스텀된 html이 노출된다.

 

설정 예시)

http {

    ...


    # HTTPS server
    server {
		listen 443 ssl;
        
		...
        
        
		error_page  400 401 402 403 404 405 406 411 414 497 500 501 502 503 504 505 /error.html;
		location = /error.html {
			root D:/nginx21/html/;
		}
    }
}

 

반응형
반응형

이번에 nginx를 사용하여 프록시 서버처럼 사용할 일이 생겼는데, 취약점으로 서버 정보가 노출되면서 불필요한 정보 노출로 인한 취약점으로 지적이 발생되어 미리 지우기 위해 검색을 해봤는데, 대부분 아래의 옵션을 사용하여 상세정보만 지우는 방식이 공유되고 있었다.

server_tokens off;

Server에 nginx임이 표기된다.

nginx의 상세버전은 더이상 보이진 않지만 여전히 was자체가 무엇인지 노출하고 싶지 않았다.

 


 

검색 도중 StackOverflow에서 좋은 글을 찾았다.😁

https://stackoverflow.com/questions/246227/how-do-you-change-the-server-header-returned-by-nginx

 

How do you change the server header returned by nginx?

There's an option to hide the version so it will display only nginx, but is there a way to hide that too so it will not show anything or change the header?

stackoverflow.com

 

정확한 동작 이유는 모르지만 nginx.conf파일에서 http와 https부분에 아래의 옵션을 추가후 재기동하여 더이상 서버 정보가 노출되지 않는걸 확인 할 수 있었다.

proxy_pass_header Server;

 

-설정 후👍

Response Headers에 Server정보가 사라졌다!

 

반응형
반응형

단일 이클립스에서 프로젝트를 여러개 구성하여 동시에 개발 테스트하는 경우가 있습니다.

 

가정: 프로젝트 A, B를 동시에 구동한 상태(PORT: 8080, 8081)

A에서 로그인을하여 한참 사용하다가 B에서 로그인페이지를 접근하거나 로그인을 진행하면 A가 끊겨버리는 현상이 발생되었습니다.😅

 

로그인시 처리하는 JSESSIONID값이 중복으로 나오면서 다른 SESSION값으로 덮어씌워지게되고 기존 세션을 못쓰게 되는 현상인데 구동한 톰캣들의 JSESSIONID값을 다르게 설정하시면 해결이 됩니다.

 

JSESSIONID 변경하기

Tomcat - config - server.xml에 접근하여 아래 Context 태그 영역을 수정합니다.

server.xml

<Context docBase="singo" path="/" reloadable="true" 
	sessionCookieName="수정할_JSESSIONID"
	source="org.eclipse.jst.jee.server:singo"/>

sessionCookieName="변경할 sessionId"  를 추가합니다.

 

이클립스에서는 Package Explorer영역에서 Servers라는 디렉토리가 있는데 열어보시면 프로젝트마다 생성한 톰캣이 보입니다.

해당하는 톰캣을 열고 server.xml을 열어서 추가하거나 수정합니다.

반응형
반응형

wepapps 하위  ROOT 내부에 존재하는 디렉토리를 심볼릭링크로 지정하여 사용 중일때, 해당 디렉토리를 웹에서 지정하여 이미지등을 노출되도록 하고 싶었다.

 

기존 시스템은 ROOT/디렉토리 형태로 존재하여 was를 갈아엎을때마다 옮겨두었다가 적용하거나 삭제 시 위험해지는등 큰 문제가 있어서 심볼릭으로 변경하였는데, 서비스를 기동하니 404에러가 발생하였다.

 

아래는 시스템 구성이다.

1. 실제 경로 /data/test 디렉토리

2. 톰캣 경로는 /usr/local/tomcat/webapps/ROOT

 

두개의 경로가 있을때, ROOT 아래에 test라는 심볼릭링크를 생성하였고, 심볼릭링크는 test -> /data/test 를 바라 보도록 처리해두었다.

 

 

이렇게 실행하여 /test/파일명 형태로 접근하면 디렉토리인 경우 정상적으로 노출이 되지만, 심볼릭링크는 톰캣자체가 보안상의 문제로 노출하지 않도록 막는다.

 

이때 server.xml 설정을 통해 처리가 가능한데, 톰캣이 기본적으로 막은 이유가 있듯이 추천하는 방법은 아니다.(어쩔수 없는 경우에만 해당 방식을 사용한다.)

 

tomcat 배포/conf/server.xml 파일에 접근하면 설정부분이 있는데, Host태그 내부에 Context태그 정보를 추가한다.

위 시스템 구성인 경우 아래와 같이 추가한다.

<Context path="/test" docBase="/data/test" reloadable="false" allowLinking="true"></Context>

/test라는 심볼릭을 만나면 docBase /data/test 를 바라 볼 수 있도록 처리하고 allowLinking 옵션을 true로 처리한다.

 

위 Context는 war 배포 경로이다. 아래 context는 심볼릭링크 허용 경로이다.

 

 

이후 톰캣을 재기동하면 정상적으로 이미지등을 볼 수 있다.

 

 

 

 

 

반응형
반응형

Tomcat으로 서버에 반영할 때, 개발에서 사용한 Sysout을 최대한 안찍히게 하기 위해 소스에서 다 제거하기 바쁜데 이번 경우는 Sysout을 다 로그에 남기게 해야 하는 상황이었다.

 

개발소스가 없어서 에러발생시 원인분석도 어렵고 최대한 도움을 받기위해서 Sysout까지 남겨야 하는 아이러니 한 상황... 

 

찾아보니 리눅스환경에서의 처리방법은 많이 나오는데 Window Server에서 처리방법은 많지 않았다.

 

첫번째 처리방법 데몬 동작

일단 제일 쉬운 방법은 톰캣 데몬(UI환경)으로 구동하는 방법이다.

logging탭에 보면 Redirect Stdout:

 

Redirect Stderror 부분이 보이는데 이부분이 auto면 자동으로 System.out.print로 처리된 부분들이 다 출력된다

 

위치는 LogPath를 수정해주면 된다.

 

반대로 아무것도 안나오게 하고싶으면 해당 부분을 비워주면 된다.

 

 

두번째 처리방법 .bat 동작시

데몬이 아니라 .bat파일로 동작해야 하는 경우

명령창으로 실행되는 .bat파일로 출력해야 하는 경우  Sysout 메시지들이 콘솔에 출력되고 있지만 로그파일로 남기지 않고 있을텐데, 설정을 변경해주면 로그파일로 출력시킬 수 있습니다.

 

${catalina.base}/conf/context.xml

<Context swallowOutput="true">

Context부분에 swallowOutput="true" 로 설정을 변경하고 저장합니다.

 

 

${catalina.base}/lib/log4j.properties

log4j.properties를 lib 디렉토리에 존재하지 않는다면 생성 후에 아래의 설정을 입력합니다.

log4j.rootLogger = INFO, CATALINA
 
# Define all the appenders
log4j.appender.CATALINA = org.apache.log4j.DailyRollingFileAppender
log4j.appender.CATALINA.File = ${catalina.base}/logs/catalina
log4j.appender.CATALINA.Append = true
log4j.appender.CATALINA.Encoding = UTF-8
# Roll-over the log once per day
log4j.appender.CATALINA.DatePattern = '.'yyyy-MM-dd'.log'
log4j.appender.CATALINA.layout = org.apache.log4j.PatternLayout
log4j.appender.CATALINA.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
 
log4j.appender.LOCALHOST = org.apache.log4j.DailyRollingFileAppender
log4j.appender.LOCALHOST.File = ${catalina.base}/logs/localhost
log4j.appender.LOCALHOST.Append = true
log4j.appender.LOCALHOST.Encoding = UTF-8
log4j.appender.LOCALHOST.DatePattern = '.'yyyy-MM-dd'.log'
log4j.appender.LOCALHOST.layout = org.apache.log4j.PatternLayout
log4j.appender.LOCALHOST.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
 
log4j.appender.MANAGER = org.apache.log4j.DailyRollingFileAppender
log4j.appender.MANAGER.File = ${catalina.base}/logs/manager
log4j.appender.MANAGER.Append = true
log4j.appender.MANAGER.Encoding = UTF-8
log4j.appender.MANAGER.DatePattern = '.'yyyy-MM-dd'.log'
log4j.appender.MANAGER.layout = org.apache.log4j.PatternLayout
log4j.appender.MANAGER.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
 
log4j.appender.HOST-MANAGER = org.apache.log4j.DailyRollingFileAppender
log4j.appender.HOST-MANAGER.File = ${catalina.base}/logs/host-manager
log4j.appender.HOST-MANAGER.Append = true
log4j.appender.HOST-MANAGER.Encoding = UTF-8
log4j.appender.HOST-MANAGER.DatePattern = '.'yyyy-MM-dd'.log'
log4j.appender.HOST-MANAGER.layout = org.apache.log4j.PatternLayout
log4j.appender.HOST-MANAGER.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
 
log4j.appender.CONSOLE = org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Encoding = UTF-8
log4j.appender.CONSOLE.layout = org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
 
# Configure which loggers log to which appenders
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost] = INFO, LOCALHOST
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager] =\
  INFO, MANAGER
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager] =\
  INFO, HOST-MANAGER
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost]=DEBUG
log4j.logger.org.apache.catalina.core=DEBUG
log4j.logger.org.apache.catalina.session=DEBUG

 

로그4 설정을 설정을 마치고 톰캣을 구동한 다음 확인을 해봅니다.

 

logs/localhost.일자.log를 열어보니 아래처럼 메시지가 출력되는걸 확인 할 수 있었습니다.

 

 

ps. /lib/log4j 설정파일은 꼬이지 않았다면 굳이 추가하지 않아도 쌓이고 있는걸 볼 수 있습니다.

반응형
  1. Favicon of https://welcome-trevari.tistory.com 나이만어른 2022.03.06 15:18 신고

    톰캣 데몬(UI환경)으로 설정변경을 하고싶은데 도대체 설정을 해야하는 파일을 찾지 못하겠네요;; 좀 알려주실수 있으신가요?

반응형

톰캣 공식홈페이지에서 다운로드를 하려고하면 현재 기준으로 7, 8.5, 9버전순으로 다운로드를 할 수 있는데

다른버전을 원할 경우 아카이브를 통해 다운로드가 가능하다.

 

http://archive.apache.org/dist/tomcat/

 

Index of /dist/tomcat

 

archive.apache.org

 

위 URL로 접근하면 이전 버전 다운로드가 가능하다.

 

 

Tomcat Archive

톰캣 8.0 다운로드를 진행해보겠다.

 

tomcat-8/ 클릭하여 이동한다.

이동 후 쭉 내려보면 날짜별 버전별 확인이 가능하고 마지막 배포인 8.0.53을 클릭한다.

 

 

bin으로 이동한다.

이후 원하는 파일 형태로 다운로드하면 된다.

 

본인은 zip으로 다운로드하여 사용하였다.

 

반응형
반응형

톰캣 내부 설정파일을 설정하여 메인 ROOT 디렉토리를 설정할 수 있다.

 

보통 파일명이 존재하면 컨텍스트명으로 처리가 되지만 conf/server.xml을 설정함으로써 ROOT를 지정하여

해당 프로젝트만 구동시킬 수 있다.

리눅스환경에서도 동일하지만 윈도우를 기준으로 변경법을 남긴다.

 

conf 디렉토리

 

server.xml

 

conf/server.xml 파일을 메모장이나 편집기를 활용하여 실행한다.

(관리자 권한으로 실행해준다.)

 

기본 설정상태

처음 server.xml을 열어서 맨 아래쪽을 보면 위 그림처럼 되어 있을텐데, Host태그의 appBase부분을 지정해주거나

Context태그를 추가하여 지정해줄수 있다.

 

Context 추가

<Context path="" docBase="지정경로" reloadable="false"></Context>

와 같은 태그를 추가후 톰캣 서비스를 실행하게 되면 ROOT라는 디렉토리로 배포하거나 컨텍스트명을 지정하여 접근하지 않더라도 접근이 되는것을 확인 할 수 있다.

(해당 방법은 톰캣 8.0 기준이며 지정시 상대경로가 아닌 절대경로로 지정해주었다.)

 

이러한 방법을 통해 도메인설정의 꼬이는 부분까지 해결이 가능하다.

 

 

반응형