본문 바로가기
컴퓨터 활용(한글, 오피스 등)/50_2.운영체제_리눅스

centos7에 apache tomcat 설치

by 3604 2023. 10. 8.
728x90
System Engineering/Server(Web&WAS)

Server #1. centos7에 apache tomcat 설치

ZunoXI 2020. 4. 21.

목차

 

개요

centos7에 apache tomcat 설치

 

Tomcat Linux 설치

윈도우에 톰캣설치하는것은 매우 간단한데 리눅스는 ubuntu만 다뤄봐서 그런지 centos는 약간의 다름이 느껴진다. 이번 포스팅에는 centos7.5환경에 apache tomcat 9.x 버전의 설치를 다뤄본다.

 

 

 


 

1. tomcat 사이트 접속

 

 

톰캣 공식사이트에서 톰캣 9.0.35 버전의 링크를 복사한다.

https://tomcat.apache.org/download-90.cgi

(해당 페이지에서 core에 “apache-tomcat-9.0.35.tar.gz”에 오늘쪽 마우스를 눌러 링크를 복사한다.)

 

2. 의존성 주입

yum install -y wget

* 참고 : GNU Wget는웹서버로부터콘텐츠를가져오는컴퓨터프로그램으로, GNU프로젝트의일부.

 

 

3. 톰캣 설치 및 압축풀기

톰캣을 언패키징할 폴더로 이동하여 아래 명령어를 입력한다.

(아무곳에서나 다운로드 받아도 되나 원활한 환경변수 설정을 위해 /usr/local 에서 압축을 풀어준다)

 

(1) 다운로드 

wget http://mirror.navercorp.com/apache/tomcat/tomcat-9/v9.0.35/bin/apache-tomcat-9.0.35.tar.gz

 

 

 

 

(2) 압축풀기

다운로드 받은 위치에서 해당 파일의 압축을 풀어준다.

tar xvfz apache-tomcat-9.0.35.tar.gz

 

 

4. 톰캣 실행

쉘에 아래 명령어를 입력한다.

/usr/local/apache-tomcat-9.0.35/bin/startup.sh

 

 

이런식으로 진행되면 톰캣이 실행된것이다.

아파치 톰캣의 기본 connect port는 8080번이므로 호스트의 ip : 8080 포트로 접속했을때 위와 같은 고양이 화면이 나타나면 정상적으로 실행중이라 판단할 수 있다.

 

 

5. 자동실행등록 (서비스 등록)

매번 해당경로까지 이동해서 켜주기에는 번거롭기때문에 서버 실행 시 자동으로 실행될 수 있도록 서비스를 등록해 본다. 먼저 실행중이던 톰캣을 중지한다.

/usr/local/apache-tomcat-9.0.35/bin/catalina.sh stop

 

다음, 톰캣 서비스를 만들어주고 아래와 같이 입력한다.

vi /usr/lib/systemd/system/tomcat.service
[Unit]
Description=tomcat9
After=network.target syslog.target

[Service]
Type=forking

Environment=JAVA_HOME=/usr/local/victolee/jdk1.8
User=root
Group=root

ExecStart=/usr/local/apache-tomcat-9.0.35/bin/startup.sh
ExecStop=/usr/local/apache-tomcat-9.0.35/bin/shutdown.sh

UMask=0007
RestartSec=10
Restart=always



SuccessExitStatus=143


[Install]
WantedBy=multi-user.target

 

이제 다음 일련의 과정을 진행하면 톰캣이 서버 재부팅시에도 정상적으로 작용되는것을 볼 수 있다.

systemctl enable tomcat.service systemctl start tomcat.service reboot ps -ef | grep tomcat

 

다음과 같이 출력되면 서비스 자동 실행도 완료 된것이다.

 

 


해당 포스팅은 다음 블로그에서 이전했습니다.

zunoxi.github.io/infra/2020/04/21/infra-linux-installTomcat/

System Engineering/Server(Web&WAS)

Server #2. CentOS7 tomcat 다중서버 구동하기

ZunoXI 2020. 5. 13.

개요

Centos7tomcat 다중서버 구동하기

 

다중 Was 구성

서버를 관리하다보면 하나의 서버에 로드밸런싱 구현이나 여러개의 서비스를 제공하기 위해 톰캣을 다중으로 구동하여 사용해야할 경우가 있다. 이런 다중 톰캣을 띄워야 하는 경우에서의 환경설정을 알아보자.

 

