Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 3 Next »


랜섬웨어 2차 피해 예방 및 보안 강화를 위해 3Rabbitz 서버(docs.mantech.co.kr)를 새로 구축합니다.

이 문서에서 모든 작업(명령)은 root 계정을 전제하지만, 불가할 경우 sudo를 사용하여 진행하십시오.

VM 정보

항목

내용

위치

vcenterdev.mantech.co.kr > docs.mantech.co.kr

CPU

4 Core

Memory

8GB

HDD

1(시스템): 80GB, 2(3rabbitz): 40GB, 3(백업): 40GB

백업

 기존 서버 OVF 및 3rabbitz 관련 데이터 백업

로컬 PC에 기존 VM(서버)의 OVF 및 3rabbitz 관련 데이터 백업

  1. OVF 파일 내보내기

  2. /3rabbitz(설치 파일), /3rabbitzbackup(백업), /home/tomcat(derby DB) 디렉터리를 로컬 PC에 백업

OS 준비 및 사전 작업

 Ubuntu 20.04, openjdk 17 설치, 볼륨 등 사전 작업

Ubuntu 20.04 설치

/wiki/spaces/VM/pages/3325689934을 참고하여 Ubuntu 20.04가 설치된 VM을 생성합니다.

사전 작업

openjdk 17.0.3 설치(15.0.1 GA 버전 이상 권장)

자바가 없거나, 오라클 자바 8.0 미만 또는 오픈 JDK 15.0.1 버전 미만이면 자바를 설치합니다.

# Java 설치 여부 및 버전 확인
java -version

# 기존 openjdk-11 제거(없으면 생략)
apt-get remove openjdk*
apt-get autoremove --purge
apt-get autoclean

# openjdk-17 설치
apt-get install openjdk-17-jdk

3rabbitz 설치 볼륨 및 백업 볼륨 준비

다음 명령어를 실행하여 3rabbitz 운영 파일 저장용 볼륨과 백업용 볼륨을 준비합니다.

# 3rabbitz 설치 볼륨
mkdir /3rabbitz
echo -e "\nn\np\n1\n\n\nt\n8e\nw" | fdisk /dev/sdb
vgcreate 3rabbitzvg /dev/sdb1
lvcreate -l +100%FREE -n 3rabbitzlv 3rabbitzvg
mkfs -t xfs /dev/mapper/3rabbitzvg-3rabbitzlv

# 3rabbitz 백업 볼륨
mkdir /3rabbitzbackup
echo -e "\nn\np\n1\n\n\nt\n8e\nw" | fdisk /dev/sdc
vgcreate 3rabbitzbackupvg /dev/sdc1
lvcreate -l +100%FREE -n 3rabbitzbackuplv 3rabbitzbackupvg
mkfs -t xfs /dev/mapper/3rabbitzbackupvg-3rabbitzbackuplv

# /etc/fstab 추가 및 마운트
grep "3rabbitzvg-3rabbitzlv" /etc/fstab > /dev/null
if [ $? -ne 0 ]
then
	echo "/dev/mapper/3rabbitzvg-3rabbitzlv /3rabbitz xfs defaults 0 0" >> /etc/fstab
fi

grep "3rabbitzbackupvg-3rabbitzbackuplv" /etc/fstab > /dev/null
if [ $? -ne 0 ]
then
	echo "/dev/mapper/3rabbitzbackupvg-3rabbitzbackuplv /3rabbitzbackup xfs defaults 0 0" >> /etc/fstab
fi

mount /3rabbitz
mount /3rabbitzbackup

/etc/profile 수정

sed -i 's/HISTSIZE=1000/HISTSIZE=100000/' /etc/profile
echo "" >> /etc/profile
echo "HISTTIMEFORMAT=\"%Y-%m-%d_%H:%M:%S \"" >> /etc/profile
echo "export HISTTIMEFORMAT" >> /etc/profile

3rabbitz 설치

기존 서버에서 3rabbitz 파일을 제어하기 전에 3rabbitz 서비스를 중지하십시오.

Case 1) 서버 변경 시 확인 표시 컴퓨터 아이콘 확인란, 기타, 각도, 사각형 png thumbnail

