IBM HTTP Server(IHS)와 WebSphere Liberty 환경에서
X-Powered-By헤더(예: Servlet/3.1) 노출을 차단하는 방법을 정리합니다. 보안 강화를 위해 웹 서버(IHS) 단에서의 필터링과 WAS(Liberty) 단에서의 생성 금지 설정을 모두 적용하는 것을 권장합니다.
0. 배경 및 전략 (Context)
보안 취약점 조치 시, 정보 노출 방지는 다계층 방어(Defense in Depth)가 중요합니다.
| 계층 | 역할 및 중요성 |
|---|---|
| 1. IHS (Web Server) | [필수] 최전방 방어선. 백엔드 WAS가 무엇이든 상관없이 클라이언트로 나가는 모든 응답에서 헤더를 강제 삭제합니다. |
| 2. Liberty (WAS) | [권장] 소스 차단. 내부망에서 WAS로 직접 접속하는 경우나 웹 서버 설정을 우회하는 경우를 대비해 헤더 생성 자체를 막습니다. |
Test Environment
- Web Server: IBM HTTP Server v9.0 (Apache 2.4 Base)
- WAS: WebSphere Liberty Core 20.0.x
1. IBM HTTP Server (IHS) 설정
Apache 기반인 IHS에서는 mod_headers 모듈을 사용하여 응답 헤더를 제어합니다.
httpd.conf 수정
설정 파일(httpd.conf)을 열어 아래 내용을 적용합니다.
# 1. 모듈 로드 확인 (주석 해제 필수)
LoadModule headers_module modules/mod_headers.so
# 2. 헤더 제거 설정 (Global 영역 또는 VirtualHost 내부에 작성)
<IfModule mod_headers.c>
# 보안 조치: 기술 스택 정보 숨김
Header unset X-Powered-By
# (선택) 추가적인 정보 노출 헤더 차단
Header unset X-AspNet-Version
Header unset X-Runtime
</IfModule>
# 3. 서버 버전 정보 최소화 (OS 정보 등 숨김)
ServerTokens Prod
Tip: 설정 후에는 반드시
./apachectl -t로 문법을 검사하고 재기동(restart 또는 graceful)해야 합니다.
2. WebSphere Liberty 설정
Liberty는 server.xml 파일 하나로 대부분의 설정을 처리합니다. webContainer 요소를 추가하거나 수정하여 헤더 생성을 비활성화합니다.
server.xml 수정
<server description="Liberty Server">
<!-- Feature Manager (기본 설정) -->
<featureManager>
<feature>servlet-3.1</feature>
</featureManager>
<!-- [보안 조치] X-Powered-By 헤더 비활성화 속성 추가 -->
<webContainer disableXPoweredBy="true" />
</server>
Liberty는 동적 설정을 지원하므로 파일 저장 시 즉시 반영되지만, 운영 환경에서는 확실한 적용을 위해 서버 재기동을 권장합니다.
3. 검증 (Verification)
curl 명령어를 사용하여 조치 전후의 응답 헤더를 비교합니다.
조치 전 (Before)
HTTP/1.1 200 OK
X-Powered-By: Servlet/3.1
Server: IBM_HTTP_Server/9.0.5...
...
조치 후 (After)
curl -I http://localhost:80/
HTTP/1.1 200 OK
Server: IBM_HTTP_Server <-- (Prod 설정으로 버전 숨김)
Content-Type: text/html
... <-- (X-Powered-By 헤더 삭제됨)
Next Step:
헤더 조치가 완료되었다면, HTTP 메소드 제한(GET, POST 외 차단) 및 SSL/TLS 프로토콜 버전(TLS 1.2 Only) 설정을 통해 웹 서비스 보안을 한 단계 더 강화해 보십시오.