* 참고 : CentOS7.5, Java 1.8, Apache Tomact 9.0.35 버전 환경에서 테스트한 포스팅이다.

 

 


 

 

1. tomcat 설치

필자는 톰캣 9.x대 버전을 설치했다. 톰캣 공식사이트에서 톰캣 9.0.35 버전의 링크를 복사한다.

https://tomcat.apache.org/download-90.cgi

(해당 페이지에서 core에 “apache-tomcat-9.0.35.tar.gz”에 오늘쪽 마우스를 눌러 링크를 복사한다.)

2. 의존성 주입

yum install -y wget

* 참고 : GNU Wget는 웹 서버로부터 콘텐츠를 가져오는 컴퓨터프로그램으로, GNU 프로젝트의 일부.

 

 

3. 톰캣 설치 및 압축풀기

톰캣을 언패키징할 폴더로 이동하여 아래 명령어를 입력한다.

wget http://mirror.navercorp.com/apache/tomcat/tomcat-9/v9.0.35/bin/apache-tomcat-9.0.35.tar.gz

다음, 두개의 톰캣 폴더를 만든다. first, second로 나누어 만들었다.

각 폴더에 압축파일을 복사 또는 이동하여 톰캣 파일 압축을 풀어준다.

tar xvzf apache-tomcat-9.0.35.tar.gz

원래 톰캣 하나만 설치하는경우는 여기서 환경변수를 설정해줘야 하나 우리는 두개 이상 설치 할 것이기 때문에 이후에 설정할 예정

 

 

4. catalina.sh 설정

apache-tomcat-9.0.35/bin 폴더 이동

vi catalina.sh

드래그되어있는 부분을 각자 경로에 맞게 수정한다.(톰캣이 설치되어있는 root 경로라고 이해할 수 있다.

 

두번째 폴더에 있는 톰캣의 catalina.sh도 해당경로에 맞게 수정해준다.

 

 

5. server.xml 설정

우리는 두개의 서버를 띄워야 하기때문에 기본서버의 포트번호를 변경해 줘야한다.

첫번째서버는 그대로 진행해도 될것이고, 두번째 서버는 아래 그림의 음영처리 된부분을

순서대로8105, 8180, 8109로 변경 할 것이다.

일반적으로 8005는 서버포트, 8009는 ajp 1.3 port, 8080은 Connector port 이다.

* 참고 : AJP 프로토콜은 웹서버에서 받은요청을 WAS로 전달해주는 프로토콜이다.

6. Tomcat 실행

톰캣의 bin폴더에 있는 startup.sh를 실행시킨다. (아래 명령어 입력)

/u01/test/first/apache-tomcat-9.0.35/bin/startup.sh

 

두번째 톰캣이 위치한곳에서도 경로를 바꿔주고 실행시킨다.

이런식으로 둘다 각자 환경변수 지정된 곳에서 잘 나오면 성공한것이다.

 

이제 다음 두가지 방법으로 정상적으로 포트가 개방되었는지 확인해보자.

 

 

(1) 개방된 포트 확인

netstat -nltp

우리가 지정했던 포트들이 잘 개방되어 있는것을 알수 있다.

 

 

(2) 브라우저에서 확인

 

브라우저 주소창에서 확인해보자.

이렇게 정상적으로 두개의 톰캣이 서로 다른 포트에서 돌아가고 있는것을 확인할 수 있다.

 

다중톰캣 설정 끄읏

 

(자동실행을 추가로 설정하고 싶다면 아래의 블로그를 참조)

https://idchowto.com/?p=51853

System Engineering/Server(Web&WAS)

Server #3. Centos7 아파치(웹서버)와 Tomcat(WAS) 연동하기

ZunoXI 2020. 5. 21.

목차

개요

Centos7Apache(Webserver)와 Tomcat(WAS) 연동하기

 

Webserver with WAS

우리가 일반적으로 웹화면을 구성할때 정적인 html, css를 처리하는 기능은웹서버만으로도 구현이 가능하다. 단, 비지니스 로직을 수행해야 하는 동적 페이지를 처리시에는WAS(Web ApplicationServer)라는것이 필요하다.

 

이 WAS라는것이 단독으로도 정적, 동적페이지 모두를 구현을 할 수 있으나 과도한 부하가 발생할 수 있어서 부하분산이 필요하다. 이와 별개로, 8080포트에는(WAS의 포트)에는방화벽을 설정하여 어플리케이션 로직에 직접적 접근을 방지 하는 등, 여러가지 이유로web server와 WAS를 연동하여 동시에 운영하는것이 합리적인 방법으로 여겨진다.

 

 

 


 

웹 서버와 WAS(Web Application Server)

 

웹 서버는 정적인 컨텐츠( html, css, js )를 제공하는 서버이다. (ex) Apache, Nginx)  반면, WAS는 웹서버의 정적 자원처리 역할뿐만아니라 DB 조회 혹은 비지니스 로직을 처리하는동적 컨텐츠도 구동이 가능한 서버이다. 일반적인 구조는웹서버가 앞단에와서 서버 혹은 도메인으로 넘어온 요청을 연동된 WAS 포트로(웹서버와 WAS가 같은 서버에 있는경우) 넘겨주게 구성되어있다.

 

 

