apache, tomcat 최신 버전 패치(2)
※ apache, tomcat 최신 버전 패치(1) - apache 소스 컴파일 편
apache, tomcat 최신 버전 패치(1)
업무 apache 2.4.52 업데이트 https://httpd.apache.org/security/vulnerabilities_24.html tomcat 7.0 버전 중 가장 최신 버전 업데이트 https://tomcat.apache.org/security-7.html 상황(조건) apache에 보안 취..
woshcareer.tistory.com
목표
- apache 2.4.52 업데이트
https://httpd.apache.org/security/vulnerabilities_24.html - tomcat 7 버전 중 가장 최신 버전 업데이트
https://tomcat.apache.org/security-7.html
상황(조건)
- apache에 보안 취약점이 발견되어 최신 버전으로 업데이트가 필요하다.
https://www.dailysecu.com/news/articleView.html?idxno=132866 - apache와 tomcat이 설치된 서버는 Linux를 사용한다.
조치 과정 - apache 설정(apache - tomcat 연동 포함)
※ 주의 : 기존 버전의 apache 설정 파일과 비교하면서 신규 버전을 설정하세요.
※ 서비스별로 apache 설정이 달라 체크리스트 형식으로 작성했습니다.
0. 파일 수정 범위 확인
- build/config.nice 파일 내용 비교하여 httpd 컴파일 시의 설정을 같게 했는지 확인
- HTTPS/SSL 통신을 사용하는지 확인 → 인증서 파일 복사 및 conf/extra/httpd-ssl.conf 수정
- 일반 설정 및 보안 취약점 방어 → conf/httpd.conf 수정
- apache - tomcat 연동 및 부하 분산하는 경우 → conf/workers.properties 추가
1. HTTPS / SSL 설정 (https://httpd.apache.org/docs/2.4/mod/mod_ssl.html)
- 인증서 폴더/파일 경로 확인 및 필요하면 복사(.pem, .crt)
- extra/httpd-ssl.conf 파일 수정 전 기존 파일 백업 필수
- HTTPS port 설정 → Listen, <VirtualHost>
- SSL Ciphers 설정 → SSLCipherSuite, SSLProxyCipherSuite
- TLS 설정 → SSLProtocol, SSLProxyProtocol
- 인증서 설정 → SSLPassPhraseDialog, SSLCertificateFile, SSLCertificateKeyFile, SSLCertificateChainFile
- 도메인 설정 → ServerName
- 로그 파일 설정 → ErrorLog, CustomLog
- 그 외 나머지는 기존 버전 apache를 보면서 수정
2. 일반 설정 / 보안 취약점 방어
- httpd.conf 파일 수정 전 기존 파일 백업 필수
- 서비스 port 설정 → Listen
- HTTPS 사용을 위한 mod_ssl 사용 → LoadModule ssl_module modules/mod_ssl.so (주석 제거)
- 도메인 설정 → ServerName
- 보안취약점 조치 → LimitRequestBody, -Indexes -FollowSymLinks, <LimitExcept GET POST>, ServerSignature Off, ServerTokens Prod, TraceEnable Off
- 에러 메시지 설정 → ErrorDocument
- Status 사용 → <Location /server-status>
- 로그 파일 설정 → ErrorLog, CustomLog
- SSL/TLS 사용을 위한 별도 설정 파일 적용 → Include conf/extra/httpd-ssl.conf (주석 제거)
3. apache, tomcat 연동
- httpd.conf 파일 수정 전 기존 파일 백업 필수
- worker 생성 관련 별도 설정 파일 적용 → Include conf/extra/httpd-mpm.conf (주석 제거)
- mod_jk 사용 → LoadModule jk_module modules/mod_jk.so (추가되었는지 확인)
- workers 설정 추가
<IfModule mod_jk.c>
JkWorkersFile conf/workers.properties # worker 설정 파일
JkLogFile "|/아파치경로/bin/rotatelogs -f /아파치경로/logs/mod_jk_%Y%m%d.log 86400" # workers 로그 출력 위치 및 일자별 분할
JkLogLevel info # 로그 출력 레벨
JkMount /* loadbalancer # /*로 들어오는 요청을 loadbalancer worker로 넘김
</IfModule>
- workers.properties 파일 신규 생성 (https://tomcat.apache.org/connectors-doc/reference/workers.html)
worker.list=loadbalancer
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=tomcat1,tomcat2
worker.loadbalancer.sticky_session=1
worker.tomcat1.type=ajp13
worker.tomcat1.host=[tomcat IP]
worker.tomcat1.port=[tomcat Service Port]
worker.tomcat1.lbfactor=1
worker.tomcat2.type=ajp13
worker.tomcat2.host=[tomcat IP]
worker.tomcat2.port=[tomcat Service Port]
worker.tomcat2.lbfactor=1
4. 기타
- bin/envvars 파일 수정 전 기존 파일 백업 필수 (apache 소스 컴파일한 경우에만 적용됨)
- apache 로그 파일 생성 시 750 권한으로 생성 → umask 0027 추가
조치 과정 - tomcat 설정(apache - tomcat 연동 포함)
※ 주의 : 기존 버전의 tomcat 설정 파일과 비교하면서 신규 버전 설정하세요.
※ 서비스별로 tomcat 설정이 달라 체크리스트 형식으로 작성했습니다.
0. 파일 수정 범위 확인
- tomcat 기동 시 설정 변경 → bin/catalina.sh
- tomcat 버전에 따른 추가 설정 변경 → bin/setclasspath.sh
- tomcat을 이용한 서비스 port 및 url 변경 → conf/server.xml
- 보안 관련 설정 → conf/server.xml, webapps/ 폴더 이하 파일
1. tomcat 기동 시 설정 변경
- bin/catalina.sh 파일 수정 전 기존 파일 백업 필수
- Linux 서버에 설치된 JDK 경로 지정 → JAVA_HOME 추가
- tomcat 기동할 때 JVM 메모리 설정 → JAVA_OPTS 추가
- tomcat 로그 파일 생성할 때 750 권한으로 생성 → UMASK="0027" 없으면 추가
2. tomcat 버전에 따른 추가 설정
- bin/setclasspath.sh 파일 수정 전 기존 파일 백업 필수
- 아래와 같이 수정 → endorsed가 중첩 if문 안에 있으면 tocmat 기동이 제대로 안됨
# Don't override the endorsed dir if the user has set it previously
if [ -z "$JAVA_ENDORSED_DIRS" ]; then
JAVA_ENDORSED_DIRS="$CATALINA_HOME"/endorsed
fi
3. tomcat을 이용한 서비스 port 및 url 변경
- conf/server.xml 파일 수정 전 기존 파일 백업 필수
- shutdown port 변경 → Server port="8005" shutdown="SHUTDOWN"
- HTTP Connector port 변경 → Connector port="8080" protocol="HTTP/1.1"
- AJP Connector port 변경 → Connector port="8009" protocol="AJP/1.3" ~ address="0.0.0.0" secretRequired="false"
- worker id 입력 → Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1"
- 웹 애플리케이션의 Document Root와 path 입력 → Context path="/" docBase=" " reloadable="true"
4. 보안 관련 설정
- conf/web.xml 파일 수정 전 기존 파일 백업 필수
- HSTS 설정 → == Built In Filter Definitions == / == Built In Filter Mappings ==
- 세션 유지 시간(분) 설정 → session-timeout 30
- 사용자 정의 시작페이지 설정 → welcome-file-list
- 사용자 정의 에러페이지 설정 → error-code
- webapps/examples 폴더 제거 (불필요 폴더)
- webapps/ROOT 이하에 사용자가 만든 시작페이지 업로드
- webapps/ROOT 이하에 사용자가 만든 에러페이지 업로드
5. 참고
- tomcat도 WEB 서버로 사용할 수 있어 SSL 인증서 적용이 가능하다.
- apache와 tomcat을 연동하는 경우, WEB 서버는 apache가 맡으므로 tomcat에 인증서를 추가로 적용하지 않는다.
운영 환경 반영
- 아래의 순서로 실시
1) 기존(AS-IS) apache/tomcat 다운 : WAS tomcat 다운 → WEB apache 다운
2) 신규(TO-BE) apache/tomcat 기동 : WEB apache 기동 → WAS tomcat 기동
3) 서비스 정상 운영되는지 모니터링
# 트래픽은 WEB → WAS → DB 순서로 이동하므로 종료시에는 DB → WAS → WEB 순서로 한다.
- apache 및 tomcat 다운/기동 방법
# apache 다운
/$APACHE_HOME/bin/httpd -k stop
# apache 기동
/$APACHE_HOME/bin/httpd -k start
# tomcat 다운
./$CATALINA_HOME/bin/shutdown.sh
# tomcat 기동
./$CATALINA_HOME/bin/startup.sh
# 업그레이드 전후 모니터링 사항
1) 프로세스가 정상적으로 올라왔는지, 업그레이드 전후로 jvm option이 달라졌는지 확인
ps -ef | grep apache
ps -ef | grep tomcat
2) apache / tomcat 로그 확인
apache : Errorlog, CustomLog, JkLogFile에 지정한 경로의 로그 파일 확인(tail -f)
tomcat : catalina.out 등 logs 폴더 이하의 로그 파일 확인(tail -f)
참고자료
[weakdh - 안전한 TLS 알고리즘]
https://weakdh.org/sysadmin.html
[ssllabs - TLS 및 ciphers 관련 테스트]
https://www.ssllabs.com/ssltest/
[꿈꾸는 태태태의 공간 - apache 로드 밸런싱]
https://taetaetae.github.io/2019/08/04/apache-load-balancing/
[atl.kr - apache 보안취약점(logfile permission)]
https://www.atl.kr/dokuwiki/doku.php/apache_httpd_%EB%B3%B4%EC%95%88%EC%B7%A8%EC%95%BD%EC%A0%90_%EC%A0%90%EA%B2%80
[평범한개발자노트 - 톰캣 server.xml 설정]
https://cornswrold.tistory.com/347
[검색의 흐름 - Apache + Tomcat 로드밸런싱]
https://nakanara.tistory.com/136
[ptc.com - Tomcat에서 HSTS 활성화]
http://support.ptc.com/help/thingworx_hc/thingworx_8_hc/ko/index.html#page/ThingWorx/Help/Composer/Security/enabling_hsts_in_apache_tomcat.html