Apache Tomcat 강화 및 보안 가이드

모범 사례를 통해 Apache Tomcat 서버를 강화하고 보호하기 위한 실용적인 가이드입니다.

Tomcat은 가장 인기 있는 서블릿 및 JSP 컨테이너 서버 중 하나입니다. 다음과 같이 트래픽이 많은 웹사이트에서 사용됩니다.

  • LinkedIn.com
  • Dailymail.co.uk
  • 컴캐스트.넷
  • 월마트닷컴
  • Reuters.com
  • Meetup.com
  • 웹스닷컴

아래 차트는 Java 애플리케이션 서버에서 Tomcat의 시장 위치를 ​​보여줍니다.

출처: 배관공

기술적으로 Tomcat을 프런트 엔드 서버로 사용하여 사이트 요청을 직접 제공할 수 있습니다. 그러나 프로덕션 환경에서는 Apache, Nginx와 같은 일부 웹 서버를 프런트 엔드로 사용하여 Tomcat으로 요청을 라우팅할 수 있습니다.

웹 서버를 사용하여 요청을 처리하면 성능과 보안상의 이점이 있습니다. Apache HTTP를 프론트 엔드 웹 서버로 사용하는 경우 보안도 고려해야 합니다.

기본 Tomcat 구성을 사용하면 민감한 정보가 노출될 수 있으므로 해커가 응용 프로그램에 대한 공격을 준비하는 데 도움이 됩니다.

다음은 Tomcat 7.x, UNIX 환경에서 테스트되었습니다.

청중

이것은 미들웨어 관리자, 응용 프로그램 지원, 시스템 분석가 또는 Tomcat 강화 및 보안을 배우려는 작업을 하거나 열망하는 모든 사람을 위해 설계되었습니다.

Tomcat 및 UNIX 명령에 대한 충분한 지식은 필수입니다.

메모

확인을 위해 HTTP 헤더를 검사하는 몇 가지 도구가 필요합니다. 두 가지 방법이 있습니다.

인터넷 연결 응용 프로그램을 테스트하는 경우 다음 HTTP 헤더 도구를 사용하여 구현을 확인할 수 있습니다.

그리고 인트라넷 응용 프로그램의 경우 Google Chrome, Firefox 개발자 도구를 사용할 수 있습니다.

가장 좋은 방법은 수정하려는 파일을 백업하는 것입니다.

이 지침 전체에서 Tomcat 설치 폴더를 $tomcat으로 부를 것입니다.

  Windows에서 마우스 및 키보드로 감지된 Xbox 컨트롤러를 수정하는 방법

강화 및 고정 절차를 진행해 보겠습니다.

서버 배너 제거

HTTP 헤더에서 서버 배너를 제거하는 것은 강화로 가장 먼저 해야 할 일 중 하나입니다.

서버 배너가 있으면 사용 중인 제품과 버전이 노출되어 정보유출 취약점이 발생합니다.

기본적으로 Tomcat에서 제공하는 페이지는 다음과 같이 표시됩니다.

서버 헤더에서 제품 및 버전 세부 정보를 숨기겠습니다.

  • $tomcat/conf 폴더로 이동
  • vi를 사용하여 server.xml 수정
  • 커넥터 포트에 다음 추가
Server =” “

전: –

<Connector port="8080" protocol="HTTP/1.1" 
connectionTimeout="20000" 
Server =" "
redirectPort="8443" />
  • 파일을 저장하고 Tomcat을 다시 시작합니다. 이제 애플리케이션에 액세스할 때 서버 헤더에 대한 빈 값이 표시되어야 합니다.

보안 관리자로 Tomcat 시작

Security Manager는 브라우저에서 실행되는 신뢰할 수 없는 애플릿으로부터 사용자를 보호합니다.

보안 관리자와 함께 Tomcat을 실행하는 것이 보안 관리자 없이 실행하는 것보다 낫습니다. Tomcat에는 다음과 같은 훌륭한 문서가 있습니다. 톰캣 보안 관리자.

