반응형

 

  • 구성 환경

  • OS : CentOS 7.7 1908
  • APP : apache-2.4.6 / tomcat-9.0.31 or 8.5.51 or 7.0.100 / openJDK-1.8.0.242.b08-0.el7_7.x86_64 / mod_jk tomcat-connectors-1.2.46
  • 구성 내용 : apache 서버, tomcat 서버 물리적 분리 후 mod_jk 연동 (SSL 연동 X)

 

  • Apache 설정

apache 서버에서 설정해야할 파일은 아래 이미지와 같이 httpd.conf에 작성되어 있는 JkWorkersFile 입니다.

 

workers.properties 파일에서 저는 아래와 같이 설정 하였습니다. 

worker1(192.168.0.10) , worker2(192.168.0.11) 두 서버를 이중화 해두었고, 각각의 worker에 임의의 키를 작성 했습니다.작성한 키는 자신의 마음대로 소문자,대문자,숫자,특수문자를 섞어서 사용해도 되며 worker1과 worker2의 secret key가 달라도 됩니다.

 

  • Tomcat 설정

Tomcat 설정은 server.xml 파일에 아래와 같이 사용하시면 됩니다. Tomcat 7.0.100, 8.5.51, 9.0.31 버전의 경우 secretRequired가 기본값으로 되어있으므로 따로 작성 안하셔도 되고, Apache 서버에서 적어뒀던 임의의 Key를 secret 속성에 작성, address는 Tomcat 서버 IP를 작성 해주시면 됩니다.

위에 언급한것보다 낮은 버전의 경우 requiredSecret 속성을 사용하셔서 True를 해주신 후 하셔야 할겁니다. (이하 버전의 경우 테스트는 직접 해보지 않았습니다)

 

  • 통신 확인

Apache와 Tomcat을 재시작 해주신 후 정상적으로 통신이 되는지 확인 합니다.

 

반응형
반응형

 

  • Apache 2.4.6 / Tomcat 9.0.31 설치

우선 아래 selinux를 해제 해주시고 firewalld 중지 시켜줍니다. (사용하실분은 정책 넣어주세요.)

# firewalld 중지
systemctl stop firewalld
systemctl disabled firewalld

# selinux 중지
setenforce 0

vi /etc/sysconfig/selinux
SELINUX=disabled

 

아래 코드를 입력하여 Apache 2.4.6 버전과 tomcat-connector를 설치 해줍니다.

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

# tomcat-connector 설치
wget http://apache.mirror.cdnetworks.com/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.46-src.tar.gz
tar zxvf tomcat-connectors-1.2.46-src.tar.gz
cd tomcat-connectors-1.2.46-src/native/
./configure --with-apxs=/bin/apxs
make
make install


## /usr/lib64/httpd/modules/mod_jk.so 파일이 존재하지 않을 경우 아래 내용 실행
cp -p mod_jk.so /usr/lib64/httpd/modules/mod_jk.so
chmod 755 /usr/lib64/httpd/modules/mod_jk.so

 

아래 코드를 입력하여 jdk와 tomcat 9.0.31 설치 해줍니다.

# JDK 설치
yum -y update
yum install java-1.8.0-openjdk-devel.x86_64

# JDK 환경 변수 설정
vi /etc/profile

# 맨 아래에 내용 작성
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.el7_7.x86_64
export JAVA_HOME
PATH=$PATH:$JAVA_HOME/bin
export PATH
:wq

# 설정 내용 적용
source /etc/profile


# 1.8.0 으로 재대로 출력 되는지 확인
java -version

# tomcat 9.0.31 설치
wget http://mirror.navercorp.com/apache/tomcat/tomcat-9/v9.0.31/bin/apache-tomcat-9.0.31.tar.gz
tar zxvf apache-tomcat-9.0.31.tar.gz
mv apache-tomcat-9.0.31 /usr/local/tomcat9

 

  • Apache-Tomcat 로드밸런싱 설정

  • 1. Apache 설정