참고 링크: 3rabbitz 서버 옮기기

서버(VM)만 번경할 경우 별도의 설치 과정 없이, scp와 같은 명령을 통해 아래 3rabbitz 관련 디렉터리를 통째로 복사합니다.

# 예시) 기존 서버의 /3rabbitz/를 새 서버의 /로 복사
scp -r mdrm@docs.mantech.co.kr:/3rabbitz/ /
  • /3rabbitz/ (기본 설치 및 저장 파일)

  • /3rabbitzbackup/ (백업 파일)

  • /home/tomcat/ (derby DB 파일)

Case 2) 신규 구축 시

 신규 설치 방법(리눅스)
# 사용자 추가 (tomcat)
groupadd -g 12345 tomcat
useradd -u 12345 -g tomcat tomcat

chown -R tomcat:tomcat /3rabbitz
chown -R tomcat:tomcat /3rabbitzbackup

su - tomcat

# 설치 파일 다운로드 및 압축 해제
cd /tmp
wget http://www.3rabbitz.com/r/home/download/linux --content-disposition

tar xvfz 3rabbitz-2020-0510.tar.gz
cd ./3rabbitz
mv ./* /3rabbitz

Certbot 설치 및 SSL 인증서 발급

무료 SSL 인증서인 Let’s Encrypt 인증서를 자동으로 발급(갱신)해주는 Certbot을 설치하고 인증서를 발급합니다.

 Click here to expand...

Certbot 설치(Ubuntu 20.04 기준)

Certbot은 설치 방법과 패키지가 다양합니다. 여기서는 apt를 사용하여 certbot과 python3-certbot-apache를 설치합니다.

Certbot 설치에 실패할 경우 다음 작업을 수행 후 진행하십시오.

  • 방화벽 해제

  • 80, 443 포트 미사용

# certbot, python3-certbot-apache 설치
apt install -y certbot python3-certbot-apache

인증서 발급 및 자동 갱신

인증서 발급

다음 명령과 캡쳐 이미지를 참고하여 SSL 인증서를 발급합니다.

# 인증서(apache용)만 발급
certbot certonly --apache -d docs.mantech.co.kr
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices)
 (Enter 'c' to cancel): user@mantech.co.kr

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server. Do you agree?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing, once your first certificate is successfully issued, to
share your email address with the Electronic Frontier Foundation, a founding
partner of the Let's Encrypt project and the non-profit organization that
develops Certbot? We'd like to send you email about our work encrypting the web,
EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: N
Account registered.
Requesting a certificate for docs.mantech.co.kr

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/docs.mantech.co.kr/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/docs.mantech.co.kr/privkey.pem
This certificate expires on 2022-08-24.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.
...

인증서 확인

ls /etc/letsencrypt/live/docs.mantech.co.kr/

30일마다 자동 갱신 (유효기간 90일)

# 갱신 가능 여부 확인
certbot renew --dry-run

# crontab으로 자동 갱신 설정
crontab -e

# 매월 1일 05시에 갱신
0 5 1 * * certbot renew

keytool 로 keystore.p12 생성

  • 기존 데이터 복사로 인해 /3rabbitz/keystore.p12 파일이 있다면 삭제 후 인증서를 생성하십시오.

  • 이때 입력한 비밀번호를 기억하여 이후에 server.xml 파일 설정 시 입력하십시오.

keytool -genkey -alias tomcat -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 3650

새 비밀번호 다시 입력: 
이름과 성을 입력하십시오.
  [Unknown]:  
조직 단위 이름을 입력하십시오.
  [Unknown]:  
조직 이름을 입력하십시오.
  [Unknown]:  
구/군/시 이름을 입력하십시오?
  [Unknown]:  
시/도 이름을 입력하십시오.
  [Unknown]:  
이 조직의 두 자리 국가 코드를 입력하십시오.
  [Unknown]:  
CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown이(가) 맞습니까?
  [아니오]:  yes

pkcs12 형식으로 변경

다음 명령 시 /3rabbitz/에 keystore.p12 파일이 생성됩니다.
이후 tomcat의 server.xml 설정 시 keystore.p12 파일 경로를 입력해야 합니다.

openssl pkcs12 -export -in /etc/letsencrypt/live/docs.mantech.co.kr/fullchain.pem -inkey /etc/letsencrypt/live/docs.mantech.co.kr/privkey.pem -out /3rabbitz/keystore.p12 -name tomcat -CAfile /etc/letsencrypt/live/docs.mantech.co.kr/chain.pem -caname root

3rabbitz의 tomcat 설정 파일에 https 적용

https 적용을 위해 server.xml과 web.xml 파일을 수정합니다.

 server.xml, web.xml 수정

/3rabbitz/tomcat/conf/server.xml 수정

기존의 <Connector>를 주석 처리하고 80, 443 포트를 설정하는 <Connector>를 추가합니다.

vi /3rabbitz/tomcat/conf/server.xml
...

<Server port="5791" shutdown="SHUTDOWN">

  <Service name="Catalina">
          <!--
    <Connector port="8009" protocol="AJP/1.3" address="0.0.0.0" secretRequired="false" redirectPort="8443" URIEncoding="UTF-8" maxPostSize="-1" Server="3Rabbitz" />
    <Connector port="1975" protocol="HTTP/1.1"
          connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" maxPostSize="-1" Server="3Rabbitz" />
          -->

    <Connector port="80" protocol="HTTP/1.1" relaxedQueryChars="^`\|{}[]"
    connectionTimeout="20000" redirectPort="443" URIEncoding="UTF-8"
    maxPostSize="-1" Server="3Rabbitz" />

    <Connector port="443" protocol="HTTP/1.1" relaxedQueryChars="^`\|{}[]"
    connectionTimeout="20000" URIEncoding="UTF-8"
    maxPostSize="-1" Server="3Rabbitz"
    SSLEnabled="true" scheme="https" secure="true"
    clientAuth="false" sslProtocol="TLS"
            keystoreFile="/3rabbitz/keystore.p12"
    keystorePass="roqkf2xla"
    keystoreType="PKCS12" />

    <Engine name="Catalina" defaultHost="localhost">
      <Host name="localhost" appBase="/" unpackWARs="true"
        autoDeploy="false" deployOnStartup="false" createDirs="false">
...

/3rabbitz/tomcat/conf/web.xml 수정

</web-app>위에 다음과 같이 <security-constraint> 를 추가합니다.

vi /3rabbitz/tomcat/conf/web.xml
...
<web-app>
...
 <security-constraint>
        <web-resource-collection>
            <web-resource-name>All Requests</web-resource-name>
            <url-pattern>/*</url-pattern>
        </web-resource-collection>
        <user-data-constraint>
            <transport-guarantee>CONFIDENTIAL</transport-guarantee>
        </user-data-constraint>
    </security-constraint>
</web-app>

Apache derby DB

3rabbitz는 데이터베이스로 Apache derby DB를 사용합니다. 자동 번역기를 사용하려면 DB 모드 변경이 필요하고, 이를 위해 관련 설정이 적용된 기존 서버의 /home/tomcat/ 디렉터리를 이관해야 합니다.

 DB 모드 변경 참고

자동 번역기 사용을 위한 DB 모드 변경

3rabbitz에 내장된 derby DB는 "Embedded Derby" 모드를 기본으로 사용합니다. 자동 번역 프로그램을 사용하려면 외부(타 애플리케이션)에서 접속할 수 있어야 하지만, 이 모드는 오직 해당 JVM instance 하나만 데이터베이스에 접속 가능합니다. 따라서 derby DB를 별도로 설치하고 3rabbitz의 DB 연결 옵션을 "Derby Network Server" 모드로 변경해야 합니다.

Derby Network Server Architecture

작업 절차

서버 변경 시, 기존 서버에 관련 설정이 적용되어 있어 아래 작업 없이 관련 데이터만 이관합니다.

  1. apache derby 설치파일 다운로드 
    다운로드 주소: https://db.apache.org/derby/releases/release-10_14_2_0.cgi
    서버 내 다운로드 위치: /home/tomcat/db-derby-10.14.2.0-bin

  2. /3rabbitz/tomcat/conf/server.xml에서 database 연결옵션 변경

    # 변경 전(기존 내용)
     <Resource name="jdbc/Base" auth="Container"
                type="javax.sql.DataSource" maxTotal="100" maxIdle="30"
                maxWaitMillis="10000" username="database" password="database"
                driverClassName="org.apache.derby.jdbc.EmbeddedDriver"
                url="jdbc:derby:database;create=true" />

    위 내용을 다음과 같이 변경합니다.

    # 변경 후
    <Resource name="jdbc/Base" auth="Container"
                type="javax.sql.DataSource" maxTotal="100" maxIdle="30"
                maxWaitMillis="10000" username="database" password="database"
                driverClassName="org.apache.derby.jdbc.ClientDriver"
                url="jdbc:derby://127.0.0.1:1527/;create=true" />

DB 동작 스크립트 및 MCCS 적용

/home/tomcat/dbScripts/에 작성된 스크립트를 실행하여 외부에서 DB에 접속할 수 있도록 합니다.
또한 아래의 시작/종료/모니터링 스크립트를 MCCS 복합 응용 리소스로 등록하여 서비스 동작을 제어합니다.

 작업 절차
  1. derby DB 관련 데이터(/home/tomcat/)를 이관합니다.
    → 위에서 이관한 경우 생략

  2. Derby Network Server 시작/종료/모니터링 스크립트 작성(확인)
    → 기존 서버에서 데이터 이관 시 스크립트 확인
    스크립트 위치: /home/tomcat/dbScripts/

    • 시작 스크립트: startDb.sh

      #!/bin/bash
      export DERBY_HOME=/home/tomcat/db-derby-10.14.2.0-bin
      export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
      export CLASSPATH="${DERBY_HOME}/lib/derbyshared.jar:${DERBY_HOME}/lib/derby.jar:${DERBY_HOME}/lib/derbynet.jar:${DERBY_HOME}/lib/derbytools.jar:${DERBY_HOME}/lib/derbyoptionaltools.jar:${CLASSPATH}"
      export MODULEPATH="${DERBY_HOME}/lib/derbyshared.jar:${DERBY_HOME}/lib/derby.jar:${DERBY_HOME}/lib/derbynet.jar:${DERBY_HOME}/lib/derbytools.jar:${DERBY_HOME}/lib/derbyoptionaltools.jar"
      cd /3rabbitz/data/database
      ${DERBY_HOME}/bin/startNetworkServer -h 0.0.0.0 >/home/tomcat/dbScripts/startDb.log &
    • 종료 스크립트: stopDb.sh

      #!/bin/bash
      export DERBY_HOME=/home/tomcat/db-derby-10.14.2.0-bin
      export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
      export CLASSPATH="${DERBY_HOME}/lib/derbyshared.jar:${DERBY_HOME}/lib/derby.jar:${DERBY_HOME}/lib/derbynet.jar:${DERBY_HOME}/lib/derbytools.jar:${DERBY_HOME}/lib/derbyoptionaltools.jar:${CLASSPATH}"
      export MODULEPATH="${DERBY_HOME}/lib/derbyshared.jar:${DERBY_HOME}/lib/derby.jar:${DERBY_HOME}/lib/derbynet.jar:${DERBY_HOME}/lib/derbytools.jar:${DERBY_HOME}/lib/derbyoptionaltools.jar"
      cd /3rabbitz/data/database
      ${DERBY_HOME}/bin/stopNetworkServer
      kill -9 $(pgrep -f 'derby.drda.NetworkServerControl')
    • 모니터링 스크립트: monitorDb.sh

      #!/bin/bash
      ps -ef|grep "derby.drda.NetworkServerControl" | grep -v grep
      if [ $? -eq 0 ]
      then
      exit 0
      fi
      
      exit 1

  3. MCCS에서 복합 응용 리소스 추가 시 위 스크립트를 사용합니다.(MCCS 구축 설명은 생략)
    MCCS 웹 콘솔: https://docs.mantech.co.kr:10080/main
    리소스 그룹명: docs_group
    리소스명: 3rabbitz_database

참고

/wiki/spaces/QA/pages/959578623



  • No labels