이것의 좋은 점은 구성 파일을 변경할 필요가 없다는 것입니다. startup.sh 파일을 실행하는 방법입니다.

–security 인수로 tomcat을 시작하기만 하면 됩니다.

[[email protected] bin]# ./startup.sh -security
Using CATALINA_BASE: /opt/tomcat
Using CATALINA_HOME: /opt/tomcat
Using CATALINA_TMPDIR: /opt/tomcat/temp
Using JRE_HOME: /usr
Using CLASSPATH: /opt/tomcat/bin/bootstrap.jar:/opt/tomcat/bin/tomcat-juli.jar
Using Security Manager
Tomcat started.
[[email protected] bin]#

SSL/TLS 활성화

HTTPS를 통해 웹 요청을 제공하는 것은 클라이언트와 Tomcat 간의 데이터를 보호하는 데 필수적입니다. HTTPS를 통해 웹 애플리케이션에 액세스할 수 있도록 하려면 SSL 인증서를 구현해야 합니다.

인증서와 함께 키 저장소가 이미 준비되어 있다고 가정하면 커넥터 포트 섹션 아래의 server.xml 파일에 아래 행을 추가할 수 있습니다.

SSLEnabled="true" scheme="https" keystoreFile="ssl/bloggerflare.jks" keystorePass="chandan" clientAuth="false" sslProtocol="TLS"

키 저장소 파일 이름과 비밀번호를 귀하의 것으로 변경하십시오.

키 저장소 및 CSR 프로세스에 대한 도움이 필요하면 이 가이드를 참조하십시오.

HTTPS 시행

SSL을 활성화한 경우에만 적용됩니다. 그렇지 않으면 응용 프로그램이 중단됩니다.

SSL을 활성화하면 사용자와 Tomcat 응용 프로그램 서버 간의 보안 통신을 위해 모든 HTTP 요청을 HTTPS로 강제 리디렉션하는 것이 좋습니다.

  • $tomcat/conf 폴더로 이동
  • vi를 사용하여 web.xml 수정
  • 구문 앞에 다음 추가
