오프라인 1, 2일차 (서버 환경 구축)

2022. 7. 1. 12:26보안/케이쉴드

반응형

가상 인프라 구성

 

온프레미스

장비를 물리적으로 직접 운영하는 형태

클라우드

인터넷으로 인프라를 새롭게 구축. 논리적 저장소 할당

 

시나리오 설정

웹서버: 아파치2.4.29, 톰캣9.0.16

db: mariadb10.1.48

rsyslog데몬으로 축적

 

 

 

 

5대의 가상 서버

를 다음과 가치 구축

작업순서 (devserver(.153)> web(.151) > db(.152)> backup(.155)> log(.154))

 

 

고정 Ip 설정

sudo vi /etc/netplan/00-installer-config.yaml

# This is the network config written by 'subiquity'
network:
  ethernets:
        ens33:
                dhcp4: no
                addresses: [192.168.???.XXX/24]
                gateway4: 192.168.???.2
                nameservers:
                        addresses: [8.8.8.8]

  version: 2

sudo netplan apply

 

개발자 서버 

apache2 설정

sudo apt-get install -y apache2 libapache2-mod-jk
sudo vi /etc/apache2/sites-available/000-default.conf ( 기존 파일 수정 )
  
= DocumentRoot /var/www/html
   JkMount /* tomcat ( 추가 문구 )

sudo vi /etc/apache2/workers.properties ( 파일 생성 )
  
= 아래 문구 작성
worker.list=tomcat
workers.tomcat_home=/usr/share/tomcat9
workers.java_home=/usr/lib/jvm/java-11-openjdk-amd64
worker.tomcat.port=8009
worker.tomcat.host=localhost
worker.tomcat.type=ajp13
worker.tomcat.lbfactor=1

sudo vi /etc/apache2/mods-available/jk.conf

= 아래와 같이 수정
 (기존 문구) JkWorkersFile /etc/libapache2-mod-jk/workers.properties
 (수정 문구) JkWorkersFile /etc/apache2/workers.properties

sudo systemctl restart apache2

was

sudo apt-get install -y default-jdk tomcat9 libmysql-java
java -version
 = 자바 설치 완료 확인을 위한 버전 출력 확인

sudo vi /etc/tomcat9/server.xml
 = 아래와 같이 파일 수정
<!-- Define an AJP 1.3 Connector on port 8009 -->
(아래 내용 주석 해제)
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>

sudo cp /usr/share/java/mysql-connector-java-5.1.45.jar /usr/share/tomcat9/lib/

sudo systemctl restart tomcat9
호스트 PC 에서 Dev Server IP 입력 후 It Works 페이지 출력 확인

vsftp

sudo apt-get install -y vsftpd
sudo vi /etc/vsftpd.conf 

아래 설정 추가(주석 제거하면됨)
   write_enable=YES
   local_umask=022
   chroot_local_user=NO ##YES인지 확인

sudo systemctl restart vsftpd
sudo chmod o+w /var/lib/tomcat9/webapps/

mariaDB

sudo apt-get -y install mariadb-server
sudo mysql_secure_installation

Enter current password for root (enter for none): 엔터 # 현재 MariaDB의 root 패스워드가 없으므로 엔터
OK, successfully used password, moving on...

Set root password? [Y/n] y  # MariaDB root 패스워드 설정 질의
New password: kisec123  # 설정할 root 패스워드 입력
Re-enter new password:  # 설정한 root 패스워드 확인 재입력

Remove anonymous users? [Y/n]  y # 익명의 접근에 대한 질의이며, 보안을 위해 차단

Disallow root login remotely? [Y/n]  n # 외부로의 연결 허용

Remove test database and access to it? [Y/n]  y # 테스트용으로 생성된 데이터베이스 삭제 여부 질의

Reload privilege tables now? [Y/n]  y # 현재 설정된 값에 대한 적용 여부 질의


sudo mysql -u root -p

   root / kisec123


create database KISEC;
use KISEC;
create table login (id varchar(20) primary key, pw varchar(20));
show tables;
desc login;

use mysql;
select host, user, password from user;
GRANT ALL PRIVILEGES ON KISEC.* TO root@'192.168.???.153' identified by 'kisec123';
select host, user, password from user; -> localhost 랑 비밀번호 같은지 확인
flush privileges;
exit


50-server

sudo vi /etc/mysql/mariadb.conf.d/50-server.cnf
   (수정) bind-address = 127.0.0.1 => 0.0.0.0

service mysqld restart

소스코드

[ 소스코드 옮기기 ]
- 호스트 PC 에서 제공된 ROOT.war 파일이 있는 파일탐색기 위치에서 Shift + 우클릭 -> 여기에서 PowerShell 창 열기 클릭
-> scp ROOT.war kisec@192.168.???.153:~/ -> yes/no 선택 나올 시 yes 그대로 입력(입력되는거 안뜸)
-> 비밀번호 요구창 뜨면 kisec123 입력
- 다시 Dev 서버로 돌아와서 ls -al ~/ 으로 ROOT.war 파일 정상적으로 옮겨졌는지 확인
- sudo cp ~/ROOT.war /var/lib/tomcat9/webapps/ 
- cd /var/lib/tomcat9/webapps
- sudo mv ROOT/ ROOT_BAK/
- sudo systemctl restart tomcat9 하거나 일정 시간 지나면 알아서 tomcat 이 ROOT.war 파일을 풀어 ROOT 디렉터리 생성
- 여기서부터는 tomcat 계정으로 풀어지기 때문에 sudo -s 해서 root 로 올라가야 됨
- cd ROOT
- grep -rn "192.168."
joinAction.jsp:10:    String jdbcurl = "jdbc:mysql://192.168.???.151:3306/KISEC";
success.jsp:8:    String jdbcurl = "jdbc:mysql://192.168.???.151:3306/KISEC";
loginAction.jsp:12:     String jdbcurl = "jdbc:mysql://192.168.???.151:3306/KISEC";
 = 해당 파일안의 IP를 'Dev Server IP'로 변경
- sudo systemctl restart tomcat9
- 호스트 PC 웹 브라우저에서 Dev Server IP 입력 후 로그인 창 확인 및 회원가입 시도 후 로그인 시도
 = admin 으로 회원가입 후 로그인 하면 관리자 페이지
 = 그 외 계정은 그냥 로그인

[ ROOT.war 파일 만들기 ]
- cd /var/lib/tomcat9/webapps/ROOT/
- jar xvf ROOT.war *

was로 전송

[ Dev 서버에서 WAS 서버로 ROOT.war 파일 전송 ]
====== 여기서부터는 Dev 서버 터미널에서 작업
- sudo -s 
- cd /var/lib/tomcat9/webapps/
- ftp [ WAS 서버 IP ]
- ftp> cd /var/lib/tomcat9/webapps/
- ftp> mput ROOT.war
- ftp> exit
====== 여기서부터는 WAS 서버 터미널에서 작업
- cd ROOT/
- Dev 서버에서 진행했듯 DB 서버로 아이피 변경 필요
  = success.jsp, loginAction.jsp, joinAction.jsp
- systemctl restart tomcat9

 

 

web Server

 

ip 고정

sudo vi /etc/netplan/00-installer-config.yaml

# This is the network config written by 'subiquity'
network:
  ethernets:
        ens33:
                dhcp4: no
                addresses: [192.168.???.151/24]
                gateway4: 192.168.???.2
                nameservers:
                        addresses: [8.8.8.8]

  version: 2

sudo netplan apply

 

아파치 설치

sudo apt-get install -y apache2 libapache2-mod-jk
sudo vi /etc/apache2/sites-available/000-default.conf ( 기존 파일 수정 )
  
= DocumentRoot /var/www/html
   JkMount /* tomcat ( 추가 문구 )

sudo vi /etc/apache2/workers.properties ( 파일 생성 )
  
= 아래 문구 작성
worker.list=tomcat
workers.tomcat_home=/usr/share/tomcat9
workers.java_home=/usr/lib/jvm/java-11-openjdk-amd64
worker.tomcat.port=8009
worker.tomcat.host=localhost
worker.tomcat.type=ajp13
worker.tomcat.lbfactor=1

sudo vi /etc/apache2/mods-available/jk.conf

= 아래와 같이 수정
 (기존 문구) JkWorkersFile /etc/libapache2-mod-jk/workers.properties
 (수정 문구) JkWorkersFile /etc/apache2/workers.properties

sudo systemctl restart apache2

 

was

sudo apt-get install -y default-jdk tomcat9 libmysql-java
java -version
 = 자바 설치 완료 확인을 위한 버전 출력 확인

sudo vi /etc/tomcat9/server.xml
 = 아래와 같이 파일 수정
<!-- Define an AJP 1.3 Connector on port 8009 -->
(아래 내용 주석 해제)
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>

sudo cp /usr/share/java/mysql-connector-java-5.1.45.jar /usr/share/tomcat9/lib/
sudo systemctl restart tomcat9
호스트 PC 에서 Dev Server IP 입력 후 It Works 페이지 출력 확인

 

vsftp

sudo apt-get install -y vsftpd
sudo vi /etc/vsftpd.conf 

아래 설정 추가(주석 제거하면됨)
   write_enable=YES
   local_umask=022
   chroot_local_user=NO ##YES인지 확인

sudo systemctl restart vsftpd
sudo chmod o+w /var/lib/tomcat9/webapps/

[개발 서버 동일]

 

rsyslog

3) rsyslog 설정
sudo vi /etc/rsyslog.conf // 파일 맨 하단에 아래 내용 추가

*.* @@192.168.???.154:514


sudo systemctl restart rsyslog

 

 

 

 

 

dbServer

 

ip 설정

sudo vi /etc/netplan/00-installer-config.yaml

# This is the network config written by 'subiquity'
network:
  ethernets:
        ens33:
                dhcp4: no
                addresses: [192.168.???.152/24]
                gateway4: 192.168.???.2
                nameservers:
                        addresses: [8.8.8.8]

  version: 2

sudo netplan apply

 

마리아 DB

sudo apt-get -y install mariadb-server
sudo mysql_secure_installation

Enter current password for root (enter for none): 엔터 # 현재 MariaDB의 root 패스워드가 없으므로 엔터
OK, successfully used password, moving on...

Set root password? [Y/n] y  # MariaDB root 패스워드 설정 질의
New password: kisec123  # 설정할 root 패스워드 입력
Re-enter new password:  # 설정한 root 패스워드 확인 재입력

Remove anonymous users? [Y/n]  y # 익명의 접근에 대한 질의이며, 보안을 위해 차단

Disallow root login remotely? [Y/n]  n # 외부로의 연결 허용

Remove test database and access to it? [Y/n]  y # 테스트용으로 생성된 데이터베이스 삭제 여부 질의

Reload privilege tables now? [Y/n]  y # 현재 설정된 값에 대한 적용 여부 질의


sudo mysql -u root -p

   root / kisec123



create database KISEC;
use KISEC;
create table login (id varchar(20) primary key, pw varchar(20));
show tables;
desc login;

use mysql;
select host, user, password from user;
GRANT ALL PRIVILEGES ON KISEC.* TO root@'192.168.???.151' identified by 'kisec123';
select host, user, password from user; -> localhost 랑 비밀번호 같은지 확인
flush privileges;
exit

50-server

sudo vi /etc/mysql/mariadb.conf.d/50-server.cnf
   (수정) bind-address = 127.0.0.1 => 0.0.0.0

service mysqld restart

 

 

rsyslog 

sudo vi /etc/mysql/mariadb.conf.d/50-server.cnf
   (수정) bind-address = 127.0.0.1 => 0.0.0.0

service mysqld restart

 

 

backup db

db 서버에서

===== DB Server 터미널에서 작업!! 백업 서버 X

sudo apt-get install xinetd rsync
sudo vi /etc/rsyncd.conf
(파일 새로 생성 후 아래와 같이 작성)

[DBS]
path = /backup
comment = DB server
uid = 65534
gid = 65534
use chroot = yes
read only = yes
hosts allow = [백업서버 IP]
max connections = 3
timeout 600


sudo vi /etc/xinetd.d/rsync
(파일 새로 생성 후 아래와 같이 작성)

service rsync
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon
log_on_failure += USERID
}

sudo systemctl restart xinetd


[DB 덤프 및 Cron 등록]
sudo mkdir /backup
sudo -s
mysqldump -uroot -pkisec123 KISEC > /backup/mysql_dump_$(date +%Y%m%d).sql
(덤프 잘되는지 확인)

vi /backup/backup.sh
(cron 등록을 위한 쉘 스크립트 파일 작성)

  #!/bin/bash
  mysqldump -uroot -pkisec123 KISEC > /backup/mysql_dump_$(date +%Y%m%d).sql

chmod u+x /backup/backup.sh
crontab -e
(에디터 선택 시 2번 선택)
(일단 테스트를 위해 매분으로 아래와 같이 작성)

      * * * * * /backup/backup.sh > /backup/backup.log 2>&1

ls -al /backup/
(매 분 마다 파일 변경되는 것 확인)

백업서버에서

===== DB Backup 서버 터미널에서 작업!!!


sudo apt-get install -y xinetd rsync
sudo vi /etc/xinetd.d/rsync
(파일 새로 생성 후 아래와 같이 작성)

service rsync
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon
log_on_failure += USERID
}

sudo systemctl restart xinetd
sudo -s
rsync -avz [DB 서버 IP]::DBS/mysql_dump_$(date +%Y%m%d).sql /backup/
rsync 로 백업 파일 잘 가져오는지 확인
sudo vi /backup/backup.sh
(cron 등록을 위한 쉘 스크립트 파일 작성)

 #!/bin/bash
 rsync -avz [가져올 IP]::DBS/mysql_dump_$(date +%Y%m%d).sql /backup/

chmod u+x /backup/backup.sh
crontab -e
 
 * * * * * /backup/backup.sh > /backup/backup.log 2>&1

ls -al /backup/ 으로 매 분 마다 파일 변경되는 것 확인 (테스트로 1분 간격 적용)

 

 

logserver

- sudo vi /etc/rsyslog.conf
 = 아래 내용 주석 제거
  module(load="imtcp")
  input(type="imtcp" port="514")
 = 바로 아래에 파일명 관련 부분 추가

  $template LogName, "/var/log/rsyslog/%fromhost-ip%/%PROGRAMNAME%.log"
  *.* ?LogName

- sudo systemctl restart rsyslog

- sudo ls -al /var/log/rsyslog/
 = 하위에 각 서버 아이피 별 디렉터리 생성 확인

 

 

 

 

 

 

 

 

결과물: 다음과 같이 실행됨을 확인

 

 

ROOT.war
0.01MB