이둘을 연동하는 이유가 뭘까. 좀더 자세히 알아보자면, 물론 WAS에도 웹서버의 기능이 있지만 종래의 WAS는 독립적인 웹서버보다 느린 처리속도를 갖고있었고, 이렇게 때문에 WAS로만 서비스할 경우 느린처리속도로 인한 서비스의 품질이 저하될 수 있다.

 

최근의 WAS들은 웹서버못지않게 속도향상이 되었으나 여전히 보안(포트개방)적인 문제나 웹서버에서만 설정할 수 있는부분들이 있기때문에 웹서버와 WAS를 연동하여 사용한다. 필자가 생각하는 대표적인 웹서버의 장점은 가상호스트(virtualhost)를 이용한 멀티도메인 설정이 간편하고, 사내에 APP서버가 위치하지만 보안상 서버를 외부에 노출할 수 없는경우 웹서버만 DMZ에 별도 분리함으로써 서비스만 외부 접근을 가능하게 하는 방법이 있다.

 

 

대표적인 상용 WAS

 

 

 

위와 같은 이유로 정적인 콘텐츠들은 WAS까지 가지않고 웹서버단에서 처리함으로 서비스의 속도를 높여 품질을 향상시킬 수 있다. 보통 아파치(웹서버)와 톰캣을 예로들어 웹서버와 WAS 연동 시 동작되는 방식은 다음과 같다.

 

1. 서비스를 사용하는 유저가 브라우저를 통해 아파치 웹서버에 요청

2. 아파치 웹서버는 이 요청이 톰캣에서 처리해야하는 요청인지 확인

3. 톰캣에서 처리해야하는 경우 톰캣의 AJP포트에 접속하여 요청건 전달

4. 톰캣은 웹서버로부터 요청을 전달받아 처리 후 다시 웹서버에 전달

5. 아파치 웹서버는 결과값을 사용자에게 전달

 

 

 

참고로 아파치와 아파치톰캣은 전혀다르다. 우리가 일반적으로 많이 듣게되는아파치는 Apache foundation에서 만든Apache Webserver이고,톰캣은 마찬가지로 Apache 재단에서 만든Apache Tomcat(WAS)이다. 필자는 처음에 이런 미들웨어들을 운영하며 헷갈렸던 기억이난다.

 

 

 

국산 상용 WAS JEUS

 

 

 

웹 서버와 WAS 연동

 

1. 웹서버 설치

필자의 작업환경에서의 주 언어는 JAVA이므로 WAS는 오픈소스인 아파치 톰캣을 사용한다. (사용 환경 : CentOS 7.5, Apache web server(httpd) 2.4.6, Tomcat 9.0.8)

 

CentOS환경에서는 apache가httpd(http 웹서버)로 명칭된다. (ubuntu에서는 apache라는 이름으로 사용) 여기서, httpd는 http웹서버를 구동할 수 있는 데몬이다.

 

해당 httpd 패키지를 먼저 설치한다. (설치 되어있는경우는 패스)

yum update 

yum install -y httpd 

httpd -version # 정상 설치 여부 확인

 

 

 

 

2. Tomcat 설치

 

필자가 설치한 최초 아파치버전은 2.4.6과 톰캣 9.0.35 버전이랑은 계속 ajp 통신오류가 났다.(원인미상..)

 

