Apache Tomcat에서는 Error를 유발했더니 서버 버전 정보가 노출되었다. Error 페이지에서 출력되는 버전 정보를 숨기는 방법은 아래와 같다.

일단 Error 페이지에서 노출되는 서버 버전 정보를 확인하기 위해 404 Error를 발생시켰더니 아래와 같이 Apache Tomcat/7.0.68 (Ubuntu)라는 정보가 출력되었다.

Apache Tomcat에서 버전 정보를 숨기기 위해서는 /etc/tomcat7/server.xml 파일을 수정해야 한다.

server.xml 파일을 열고 가장 아래로 내려보면 <Host> 태그를 발견할 수 있다. 해당 태그 안에 <Valve>라는 태그가 있는데, <Valve> 태그를 통해 Tomcat에 들어오는 각 요청에 대한 전처리를 수행할 수 있다.

따라서 Error 페이지에 대한 전처리 설정을 하기 위해 아래와 같이 새로운 <Valve>를 추가 해 준다.

1
<Valve className="org.apache.catalina.valves.ErrorReportValve" showReport="false" showServerInfo="false"/>

이 후 Tomcat을 재실행 해 주어야 한다.

재실행을 하기 위해서는 /usr/share/tomcat7/bin 디렉터리의 shutdown.shstartup.sh를 차례로 실행 해 주면 된다.

그런데 내 경우, shutdown.sh를 실행하니 아래와 같은 오류가 났다.

1
java.io.FileNotFoundException: /usr/share/tomcat7/conf/server.xml (No such file or directory)

이 오류를 해결하기 위해서는 /usr/share/tomcat7 디렉터리로 가 아래의 명령어를 입력 해 주면 된다.

1
ln -s /var/lib/tomcat7/* ./

이 후, shutdown.shstartup.sh를 차례로 실행 해 주면 아래와 같이 Tomcat started라는 문구가 뜨며 재실행이 된 것을 확인할 수 있다.

다시 웹으로 돌아가 아까와 똑같이 404 Error를 발생 해 보면 서버 버전 정보 뿐만 아니라 오류의 세부 내용도 함께 사라진 것을 확인할 수 있다.


참고

인터넷에서 Tomcat의 서버 버전 정보 노출 방지 방법을 찾으면 catalina.jar를 찾아 특정 폴더 내에 있는 버전 정보를 지우도록 하는 방법이 나온다. 나도 처음엔 그렇게 해보려 했는데, 저렇게 할 경우 catalina.jarrepackaging되면서 의도치 않은 오류가 발생할 수 있다고 한다. 그래서 위와 같이 <Valve>를 사용 해 처리하는 방법을 권장한다고 한다.