아래 설정은 URL에 .jsp로 끝나는 모든것은 loadbalancer 를 사용하도록 합니다. loadbalancer는 사용자 임의로 정할 수 있습니다. (파일 경로 : /etc/httpd/conf/httpd.conf )

LoadModule jk_module /usr/lib64/httpd/modules/mod_jk.so

<IfModule jk_module>
   JkWorkersFile /etc/httpd/conf/workers.properties
   JkLogFile /var/log/httpd/mod_jk.log
   JkLogLevel info
   JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
   JkMount /*.jsp loadbalancer
</IfModule>

 

worker.list로 로드밸런싱을 사용할 tomcat을 묶어줍니다. 위의 /*.jsp 뒤에 사용한 이름을 작성해주어야 합니다.

host는 tomcat ip를 적고 port는 ajp를 사용할 포트를 정해 줍니다. 임의로 설정 가능 합니다.

lbfactor는 로드밸런싱을 얼마나 할지를 정하는데, 모두 1로 정하면 라운드로빈(roundrobin) 방식 으로 로드 밸런싱되며 각각의 톰캣별로 로드밸런싱할 비율을 정해줄 수 있습니다. (파일 경로 : /etc/httpd/conf/httpd.confworkers.properties )

worker.list=loadbalancer

worker.loadbalancer.type=lb
worker.loadbalancer.balanced_workers=worker1,worker2
worker.loadbalancer.sticky_session=1

worker.worker1.type=ajp13
worker.worker1.host=192.168.0.10
worker.worker1.port=8010
worker.worker1.lbfactor=1

worker.worker2.type=ajp13
worker.worker2.host=192.168.0.11
worker.worker2.port=9010
worker.worker2.lbfactor=1

 

이것으로 apache 설정은 모두 종료 되었으니 systemctl restart httpd 입력하여 옵션을 적용 시켜주세요.

 

  • 2. tomcat 설정

 vi /usr/local/tomcat9/conf/server.xml 후 아래와 같이 설정 해줍니다. 저의 경우 apache 에서 설정한대로 192.168.0.10은 8010, 192.168.0.11은 9010 포트를 사용해야하므로 각 서버에 맞게 포트를 할당 합니다.

또한 address="0.0.0.0" 와 SSL설정을 하지 않을것이므로 secretRequired="false" 을 넣었습니다. (tomcat 최신 버전에만 해당 합니다.)

 

이후 /usr/local/tomcat9/bin/startup.sh을 입력하여 톰캣 실행 후 http://[apache ip]/index.jsp 로 접근하여 로드 밸런싱을 확인 하시면 되고, 저는 apache 설정에서 tomcat 을 모두 lbfactor=1을 주었으므로 라운드로빈 방식으로 동작하게 되어 엔터를 한번 칠때마다 아래 이미지처럼 번갈아가며 출력 됩니다.

로드밸런싱 확인 시 각 서버별로 /usr/local/tomcat9/webapps/ROOT 디렉토리에 jsp 파일을 조금씩 다르게 설정하여 확인하시는게 편합니다. 

 

반응형
반응형

 

  • 구성 환경

이 글은 2020년 02월 11일에 릴리즈된 8.5.51 버전 및 9.0.36 버전을 대상으로 합니다. 그 이전 버전의 경우 설정 내용이 다르니 버전이 해당하시는 분들만 참고 해주세요.

  • OS : CentOS 7.7 1908
  • APP : apache-2.4.6 / tomcat-9.0.36 또는 8.5.51 / openJDK-1.8.0.242.b08-0.el7_7.x86_64 / modjk tomcat-connectors-1.2.48
  • 구성 내용 : apache 서버, tomcat 서버 물리적 망분리 후 mod_jk 연동 (SSL 사용 X)

 

  • selinux 및 firewalld 중지

이 글에선 테스트용으로 운영하기 때문에 firewalld와 selinux를 모두 중지 합니다. 실서버로 운영하실때엔 중지하지 마시고 직접 포트를 설정 해주세요. (apache 서버와 tomcat 서버 모두 중지 해주세요)

# firewalld 중지
systemctl stop firewalld
systemctl disable firewalld

# selinux 중지
setenforce 0

vi /etc/sysconfig/selinux
SELINUX=disabled

 

  • apache 서버 설치 및 설정

httpd 설치 내용

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

# tomcat-connector 설치
wget http://apache.mirror.cdnetworks.com/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.48-src.tar.gz
tar zxvf tomcat-connectors-1.2.48-src.tar.gz
cd tomcat-connectors-1.2.48-src/native/
./configure --with-apxs=/bin/apxs
make
make install


## /usr/lib64/httpd/modules/mod_jk.so 파일이 존재하지 않을 경우 아래 내용 실행
cp -p mod_jk.so /usr/lib64/httpd/modules/mod_jk.so
chmod 755 /usr/lib64/httpd/modules/mod_jk.so

 

httpd.conf 파일 설정 내용

vi /etc/httpd/conf/httpd.conf

# 대충 58번 라인 근처에 아래 내용 작성
LoadModule jk_module /usr/lib64/httpd/modules/mod_jk.so

# jsp 파일에 대해서만 tomcat에 요청하도록 합니다.
# 더 필요한 내용이 있을 경우 문법에 맞춰 작성 해주세요.
<IfModule jk_module>
	JkWorkersFile /etc/httpd/conf/workers.properties
	JkLogFile /var/log/httpd/mod_jk.log
	JkLogLevel info
	JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
	JkMount /*.jsp worker1
</IfModule>

 

workers.properties 설정 내용 (worker1은 위의 IfModule 안에 JkMount 에서 설정한 이름과 같게 설정 해주세요)

 vi /etc/httpd/conf/workers.properties

worker.list=worker1

worker.worker1.type=ajp13
worker.worker1.host=[톰캣 서버의 IP]
worker.worker1.port=8009

 

완료 후 systemctl restart httpd

 

  • tomcat 서버 설치 및 설정

JDK 설치 내용

# JDK 설치
yum -y update
yum install java-1.8.0-openjdk-devel.x86_64

# JDK 환경 변수 설정
vi /etc/profile

# 맨 아래에 내용 작성
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.el7_7.x86_64
export JAVA_HOME
PATH=$PATH:$JAVA_HOME/bin
export PATH
:wq

# 설정 내용 적용
source /etc/profile


# 1.8.0 으로 재대로 출력 되는지 확인
java -version

 

tomcat 설치 내용

# tomcat 9.0.36 설치
wget http://mirror.navercorp.com/apache/tomcat/tomcat-9/v9.0.36/bin/apache-tomcat-9.0.36.tar.gz
tar zxvf apache-tomcat-9.0.36.tar.gz
mv apache-tomcat-9.0.36 /usr/local/tomcat9


## 8.5.51 버전 설치하실분들은 아래 명령어 입력
wget http://mirror.navercorp.com/apache/tomcat/tomcat-8/v8.5.51/bin/apache-tomcat-8.5.51.tar.gz
tar zxvf apache-tomcat-8.5.51.tar.gz
mv apache-tomcat-8.5.51 /usr/local/tomcat8

 

이후 vi /usr/local/tomcat9/conf/server.xml 들어가서 아래 116~121 라인의 주석을 해제 합니다. (tomcat8 까신분들은 /usr/local/tomcat8/conf/server.xml)

 

주석을 풀었으면 아래와 같이 설정을 진행 합니다.

  • address : AJP 커넥터를 이용할 네트워크 IP 대역 허용 (0.0.0.0은 모든 IP 허용)
  • secretRequired : SSL 설정 안함

 

완료 후 /usr/local/tomcat9/bin/start.sh 입력하여 톰캣 실행 후 잘 되는지 테스트 합니다. apache 설정할 때 jsp 파일을 tomcat 서버로 지정하였다면 https://[웹서버 IP]/index.jsp 입력 후 톰캣 화면이 뜨면 재대로 연동 된 것입니다.

 

반응형
반응형

 

해당 내용은 Ghostcat(CVE-2020-1938) 취약점 패치에 의한 영향인것으로 보입니다.

Tomcat Ghostcat(CVE-2020-1938) 취약점 : https://nirsa.tistory.com/150

 

  • 구성 환경

  • OS : CentOS 7.7 1908
  • APP : apache-2.4.6 / tomcat-9.0.31 or 8.5.51 or 7.0.100 / openJDK-1.8.0.242.b08-0.el7_7.x86_64 / mod_jk tomcat-connectors-1.2.46
  • 구성 내용 : apache 서버, tomcat 서버 물리적 분리 후 mod_jk 연동 (SSL 연동 X)

 

  • 발생 원인

아래에 작성된 내용들은 apache 설정 및 selinux, F/W 등에 문제가 없을 경우에 해당 합니다.

2020년 02월 11일 톰캣에서 8.5.51 버전과 9.0.31 버전을 릴리즈하며 tomcat-apache 연동 설정을 기존대로 구성 시 연동 실패(무한로딩, 403에러 발생)가 발생 하며 AJP 기본값이 루프백 주소를 수신하도록 변경되어 수정해주지 않을 시 503 에러가 발생 합니다.

apache-tomcat 연동 시 변경된 주요 내용은 아래와 같습니다.

  • AJP Connector 기본 값 비활성화
  • AJP Connector 속성 address 추가 (기본값:루프백)
  • AJP Connector 속성 secretRequired 추가 (requiredSecret 에서 변경된걸로 보입니다)
  • AJP Connector 속성 allowedRequestAttributesPrattern 추가

 

  • 관련 자료

tomcat의 공식 커뮤니티 사이트 문서이며 원본 확인은 tomcat 공식 커뮤니티 사이트(https://tomcat.apache.org/index.html) 에서 확인 해주세요.

8.5.51 버전과 9.0.31 버전의 릴리즈 내용은 같으므로 8.5.51만 스크린샷 첨부 하겠으며, 속성에 대한 설명은 아래 링크를 참고 해주세요.

apache 8.5.51 : https://tomcat.apache.org/tomcat-8.5-doc/config/ajp.html

apache 9.0.31 : https://tomcat.apache.org/tomcat-9.0-doc/config/ajp.html

 

 

 

  • 1) 무한 로딩 해결 방법

이번에 릴리즈되면서 기본값으로 SSL을 사용하도록 설정되어있기 때문에 SSL을 사용하지 않는 환경에서는 무한 로딩이 발생 합니다.

${catalina-home}/conf/server.xml 파일의 AJP Connector 필드에 secretRequired="false" 를 입력 해주세요.

 

  • 2) 403 에러 해결 방법

secretRequired="false" 가 아닌 requiredSecret="false"를 입력했을 경우 발생할 수 있습니다. 2020년 02월 11일에 릴리즈된 8.5.51 버전과 9.0.31 버전은 secretRequired 속성으로 사용하여야 합니다.

 

  • 3) 503 에러 해결 방법

이번에 릴리즈되며 AJP가 기본값으로 루프백 주소를 사용하도록 되었습니다. address="0.0.0.0" 와 같이 네트워크 대역을 확인 후 추가 해주어야 합니다.

 

  • 최종 설정

저는 위의 1~3번을 모두 설정하여 최종적으로 무한 로딩, 403과 503 에러를 해결하고 정상적인 서비스를 확인할 수 있었습니다.

#  최종 설정 내용
    <Connector protocol="AJP/1.3"
               address="0.0.0.0"
               secretRequired="false"
               port="8009"
               redirectPort="8443" />

 

반응형

+ Recent posts