그래서 아래 포스팅을 참고하되 9버전대를 설치한다면9.0.8 버전으로 설치를 추천한다.

https://zunoxi.tistory.com/41

 

Server #1. centos7에 apache tomcat 설치

해당 포스팅은 다음 블로그에서 이전했습니다. zunoxi.github.io/infra/2020/04/21/infra-linux-installTomcat/ Server 1. centos7에 apache tomcat 설치 개요 centos7에 apache tomcat 설치 zunoxi.github.io 개..

zunoxi.tistory.com

 

 

3. tomcat-connector(mod_jk) 설치

 

web-server와 tomcat을 연동시키기 위해tomcat-connector를 설치해준다.

 

 

(1) 의존성 주입

wget -c http://mirror.navercorp.com/apache/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.46-src.tar.gz

 

(2) 압축 풀기 및 폴더 이동

tar xvf tomcat-connectors-1.2.46-src.tar.gz

mv tomcat-connectors-1.2.46-src/ /usr/local/src

cd /usr/local/src/tomcat-connectors-1.2.46-src/native/

 

(3) 빌드

빌드 전 먼저 해당 유틸들이 설치 되어있는지 확인

yum -y install gcc gcc-c++ httpd-devel

 

이제 빌드를 해본다. (위치는 cd /usr/local/src/tomcat-connectors-1.2.46-src/native/)

 

./buildconf.sh

 

 

./configure --with-apxs=/usr/bin/apxs

 

 

make make install

 

(4) mod_jk 파일 

ls /etc/httpd/modules/ | grep mod_jk

 

 

4. 기타 설정 파일 수정

 

(1) httpd.conf 파일 수정

vi /etc/httpd/conf/httpd.conf

 

httpd.conf파일 안에 다음 내용을 추가 (가상호스트 추가)

 