<security-constraint> 
<web-resource-collection> 
<web-resource-name>Protected Context</web-resource-name> 
<url-pattern>/*</url-pattern>
</web-resource-collection> 
<user-data-constraint> 
<transport-guarantee>CONFIDENTIAL</transport-guarantee> 
</user-data-constraint> 
</security-constraint>
  • 파일을 저장하고 Tomcat을 다시 시작하십시오.
  Gmail 또는 Yahoo!와 일치하도록 Outlook.com 바로 가기를 변경하는 방법!

보안 쿠키 없이 웹 애플리케이션 세션 및 쿠키를 도용하거나 조작할 수 있습니다. 응답 헤더에 삽입되는 플래그입니다.

web.xml 파일의 session-config 섹션에 있는 줄 아래에 추가하면 됩니다.

<cookie-config>
<http-only>true</http-only>
<secure>true</secure>
</cookie-config>

구성 스크린샷:

파일을 저장하고 Tomcat을 다시 시작하여 HTTP 응답 헤더를 검사합니다.

권한이 없는 계정에서 Tomcat 실행

Tomcat은 권한이 없는 별도의 사용자를 사용하는 것이 좋습니다. 여기에서 아이디어는 계정 중 하나가 손상될 경우 실행 중인 다른 서비스를 보호하는 것입니다.

  • UNIX 사용자 만들기, Tomcat이라고 가정해 보겠습니다.
useradd tomcat
  • 실행 중인 경우 Tomcat 중지
  • $tomcat 소유권을 사용자 바람둥이로 변경
chown -R tomcat:tomcat tomcat/

Tomcat을 시작하고 Tomcat 사용자로 실행 중인지 확인하십시오.

기본/원치 않는 응용 프로그램 제거

기본적으로 Tomcat에는 프로덕션 환경에서 필요하거나 필요하지 않을 수 있는 다음과 같은 웹 응용 프로그램이 함께 제공됩니다.

Tomcat 기본 응용 프로그램을 사용하여 깨끗하게 유지하고 알려진 보안 위험을 피하기 위해 삭제할 수 있습니다.

  • 루트 – 기본 시작 페이지
  • 문서 – Tomcat 문서
  • 예 – 데모용 JSP 및 서블릿
  • 관리자, 호스트 관리자 – Tomcat 관리

$tomcat/webapps 폴더에서 사용할 수 있습니다.

[[email protected] webapps]# ls -lt
drwxr-xr-x 14 tomcat tomcat 4096 Sep 29 15:26 docs
drwxr-xr-x 7 tomcat tomcat 4096 Sep 29 15:26 examples
drwxr-xr-x 5 tomcat tomcat 4096 Sep 29 15:26 host-manager
drwxr-xr-x 5 tomcat tomcat 4096 Sep 29 15:26 manager
drwxr-xr-x 3 tomcat tomcat 4096 Sep 29 15:26 ROOT
[[email protected] webapps]#

SHUTDOWN 포트 및 명령 변경

기본적으로 tomcat은 8005 포트에서 종료되도록 구성됩니다.

IP:port에 텔넷을 실행하고 SHUTDOWN 명령을 실행하여 tomcat 인스턴스를 종료할 수 있다는 것을 알고 있습니까?

Chandans # telnet localhost 8005
Trying ::1... telnet:
connect to address ::1:
Connection refused Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
SHUTDOWN Connection closed by foreign host.
Chandans #

위험한!

기본 구성을 사용하면 높은 보안 위험이 발생합니다.

  장치 위치 정확도를 개선하기 위해 Android에서 나침반을 보정하는 방법

tomcat 종료 포트 및 기본 명령을 예측할 수 없는 것으로 변경하는 것이 좋습니다.

  • server.xml에서 다음을 수정합니다.
<Server port="8005" shutdown="SHUTDOWN">

8005 – 사용하지 않는 다른 포트로 변경

SHUTDOWN – 복잡한 것으로 변경

전-

<Server port="8867" shutdown="NOTGONNAGUESS">

기본 404, 403, 500 페이지 바꾸기

찾을 수 없음, 금지됨, 서버 오류에 대한 기본 페이지가 있으면 버전 세부 정보가 노출됩니다.

기본 404 페이지를 살펴보겠습니다.

이를 완화하려면 먼저 일반 오류 페이지를 만들고 일반 오류 페이지로 리디렉션하도록 web.xml을 구성할 수 있습니다.

  • $tomcat/webapps/$application으로 이동
  • vi 편집기를 사용하여 error.jsp 파일 만들기
<html>
<head> 
<title>Error Page</title>
</head>
<body> That's an error! </body>
</html>
  • $tomcat/conf 폴더로 이동
  • web.xml 파일에 다음을 추가합니다. 구문 앞에 추가해야 합니다.
<error-page> 
<error-code>404</error-code> 
<location>/error.jsp</location>
</error-page>
<error-page> 
<error-code>403</error-code> 
<location>/error.jsp</location>
</error-page>
<error-page> 
<error-code>500</error-code> 
<location>/error.jsp</location>
</error-page>
  • 테스트를 위해 Tomcat 서버를 다시 시작하십시오.

훨씬 낫다!

java.lang.Exception에 대해서도 이 작업을 수행할 수 있습니다. 이것은 Java lang 예외가 있는 경우 Tomcat 버전 정보를 노출하지 않는 데 도움이 됩니다.

web.xml에 다음을 추가하고 Tomcat 서버를 다시 시작하십시오.

<error-page> 
<exception-type>java.lang.Exception</exception-type> 
<location>/error.jsp</location>
</error-page>

위의 가이드가 Tomcat 보안에 대한 아이디어를 제공하기를 바랍니다. Tomcat 관리에 대해 자세히 알아보려면 다음을 확인하십시오. 온라인 코스.
또한, 여기에서 종료하는 동안 암호 요청을 중지하도록 WAS를 구성하는 방법을 배우십시오.