apache tomcat이 현재 10 버전 까지 나와있지만 현재 사용하고 있는 Tomcat 서버는 tomcat6과 tomcat7이다.
업체에 보안 이슈개선 요청으로 해당 부분 tomcat 정보 표시 안되도록 개선 한 내용 정리
whereis 명령어로 tomcat 관련 설정파일의 위치를 확인 할 수 있다.
root@ubuntu: ~]whereis tomcat7
tomcat7: /etc/tomcat7 /usr/share/tomcat7
이외에 러닝 상태의 tomcat 웹서버는 /var/lib/tomcat7 이 있다.
tree -L 명령어로 구조를 확인 할 수 있다.
root@ubuntu: /var/lib/tomcat7]tree -L 2
|-- common
|-- conf -> /etc/tomcat7
|-- logs -> ../../log/tomcat7
|-- policy
| `-- catalina.policy
|-- server
| `-- classes
|-- shared
| `-- classes
|-- webapps
| |-- Fota_Web
| |-- ROOT
아파치 톰캣 apache tomcat 웹서버의 정보 노출은 크게 3가지 영역에 존재한다.
해당 부분 수정을 통해 웹서버 관련 정보를 노출되는 것을 개선할 수 있다.
1. Root 영역에 표시되는 정보 수정
브라우저 주소창에 myweb.co.kr:8080 입력하면, tomcat7의 루트 경로에 접근 시에 index.html 파일을 화면에 보여준다.이하 이미지에서 처럼 web server가 tomcat7임을 알 수 있다.
보안상 현재 서버의 웹서버의 종류를 알 수 있기에 변경해어야한다.
수정 필요 파일
/var/lib/tomcat7/webapps/ROOT/index.html
head에서와 html 본문 내부에 주요 파일 위치 및 apache tomcat의 관련 파일 정보들이 노출되어 있다.
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Apache Tomcat</title>
</head>
<body>
<h1>It works !</h1>
<p>If you're seeing this page via a web browser, it means you've setup Tomcat successfully. Congratulations!</p>
<p>This is the default Tomcat home page. It can be found on the local filesystem at: <code>/var/lib/tomcat7/webapps/ROOT/index.html</code></p>
<p>Tomcat7 veterans might be pleased to learn that this system instance of Tomcat is installed with <code>CATALINA_HOME</code> in <code>/usr/share/tomcat7</code> and <code>CATALINA_BASE</code> in <code>/var/lib/tomcat7</code>, following the rules from <code>/usr/share/doc/tomcat7-common/RUNNING.txt.gz</code>.</p>
<p>You might consider installing the following packages, if you haven't already done so:</p>
<p><b>tomcat7-docs</b>: This package installs a web application that allows to browse the Tomcat 7 documentation locally. Once installed, you can access it by clicking <a href="docs/">here</a>.</p>
<p><b>tomcat7-examples</b>: This package installs a web application that allows to access the Tomcat 7 Servlet and JSP examples. Once installed, you can access it by clicking <a href="examples/">here</a>.</p>
<p><b>tomcat7-admin</b>: This package installs two web applications that can help managing this Tomcat instance. Once installed, you can access the <a href="manager/html">manager webapp</a> and the <a href="host-manager/html">host-manager webapp</a>.<p>
<p>NOTE: For security reasons, using the manager webapp is restricted to users with role "manager-gui". The host-manager webapp is restricted to users with role "admin-gui". Users are defined in <code>/etc/tomcat7/tomcat-users.xml</code>.</p>
</body>
</html>
index.html 변경 후 현재 사용중인 web server가 tomcat7임을 알 수 없다.
2. HTTP 헤더에 표시되는 정보 노출 보안 처리
HTTP 헤더에 서버(Server) 정보 확인을 위해 curl 명령어로 어떤 정보가 노출되는지 확인 할 수 있다.
curl -v -I localhost:8080
* Rebuilt URL to: localhost:8080/
* Hostname was NOT found in DNS cache
* Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 8080 (#0)
> HEAD / HTTP/1.1
> User-Agent: curl/7.35.0
> Host: localhost:8080
> Accept: */*
>
< HTTP/1.1 200 OK
HTTP/1.1 200 OK
* Server Apache-Coyote/1.1 is not blacklisted
< Server: Apache-Coyote/1.1
Server: Apache-Coyote/1.1
< Accept-Ranges: bytes
Accept-Ranges: bytes
< ETag: W/"306-1634628465000"
ETag: W/"306-1634628465000"
< Last-Modified: Tue, 19 Oct 2021 07:27:45 GMT
Last-Modified: Tue, 19 Oct 2021 07:27:45 GMT
< Content-Type: text/html
Content-Type: text/html
< Content-Length: 306
Content-Length: 306
< Date: Tue, 19 Oct 2021 07:39:03 GMT
Date: Tue, 19 Oct 2021 07:39:03 GMT
<
* Connection #0 to host localhost left intact
수정 전 화면
Header 정보는 ServerInfo.properties 파일에 존재하며, catalina.jar 파일에 포함되어 있다.
구글 검색을 통해서 알아 보면 보통 아래의 경로에 있다고 되어있다.
$TOMCAT_HOME/lib/catalina.jar
$CATALINA_BASE/lib/catalina.jar
운영하고 있는 내 우분투 서버의 경로는 달랐다.
find 명령어로 catalina.jar 파일을 찾았다.
root@ubuntu: /]find . -name catalina.jar
./usr/share/tomcat7/lib/catalina.jar
root@ubuntu: /usr/share/tomcat7/lib]ls -al
total 8
drwxr-xr-x 2 root root 4096 Jun 11 2018 .
drwxr-xr-x 11 root root 4096 Jun 11 2018 ..
lrwxrwxrwx 1 root root 37 May 30 2018 catalina.jar -> ../../java/tomcat-catalina-7.0.52.jar
해당 파일은 링크되어있어서 원본 파일을 jar xvf 명령어로 압축을 푼 후 수정
root@ubuntu: /usr/share/java]jar xvf tomcat-catalina-7.0.52.jar
수정 전 ServerInfo.properties 내용
root@ubuntu: /usr/share/java]vi org/apache/catalina/util/ServerInfo.properties
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
server.info=Apache Tomcat/7.0.52 (Ubuntu)
server.number=7.0.52.0
server.built=May 30 2018 11:25:41
수정 후 ServerInfo.properties 내용
server.info=Web/1.0.0
server.number=1.0.0
server.built=May 30 2018 11:25:41
원본 catalina.jar 파일 backup 폴더 생성 후
적용전 백업 처리
root@ubuntu: /usr/share/java]mkdir lib_backup
root@ubuntu: /usr/share/java]mv tomcat-catalina-7.0.52.jar ./lib_backup/
수정 한 ServerInfo.properties 파일을 다시 jar 명령어로 압축 후 서비스 재기동 하였다.
root@ubuntu: /usr/share/java]jar cvf tomcat-catalina-7.0.52.jar ./org
apache tomcat7 restart 통해서 재기동
root@ubuntu: /usr/share/java]service tomcat7 restart
* Stopping Tomcat servlet engine tomcat7 [ OK ]
* Starting Tomcat servlet engine tomcat7 [ OK ]
수정 후 web 화면
크롬부라우저 F12 디버깅 화면을 통해 http response headers 정보에도 server에 변경 수정한 web로 표시되는걸 확인할 수 있다.
curl 명령어로 HTTP 헤더 정보에 서버정보가 변경한 web로 변경됨을 확인 할 수 있다.
* Server Apache-Coyote/1.1 is not blacklisted < Server: Apache-Coyote/1.1 Server: Apache-Coyote/1.1
->
* Server Web is not blacklisted < Server: Web Server: Web
root@ubuntu: ~]curl -v -I localhost:8080
* Rebuilt URL to: localhost:8080/
* Hostname was NOT found in DNS cache
* Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 8080 (#0)
> HEAD / HTTP/1.1
> User-Agent: curl/7.35.0
> Host: localhost:8080
> Accept: */*
>
< HTTP/1.1 200 OK
HTTP/1.1 200 OK
< Accept-Ranges: bytes
Accept-Ranges: bytes
< ETag: W/"306-1634628465000"
ETag: W/"306-1634628465000"
< Last-Modified: Tue, 19 Oct 2021 07:27:45 GMT
Last-Modified: Tue, 19 Oct 2021 07:27:45 GMT
< Content-Type: text/html
Content-Type: text/html
< Content-Length: 306
Content-Length: 306
< Date: Tue, 19 Oct 2021 07:44:11 GMT
Date: Tue, 19 Oct 2021 07:44:11 GMT
* Server Web is not blacklisted
< Server: Web
Server: Web
<
* Connection #0 to host localhost left intact
tomcat의 version.sh 명령어로 톰캣 버전 정보 확인
root@ubuntu: /usr/share/tomcat7]./bin/version.sh
Using CATALINA_BASE: /usr/share/tomcat7
Using CATALINA_HOME: /usr/share/tomcat7
Using CATALINA_TMPDIR: /usr/share/tomcat7/temp
Using JRE_HOME: /usr/lib/jvm/java-7-oracle
Using CLASSPATH: /usr/share/tomcat7/bin/bootstrap.jar:/usr/share/tomcat7/bin/tomcat-juli.jar
Server version: Web/1.0.0
Server built: May 30 2018 11:25:41
Server number: 1.0.0
OS Name: Linux
OS Version: 4.4.0-31-generic
Architecture: amd64
JVM Version: 1.7.0_80-b15
JVM Vendor: Oracle Corporation
3. Server.xml에서 보안 처리
아파치 톰캣 apache tomcat의 서버 설정 파일에서 Server 항목을 추가하고 명시해주는 방법이다.
/var/lib/tomcat7/conf/server.xml
<!-- A "Connector" represents an endpoint by which requests are received
and responses are returned. Documentation at :
Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
Java AJP Connector: /docs/config/ajp.html
APR (HTTP/AJP) Connector: /docs/apr.html
Define a non-SSL HTTP/1.1 Connector on port 8080
-->
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
URIEncoding="UTF-8"
redirectPort="8443" />
Connector 부분에 Server에 원하는 문구 입력하여 server.xml 수정 후 변경 됨을 확인할 수 있다.
나의 경우 Server 문구에 web 이라고 변경하였다.
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
URIEncoding="UTF-8"
redirectPort="8443"
Server="Web" />
결론
웹서버를 직접설치해서 운영 관리한다고 하면 ServerInfo.properties 파일 수정으로 모든 error 발생 시 노출되는 서버정보를 막을 수 있다. 웹서버 환경에서 페이지와 사이트만 운영한다고 하는경우에는 자신의 릴리즈 파일 내부에서 처리해줘야 한다.
'SW Developer > Server' 카테고리의 다른 글
AWS putty Fatal Error Could n`t agree a key exchange algorithm 해결 방법 (0) | 2021.10.31 |
---|---|
aws iam 계정 모범 사례 예제 따라하기 Root 유저로 Admin 계정 생성 방법 (0) | 2021.10.28 |
포트 스캔 네트워크 스캔 이란 관련 기술 및 보안 설정 (0) | 2021.10.12 |
AWS SMTP 설정 메일 발신 안되는 문제 해결 방법 Redmine 다우 오피스 dao office sendmail 에러 (0) | 2021.10.01 |
[AWS] EC2 모노릭틱(monolithic architecture) 서버 끄지 않고 러닝 상태에서 디스크/파티션 용량 사이즈 늘리기 방법 (0) | 2021.09.29 |
댓글