<VirtualHost *:80>
    DocumentRoot "/u01/zunoxi"  # 기본페이지 루트
    ServerName zuno.com # 도메인 지정
    ErrorLog "logs/zuno.com-error.log"
    CustomLog "logs/zuno.com-access.log" common
    JkMount /* tomcat # 해당 포트 혹은 도메인으로 요청이 들어왔을때 연결할 톰캣 마운트
</VirtualHost>

 

이때가상호스트(VirtualHost)설정 및ServerName을 별도 설정하면 경우는 하나의 서버에서 여러개의 톰캣을 구동시킬 시, 포트번호가아닌 도메인 네임으로 각 톰캣에 접근 할 수 있게하는 기능을 한다.

 

또한, 여기서 JkMount /* 라는 설정은 웹서버로 들어오는 url의 요청을 WAS에게 전달하겠다는 의미이다. 이렇게 설정을 하면 정적인콘텐츠와 동적인 콘텐츠를 나눠서 부하분산을 시키는 의미가 없어질 수 있어 잘 고려해서 설정해야한다.

 

 

해당 파일에 아래의 내용도 추가 (주석처리 되어있다면 주석해제)

LoadModule jk_module modules/mod_jk.so

 

(2) workers.properties 파일 수정

vi /etc/httpd/conf/workers.properties

 

위 httpd.conf 파일의 가상호스트 설정에JkMount/* tomcat 부분에서 tomcat이라는 이름으로 마운트 설정을 했기에 workers.properties에는 위 처럼 설정해주면 된다.

 

8009 포트설정은 웹서버에서Ajp 통신포트로 8009로 연결되어 요청을 톰캣으로 보내주는 역할을 한다.

 

 

(3) mod_jk.conf 파일 수정

vi /etc/httpd/conf.modules.d/mod_jk.conf

(파일이 없을수도 있다. 그냥 만들면 된다)

 

<IfModule jk_module>
    JkWorkersFile conf.d/workers.properties  # workers.properties를 읽어 들이겠다는 뜻 
    JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
    JkLogFile logs/mod_jk.log
    JkLogLevel info
    JkShmFile run/mod_jk.shm
</IfModule>

 

※ 해당과정에서 처음에는 아래와 같은 에러가 났다.

 

\[Tue May 19 16:09:13.388 2020\] \[20094:140649420454016\] \[error\] extension\_fix::jk\_uri\_worker\_map.c (580): Could not find worker with name 'tomcat' in uri map post processing.

\[Tue May 19 16:09:13.416 2020\] \[20094:140649420454016\] \[info\] init\_jk::mod\_jk.c (3591): mod\_jk/1.2.46 initialized

\[Tue May 19 16:09:13.416 2020\] \[20094:140649420454016\] \[error\] extension\_fix::jk\_uri\_worker\_map.c (580): Could not find worker with name 'tomcat' in uri map post processing.

\[Tue May 19 16:09:27.945 2020\] \[20098:140649420454016\] \[info\] jk\_handler::mod\_jk.c (2999): Could not find a worker for worker name=tomcat

\[Tue May 19 16:09:28.282 2020\] \[20096:140649420454016\] \[info\] jk\_handler::mod\_jk.c (2999): Could not find a worker for worker name=tomcat

 

이는 mod_jk.conf에 최초 설정시

 

<IfModule mod_jk.c>

JkWorkersFile conf/workers.properties

JkShmFile run/mod_jk.shm

JkLogFile logs/mod_jk.log

JkLogLevel info

JkLogStampFormat “[%y %m %d %H:%M:%S] “

<IfMoudule mod_jk.c>

라고 설정했기 때문이다….<IfModule jk_module> 라고 설정하는 것이 맞다.

 

 

5. httpd 재기동 및 정상 접속 확인

 

systemctl stop httpd.service 

systemctl start httpd.service

여기서 정상적으로 연결되고 이런식으로 ip(포트번호 없이) 혹은 domain으로 접속했을때, 톰캣의 웹페이지로 바로 접속이 된다면 성공이다. 필자는 호스트에 도메인을 지정해놔서 도메인으로 들어가는것으로 확인했다.

 

참고 : C:\Windows\System32\drivers\etc 에 hosts 파일에 특정 ip의 도메인을 등록하고 테스트해 볼 수있다.

 

 

위 사진 처럼 웹서버와 WAS가 정상적으로 연동되어 있는것을 알수 있다.

 

★ 다음 포스팅에서는 SSL 인증으로 HTTPS 보안서버를 구축해볼 예정 :)

System Engineering/Server(Web&WAS)

Server #4. Tomcat log에 대한 이해와 분리 방법

ZunoXI 2020. 7. 6.

개요

Tomcat의 catalina.out 로그를 시간별로 분리하여 효율적인 로그관리를 해보기

 

Log Handling

톰캣 로그의 종류 중 보통 catalina.out에 중요 로그파일이 모두 적재되는것을 알 수 있다. 이 catalina.out이 너무 커지면 몇만, 몇십만 이상의 문장이 적재되어 로그분석이 힘들 수 있고, 경우에 따라 100기가가 넘어가면 톰캣이 중지된다는 사례도 있다.

 

따라서 보기 좋게, 혹은 안정성을 위해 날짜별로 쪼개고 그 날짜가 오래된것은 지우는 과정이 필요하다.

 

 


 

tomcat 로그 종류

(1). catalina.out : 서버상에서 발생한 모든 내용(서버의 기동,정지,개시 등)을 기록한 파일이다.

그렇기 때문에 생기는 로그의 양이 방대하다. 날짜별, 혹은 시간별로 로그를 분리하는것은 일반적으로 catalina.out에 사용한다.

 

(2). catalina.yyyy-mm-dd.log : 톰캣에서 생기는 로그만을 기록한다. Standard output(표준 스트림), Standard error(표준에러)의 로깅은 제외

 

(3). host-manager.log : Tomcat Host Manager Web app 로그 (가상호스트 매니저)

 

(4). manager.log : Tomcat Manager Web App 로그 (웹콘솔)

 

(5). localhost.log : host(특정 가상호스트 대상)한정 로그



여기서 부터 설명할 필자가 알고있고, 또는 적용해본 로그 처리 방법은 2가지이다

 

 

(1) crontab을 사용하는 경우

 

로그를 봐야하는 사용자 혹은 개발자가 tail -f catalina.out 으로 실시간 확인이 필요한경우 지난날짜 파일을 날짜라벨링을해주고 분리 후, catalina.out 파일의 내용을 비워준다.

 

 

1. 실행파일 생성

 

cronLog.sh 생성

=> 파일명은 예시, 해당 파일에내에 아래와같이 설정한다.

$ cp /Tomcat 홈 경로/logs/catalina.out /Tomcat 홈 경로/logs/catalina.out.$(date +\%y-\%m-\%d).log 2>&1

=> 지금시간의 년, 월, 일로 복사한다.

 

$ cat /dev/null > /Tomcat 홈 경로/logs/catalina.out

=> 기존의 catalina.out 파일은 비워준다.

 

$ find /Tomcat 홈 경로/logs -mtime +90 -name catalina* -exec rm {} \;

=> catalina로 시작하는 파일중 생성일자가 90일 이후인 파일삭제

 

위와 같은 방법으로 localhost, host-manager, manager도 일정기간이 지나면 삭제되게 설정

 

 

 

2. 실행파일 권한 부여

 

$ chmod 755 cronLog.sh

=> 읽기, 쓰기, 실행 권한을 부여함으로써 크론탭에서 실행 할 수 있게 설정

 

 

3. 크론탭 등록

 

$ crontab -e
59 23 * * * /Tomcat 홈 경로/logs/cronLog.sh

=> crontab에 위내용을 추가, 매일 23시 59분에 해당 실행파일을 동작시키겠다는 뜻

 

 

 

(2) rotatelogs를 사용하는 경우

 

해당방법은 하루단위로 나눠도 2~3GB에 달하는 로그를 더 잘게 쪼개기위해 사용했다. 사실 이 부분 역시 crontab을 사용해도 시간단위로 로그를 쪼갤 수 있다.

 

단, 해당 서버에 접근 하지 않을때의 로그까지 쪼개서 하루 24개의 로그를 만들 필요는 없다고 판단하여 Tomcat 폴더/bin/catalina.sh 파일상에서 조금의 수정을 해줬다.

 

 

1. catalina.sh 수정

 

vi /Tomcat 홈 경로/bin/catalina.sh

 

 

/touch     # touch가 포함된 문자열 검색

 

#touch "$CATALINA_OUT"
  if [ "$1" = "-security" ] ; then
    if [ $have_tty -eq 1 ]; then
      echo "Using Security Manager"
    fi
    shift
    eval $_NOHUP "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
      -D$ENDORSED_PROP="\"$JAVA_ENDORSED_DIRS\"" \
      -classpath "\"$CLASSPATH\"" \
      -Djava.security.manager \
      -Djava.security.policy=="\"$CATALINA_BASE/conf/catalina.policy\"" \
      -Dcatalina.base="\"$CATALINA_BASE\"" \
      -Dcatalina.home="\"$CATALINA_HOME\"" \
      -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
      org.apache.catalina.startup.Bootstrap "$@" start 2>&1 \
      |/usr/sbin/rotatelogs "$CATALINA_BASE"/logs/catalina.out.%Y.%m.%d.%H.log 3600 540 &
 
 
  else
    eval $_NOHUP "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
      -D$ENDORSED_PROP="\"$JAVA_ENDORSED_DIRS\"" \
      -classpath "\"$CLASSPATH\"" \
      -Dcatalina.base="\"$CATALINA_BASE\"" \
      -Dcatalina.home="\"$CATALINA_HOME\"" \
      -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
      org.apache.catalina.startup.Bootstrap "$@" start 2>&1 \
      |/usr/sbin/rotatelogs "$CATALINA_BASE"/logs/catalina.out.%Y.%m.%d.%H.log 3600 540 &

 

=> 위 코드처럼 수정한다.

 

특히 |/usr/sbin/rotatelogs "$CATALINA_BASE"/logs/catalina.out.%Y.%m.%d.%H.log 3600 540 & 이부분이 중요하다. 3600은 초단위로써 1시간단위로 파일을 만들어낸다는 뜻이며 540은 국제표준시간에서 한국시간만큼(9시간)을 더한 시간이다.

 

 

2. WAS 재기동

 

이와같이 설정 후 WAS를 재기동하여 서버에 접속하게되면 해당날짜의 24시간형식으로 시간별 로그가 남게된다.

 

 

마무리

이외에도 로그를 날짜별, 시간별로 수정할 수 있는방법은 많다. 사실 시간별 분리 이외에도 용량별로 나누는방법도 분명히 사용할 일이 있을텐데, 아직까지는 실력이 부족해서인지 적용해보지 못했다.

 

lograte를 사용하면 된다고하는데 내가 원하는데로 100메가 이상되면 알아서 분리되는게 잘 안된다. 이부분은 여러가지로 다시 테스트 해봐야할 것같다.

 

참조글

  • http://www.chlux.co.kr/bbs/board.php?bo_table=board02&wr_id=11
  • https://cassandra.tistory.com/5
    System Engineering/Server(Web&WAS)

    Server #5. IBM HTTP Server(IHS) TLS 프로토콜 설정

    ZunoXI 2021. 5. 26.

     

     

    개요

    IBM HTTP Server(IHS) TLS 프로토콜 설정하기

    IBM IHS

    IBM이 제공하는 메인프레임 서버 중 AIX UNIX계열의 서버는 일반적으로 웹서버 구동 시, 일반 리눅스에서 사용하는 Apache와 유사한 성능을 보유한 IBM HTTP Server(이하 IHS)를 사용한다. 대부분의 웹서버가 그러하듯 HTTPS 통신에서 취약한 TLS Protocol을 오픈하는 것은 보안상의 위협이 되기 때문에 반드시 Disable 시킬 필요가 있다. 이번 포스팅은 관련 IHS에서의  특정 protocol을 Disable 하는 방법에 대해 기술한다.

     

     


     

     

    IHS(IBM HTTPS Server)

     

    먼저, IHS는 서두에서 언급했듯이 IBM 서버(AIX OS)에서 구동이 가능한 웹서버이다. WebSphere의 관리 콘솔을 지원하며 IBM unix인 AIX는 물론 Linux, Windows NT 서버에서도 동작한다. Apache 웹서버와 기능이 유사한 이유는 Apache Sotware Foundation의 HTTP 서버를 기반으로 하기 때문이며 IBM에 별도 지불없이 무료로 사용 가능하다. 

     

    일반적으로 IHS는 IBM의 Application Server인 WebSphere와 함께 사용되지만 필자의 업무환경은 IHS와 BEA의 WebLogic 조합으로 사용중인 것을 참고하면 좋을 것 같다.

     

     

    IBM HTTP Server와 Apache HTTP Server

    https://www.ibm.com/docs/ko/ibm-http-server/8.5.5?topic=overview-key-differences-from-apache-http-server 

     

     

     

    취약 프로토콜

     

    먼저 SSL(Secure Socket Layers)은 Netscape에 의해 개발되었으며 네트워크를 통해 작동하는 서버, 시스템 및 응용프로그램간에 인증 및 데이터 암호화를 제공하는 인터넷 암호화 프로토콜이다. 현재는 SSL 2.0 및 3.0 모두 IETF에 의해 사용이 중지되어있고 Chrome, IE, Edge 등의 브라우저가 TLS 1.0, TLS 1.1 암호화 프로토콜 통신을 중단 혹은 예정이다. 따라서 SSL 2.0, SSL 3.0, TLS 1.0, TLS 1.1은 현재 취약버전 프로토콜로 웹서버단에서 차단 조치하는 것을 권장한다.

     

    SSL관련 더욱 상세한 정보는 아래 블로그 포스팅을 참고하면 좋을 것 같다.

     

    https://zunoxi.github.io/infra/2020/06/24/infra-secure-tls_ssl/

     

    Secure 1. TLS와 SSL에 대한 이해

    개요 TLS와 SSL에 대한 정의와 그차이 목차 SSL이란? TLS이란? SSL과 TLS 인증서와 프로토콜 SSL 먼저 SSL(Secure Socket Layers)은 Netscape에 의해 개발되었으며 네트워크를 통해 작동하는 서버, 시스템 및 응용

    zunoxi.github.io

     

     

     

     

    취약 프로토콜 차단

     

    1. 설정파일 접근

     

    $ vi {IHS 경로}/conf/httpd.conf

     

    2. SSLProtocalDiasable 설정

     

    일반적으로 여러개의 도메인을 쓰고 있는 경우 virtualhost를 별도 이용하고 있을 텐데, 해당 경우에는 해당하는 virtualhost에 설정해주면 된다. 기존 httpd.conf에 대한 백업은 필수이며 해당 파일의 SSLProtocalDisable 항목을 추가한다.

     

    SSLProtocolDisable SSLv2 SSLv3 TLSv10 TLSv11

     

    3. IHS 서버 재부팅 및 확인

     

    먼저 IHS의 httpd.conf 파일을 수정했지만 현재 구동중인 IHS에는 미반영된 상태이다. 따라서 IHS를 재부팅하기 전 인터넷 옵션(Internet Explore기준) > 고급 메뉴에서 TLS 1.0, 1.1 사용만 체크하고 TLS 1.2 이상은 미사용하도록 조치한 뒤에 재부팅하는 것을 추천한다. 해당 방법을 사용하면 실제 웹서버가 "TLS 1.2로 통신을 하고 있는지? TLS 1.0과 1.1을 차단한 경우 브라우저에서 접근 시 접근되지 않는지?"를 확인할 수 있다.

     

    이제 정상 적용되었는지 확인을 위해 IHS를 아래와 같이 재부팅한다.

    $ {IHS 경로}/bin/apachectl stop
    $ {IHS 경로}/bin/apachectl start

     

    필자의 경우는 TLS 1.2 체크해제 후 위 설정대로 웹서버에 설정한 상태로 재부팅하니 웹페이지 접속이 불가한 것을 확인했으며, 취약점 보안조치가 정상적으로 되었음을 판단했다.

     

     

     

     

     

     

     

     

System Engineering/Server(Web&WAS)

Server #6. Apache ServerTokens 설정

ZunoXI 2022. 9. 28.

목차

개요

 

이번 포스팅에서는 Apache 웹서버 운영 시 취약점으로 지적받을 수 있는 ServerTokens에 대해 기술하려 한다. 최근 사내 모의해킹 취약점 건으로 특정 서비스의 도메인으로 curl --head url 명령어 입력 시 운영중인 Apache 웹서버의 정보, 서버 OS 정보가 표기되는 것이 지적되었다. 평소 별생각 없이 운영했었는데, 외부에서 이 정보를 탈취했을 시 악의적으로 이용할 수 있을 것이라는 것에 경각심이 들어 보안조치를 시작했다. 

 

 

 


 

 

정보 노출

 

서비스 중인 url에 curl 명령어로 head 값을 조회했을 때 ServerTokens에 대한 별도 설정이 없다면 아래와 같이 표시된다.

 

 

위에 표시된 것처럼 "Server" 부분에 현재 서비스 중인 apache 웹서버에 대한 버전 정보, OS 정보, 모듈 정보 등이 표시된다. 이 내용은 악의적으로 활용될 시 서버의 중요 정보를 제공해주는 요인이 되므로 보안 취약점에 해당된다고 할 수 있다. 

 

 

 


 

 

설정

 

 

 

ServerTokens의 설정을 어떻게 하느냐에 따라 서버 정보를 표시하는 정도가 달라진다. ServerTokens 설정 값은 Full, OS, Minimal, Minor, Major, Prod로 분류되며, 이 중 별도 설정하지 않았다면 OS가 default 값으로 들어가고, 보안 취약점 조치를 위해서는 Prod로 설정하는 것이 권장된다. 분류별 상세 내용은 아래와 같다.

 

 

Prod : Apache 표시

Major : Apache 2 표시

Minor : Apache 2.4 표시

Min : Apache 2.4.6 표시

OS : Apache 2.4.6 (centOS) 표시

Full : 모든 웹서버, OS 서버, 모듈 등 정보 표시

 

 

필자의 웹서버 환경은 linux로 리눅스 환경에서 아래와 같이 ServerTokens에 대한 설정을 Prod로 설정했다. 또한, 설정하는 김에 ServerSignature도 함께 설정했는데,  ServerSignature는 브라우저에 웹서버가 페이지를 만들어야 하는 경우(일반적으로 에러 페이지 같은 것)에 웹서버 정보를 얼마나 노출시킬까에 대한 설정으로 함께 OFF 설정하는것이 보안상 좋다. On으로 설정되어있다면 서버 버전 출력한다.

 

 

 

 

위 설정 시 중요한 것은 일반적인 경우 /etc/httpd/conf/httpd.conf 파일에 옵션을 주지만 webserver root 디렉터리에서 반드시 "grep -r ServerTokens ." 명령어를 입력하여 이미 설정된 conf 파일이 없는지 확인하여 겹치지 않게 하는 것이 필요하다.

 

 

 

 

설정을 완료 및 웹서버 재기동 시 아래와 같이 출력되면 정상적으로 적용되었다고 할 수 있다.

 

 
 
 

출처: Server #6. Apache ServerTokens 설정 (tistory.com)

728x90