You are viewing an old version of this page. View the current version.
Compare with Current
View Page History
« Previous
Version 5
Next »
랜섬웨어 2차 피해 예방 및 보안 강화를 위해 3Rabbitz 서버(docs.mantech.co.kr)를 새로 구축합니다.
VM 정보
백업
기존 서버 OVF 및 3rabbitz 관련 데이터 백업
로컬 PC에 기존 VM(서버)의 OVF 및 3rabbitz 관련 데이터 백업
OVF 파일 내보내기
/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을 생성합니다.
사전 작업
자바가 없거나, 오라클 자바 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 설치
Case 1) 서버 변경 시
서버(VM)만 번경할 경우 별도의 설치 과정 없이, scp와 같은 명령을 통해 아래 3rabbitz 관련 디렉터리를 통째로 복사합니다.
# 예시) 기존 서버의 /3rabbitz/를 새 서버의 /로 복사
scp -r mdrm@docs.mantech.co.kr:/3rabbitz/ /
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, 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/
인증서 갱신
1. 인증서 발급 명령 후 '2' 입력(Enter)
certbot certonly --apache -d docs.mantech.co.kr
...
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
2. keystore.p12 인증서 교체 (아래 “keytool로 keystore.p12 생성” 참고)
→ 기존 파일 삭제 후 새 인증서 생성
3. 3rabbitz 서비스 재시작
/3rabbitz/bin/shutdown.sh
/3rabbitz/bin/startup.sh
keytool -genkey -alias tomcat -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 3650
새 비밀번호 다시 입력: (예:roqkf2xla)
이름과 성을 입력하십시오.
[Unknown]:
조직 단위 이름을 입력하십시오.
[Unknown]:
조직 이름을 입력하십시오.
[Unknown]:
구/군/시 이름을 입력하십시오?
[Unknown]:
시/도 이름을 입력하십시오.
[Unknown]:
이 조직의 두 자리 국가 코드를 입력하십시오.
[Unknown]:
CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown이(가) 맞습니까?
[아니오]: yes
pkcs12 형식으로 변경
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" 모드로 변경해야 합니다.
작업 절차
apache derby 설치파일 다운로드
다운로드 주소: https://db.apache.org/derby/releases/release-10_14_2_0.cgi
서버 내 다운로드 위치: /home/tomcat/db-derby-10.14.2.0-bin
/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 복합 응용 리소스로 등록하여 서비스 동작을 제어합니다.
작업 절차
derby DB 관련 데이터(/home/tomcat/)를 이관합니다.
→ 위에서 이관한 경우 생략
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
MCCS에서 복합 응용 리소스 추가 시 위 스크립트를 사용합니다.(MCCS 구축 설명은 생략)
MCCS 웹 콘솔: https://docs.mantech.co.kr:10080/main
리소스 그룹명: docs_group
리소스명: 3rabbitz_database
참고
/wiki/spaces/QA/pages/959578623