양쪽 이전 판
이전 판
다음 판
|
이전 판
|
wiki:was:tomcat [2022/03/14 17:56] r_kimmk 오류 페이지 대응 추가 2022.03.14 |
wiki:was:tomcat [2023/07/06 16:16] (현재) r_kimmk |
| Apache Tomcat 3.3.2 | 2.2 | 1.1 | - | JDK 1.1이상 | [[https://archive.apache.org/dist/tomcat/tomcat-3/|다운로드]] | | | Apache Tomcat 3.3.2 | 2.2 | 1.1 | - | JDK 1.1이상 | [[https://archive.apache.org/dist/tomcat/tomcat-3/|다운로드]] | |
===== 보안 취약점 ===== | ===== 보안 취약점 ===== |
| |
| * [[was:tomcat:로그_디렉토리/파일_권한_설정 |로그_디렉토리/파일_권한_설정]]\\ |
| * [[was:tomcat:로그_포맷_설정 |로그_포맷_설정]]\\ |
| * [[http://rwiki.repia.com/doku.php?id=wiki:was:tomcat:tip:tomcat_%EB%B2%84%EC%A0%84_%EC%A0%95%EB%B3%B4_%EC%88%A8%EA%B8%B0%EA%B8%B0 | 에러 메시지 관리 또는 에러 페이지에서 Tomcat 버전 숨기기 ]]\\ |
| * [[was:tomcat:불필요한_파일_및_디렉토리_삭제|불필요한_파일_및_디렉토리_삭제]] |
| * [[was:tomcat:Tomcat_관리자_콘솔_접근통제|Tomcat_관리자_콘솔_접근통제]] |
| |
| |
2020.02.24 CVE-2020-1938 Apache Tomcat 취약점(Ghostcat) \\ | 2020.02.24 CVE-2020-1938 Apache Tomcat 취약점(Ghostcat) \\ |
[[wiki:was:tomcat:Apache-tomcat 연동하기:Apache-Tomcat-7.0.100 이상 server.xml AJP 설정|조치방법(김토피아)]] , [[https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-1938|CVE-2020-1938]] | [[wiki:was:tomcat:Apache-tomcat 연동하기:Apache-Tomcat-7.0.100 이상 server.xml AJP 설정|조치방법(김토피아)]] , [[https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-1938|CVE-2020-1938]] |
===== 오류 페이지 대응 ===== | ===== 오류 페이지 대응 ===== |
오류 코드에 대해서 상응하는 사용자가 직접 만든 페이지가 나올 수 있도록 조치하는 방법을 기술 \\ | 오류 코드에 대해서 상응하는 사용자가 직접 만든 페이지가 나올 수 있도록 조치하는 방법을 기술 \\ |
사용자가 만든 오류 페이지가 존재하지 않으면 was의 정보가 노출 됨을 방지\\ | 사용자가 만든 오류 페이지가 존재하지 않으면 was의 정보가 노출 됨을 방지 |
| > {RSA_WEB_ROOT}/WEB-INF/web.xml에 내용 추가, 필요에 따라 {TOMCAT_ROOT}/conf/web.xml 에도 내용 추가 |
| > <error-code>에 에러코드(숫자) 입력 |
| > 코드번호: 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 500, 501, 502, 503, 504, 505 |
| > JSP의 위치는 Context 디렉토리와 front 디렉토리에 둠 (필요에 따라 {TOMCAT_ROOT}/webapps/ROOT에 넣음 |
| * [[https://developer.mozilla.org/ko/docs/Web/HTTP/Status|HTTP 상태 코드 정리]] \\ |
{TOMCAT_ROOT}/conf/web.xml | {TOMCAT_ROOT}/conf/web.xml |
<code bash> | <code bash> |
</error-page> | </error-page> |
..... 생략 | ..... 생략 |
| </code> |
| |
| > error.jsp 소스 |
| <code bash> |
| <%@ page language="java" contentType="text/html; charset=utf-8"%> |
| <!DOCTYPE HTML> |
| <html> |
| |
| <head> |
| <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> |
| <title>웹 페이지를 표시할 수 없습니다.</title> |
| <style type="text/css"> |
| body { background-repeat: repeat-x; background-color: white; font-family: "맑은 고딕", "Segoe UI", "verdana", "arial"; margin: 0em; color: #575757; } |
| .mainContent { margin-top:80px; width: 700px; margin-left: 120px ; margin-right: auto ; } |
| /* title { color: #2778ec; font-size: 30pt; font-weight: 300; vertical-align:bottom; margin-bottom: 20px; font-family: "맑은 고딕", "Segoe UI", "verdana"; position: relative; } */ |
| .title { color: #228b22; font-size: 30pt; font-weight: 300; vertical-align:bottom; margin-bottom: 20px; font-family: "맑은 고딕", "Segoe UI", "verdana"; position: relative; } |
| .errorExplanation { color: #000000; font-size: 12pt; font-family: "맑은 고딕", "Segoe UI", "verdana", "arial"; text-decoration: none; } |
| .taskSection { margin-top: 20px; margin-bottom: 40px; position: relative; } |
| .tasks { color: #000000; font-family: "맑은 고딕", "Segoe UI", "verdana"; font-weight:200; font-size: 12pt; padding-top: 5px; } |
| li { margin-top: 8px; } |
| .diagnoseButton { outline: none; font-size: 9pt; } |
| .webpageURL { direction:ltr; } |
| .hidden { display:none; } |
| /* a { color: #0066cc; font-family: "맑은 고딕", "Segoe UI", "verdana", "arial"; font-size: 11pt; text-decoration: none; } */ |
| a { color: #008000; font-family: "맑은 고딕", "Segoe UI", "verdana", "arial"; font-size: 11pt; text-decoration: none; } |
| a:hover { text-decoration: underline; } |
| .lineBottom { border-bottom: 1px solid; } |
| .lineTop { border-top: 1px solid; } |
| .r { text-align: right; } |
| .l { text-align: left; } |
| </style> |
| </head> |
| |
| <body> |
| <div id="contentContainer" class ="mainContent"> |
| <div id="mainTitle" class="title">이 페이지를 표시할 수 없습니다.</div> |
| <div class="taskSection" id="taskSection"> |
| <ul id="taskList" class="tasks"> |
| <li id="task1">웹 주소 <span id="webpage" class="webpageURL"></span>이(가) 올바른지 확인하세요.</li> |
| <li id="task2">검색 엔진으로 페이지를 찾아보세요.</li> |
| <li id="task3">몇 분 후에 페이지를 새로 고치세요.</li> |
| <li id="task4">TLS 및 SSL 프로토콜이 사용되고 있는지 확인하세요. 도구 > 인터넷 옵션 > 고급 > 설정 > 보안으로 이동하세요.</li> |
| </ul> |
| <ul id="cantDisplayTasks" class="tasks hidden"> |
| <li id="task1-1">웹 주소가 올바른지 확인하세요.</li> |
| <li id="task1-2">검색 엔진으로 페이지를 찾아보세요.</li> |
| <li id="task1-3">몇 분 후에 페이지를 새로 고치세요.</li> |
| </ul> |
| <ul id="notConnectedTasks" class="tasks hidden"> |
| <li id="task2-1">모든 네트워크 케이블이 연결되어 있는지 확인하세요.</li> |
| <li id="task2-2">비행기 모드가 꺼져 있는지 확인하세요.</li> |
| <li id="task2-3">무선 스위치가 켜져 있는지 확인하세요.</li> |
| <li id="task2-4">모바일 광대역에 연결할 수 있는지 확인하세요.</li> |
| <li id="task2-5">라우터를 다시 시작하세요.</li> |
| </ul> |
| </div> |
| <div class="lineTop l"><a href="http://<%=request.getServerName()%>" title=" 페이지 이동">http://<%=request.getServerName()%></a></div> |
| <% response.setStatus(404); %> |
| </div> |
| <script type="text/javascript"> |
| try { document.getElementById("webpage").innerHTML = location.href; } catch(e) {} |
| </script> |
| </body> |
| </html> |
</code> | </code> |
===== 로깅 ===== | ===== 로깅 ===== |
<code bash> | <code bash> |
// /etc/logrotate.d 아래에 tomcat 파일 생성 | // /etc/logrotate.d 아래에 tomcat 파일 생성 |
$> vi /etc/logrotate.d/tomcat //파일명은 편하게 생성하되 무엇을 가르키는지 명확하게 작성 | $> cat /etc/logrotate.d/tomcat //파일명은 편하게 생성하되 무엇을 가르키는지 명확하게 작성 |
// 내용 작성 | |
/usr/local/tomcat/*log { // *log 또는 catalina.out 가능 | /usr/local/tomcat/*log { // *log 또는 catalina.out 가능 |
copytruncate | copytruncate |
daily | daily |
rotate 30 | rotate 200 |
compress | compress |
missingok | missingok |
notifempty | notifempty |
dateext | dateext |
| dateformat .%Y-%m-%d |
} | } |
| |
copytruncate : 기존 파일을 백업해서 다른 파일로 이동하고 기존 파일은 지워버리는 옵션 | $> // 로그파일 순환 테스트 |
daily : 로그파일을 날짜별로 변환 | $> $logrotate -f /etc/logrotate.d/tomcat |
compress : 지나간 로그파일들을 gzip으로 압축 | $> // 디버그 모드 |
dateext : 순환된 로그파일의 날짜확장자 | $> $logrotate -d /etc/logrotate.d/tomcat |
missingok : 로그파일이 없더라도 오류를 발생시키지 않음 | |
rotate 30 : 로그 파일은 30개만큼 저장된 다음 제거되거나 메일로 보내짐 | |
notifempty : 파일의 내용이 없으면 새로운 로그 파일을 생성 안 | |
| |
</code> | </code> |
| > copytruncate : 기존 파일을 백업해서 다른 파일로 이동하고 기존 파일은 지워버리는 옵션 |
| > daily : 로그파일을 날짜별로 변환 |
| > compress : 지나간 로그파일들을 gzip으로 압축 |
| > dateext : 순환된 로그파일의 날짜확장자 |
| > missingok : 로그파일이 없더라도 오류를 발생시키지 않음 |
| > rotate 30 : 로그 파일은 30개만큼 저장된 다음 제거되거나 메일로 보내짐 |
| > notifempty : 파일의 내용이 없으면 새로운 로그 파일을 생성 안함 |
| > dateformat .%Y-%m-%d |
=== catalina.out 계속 커지는 문제 === | === catalina.out 계속 커지는 문제 === |
| [[https://share9.tistory.com/39|linux tomcat catalina.out 안나오게 하는 방법 / linux tomcat catalina.out 이 나오지 않는다 / linux tomcat catalina.out 용량이 너무 클때]]\\ |
| |
[[https://mycup.tistory.com/216|Tomcat 로그 관리 (logrotate.d)]] \\ | [[https://mycup.tistory.com/216|Tomcat 로그 관리 (logrotate.d)]] \\ |
[[https://m.blog.naver.com/ncloud24/220942273629|logrotate.d 더 많은 옵션 정리]] \\ | [[https://m.blog.naver.com/ncloud24/220942273629|logrotate.d 더 많은 옵션 정리]] \\ |
* [[https://java2017.tistory.com/29|톰캣 캐시 사용 안하기]] | * [[https://java2017.tistory.com/29|톰캣 캐시 사용 안하기]] |
* [[wiki:was:tomcat:Tip:Tomcat 버전 정보 숨기기]] | * [[wiki:was:tomcat:Tip:Tomcat 버전 정보 숨기기]] |
| * [[wiki:was:tomcat:Tip:Tomcat 보안]] |
| |
===== Troubleshooting ===== | ===== Troubleshooting ===== |
| |
* [[wiki:was:tomcat: hot deploy]] | * [[wiki:was:tomcat: hot deploy]] |
| |
| ... 캐시에 추가할 수 없습니다. 왜냐하면 만료된 캐시 ... 오류 처리 |
| 해결 방법 ( context.xml 내 캐시 추가 ) |
| <code xml> |
| <?xml version="1.0" encoding="UTF-8"?> |
| |
| <Context> |
| <WatchedResource>WEB-INF/web.xml</WatchedResource> |
| <WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource> |
| <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource> |
| |
| <Resources chahingAllowed="true" cacheMaxSize="1000000"/> |
| |
| </Context> |
| </code> |
| [[https://joohoon.tistory.com/95|( TOMCAT ) 톰캣 캐시 부족 현상 간단 해결]] |
| |
===== Ref ===== | ===== Ref ===== |
* [[http://tomcat.apache.org/whichversion.html|Apache Tomcat Versions]] | * [[http://tomcat.apache.org/whichversion.html|Apache Tomcat Versions]] |