Security/Web

3 Tier Architecture(3 계층 구조) 구성

2er0127 2023. 6. 9. 01:37

실습 환경: VirtualBox CentOS7 Minimal

 

 

3 Tier Architecture

는 서비스의 기본으로 서버를 3개로 나누어 구성하는 것을 말한다.

즉 서버의 역할을 3개로 나누어 구성함으로써 보안의 효과도 증가하게 된다.

예를 들어 Web Server와 WAS 사이에 Suricata, WAS와 DB Server 사이에 악성코드 탐지를 배치하여 보안을 높일 수 있다.

 

서버는 Web Server, Web Application Server(WAS), DataBase Server(DB Server) 로 구성된다.

 

Client Internet Web Server WAS DB Server

 

 

음식점에 빗대어 설명하면 손님(Client)호출 버튼(Internet)을 통해 카운터(Web Server)에 주문을 하면, 주방에서 주방장(WAS)이 요리를 하는데, 요리의 재료를 냉장고(DB Server)에서 꺼내오는 것과 같다.

 

 

 

 

 

1.

먼저 Web Server 설정이다.

yum update -y
yum install net-tools
netstat -anp

# nginx 웹서버 설치
yum install epel-release -y
yum install nginx

# 방화벽 해제
systemctl stop firewalld
systemctl disable firewalld

# nginx 실행
systemctl start nginx
systemctl enable nginx

Web Server IP11.11.11.12 이다.

 

호스트에서의 접속을 위해 가상머신에 포트포워딩 설정을 해준다.

 

설치된 nginx의 설정 파일 경로는 /etc/nginx/

홈 디렉토리 경로는 /usr/share/nginx/html/ 에 있다.

 

호스트에서 http://127.0.0.1:80 에 접속하여 nginx 페이지가 잘 뜨는지 확인한다.

 

 

 

 

 

2.

다음은 WAS 설정을 해준다. (IP 11.11.11.11)

WAS에는 Tomcat을 설치한다.

yum install wget
yum install net-tools

# java sdk 설치
yum install java-1.8.0-openjdk-devel.x86_64

wget http://archive.apache.org/dist/tomcat/tomcat-9/v9.0.4/bin/apache-tomcat-9.0.4.tar.gz
tar xvzf ./apache-tomcat-9.0.4.tar.gz
mkdir /usr/local/tomcat
mv ./apache-tomcat-9.0.4/* /usr/local/tomcat

# Tomcat 실행
/usr/local/tomcat/bin/startup.sh

# Tomcat 종료
/usr/local/tomcat/bin/shutdown.sh

 

Tomcat 실행 후, 다시 호스트에서 http://127.0.0.1 에 접속했을 때 Tomcat의 고양이가 뜨는지 확인한다.

 

 

 

 

 

3.

다음은 DB Server 설정이다. (IP 11.11.11.13)

mariadb를 사용한다.

yum install mariadb-server
yum install net-tools

# 방화벽 해제
systemctl stop firewalld
systemctl disable firewalld

# DB 실행
systemctl start mariadb
systemctl enable mariadb

# 계정 생성
mysql
> show databases;
> use mysql;
> show tables;
> create user 'id'@'%' identified by 'pw';
> grant all privileges on *.* to id@'%';
> flush privileges;

# 접속 Test
mysql -u id -h 11.11.11.13 -p
> ...

 

 

 

 

 

4. 

이제 Web Server와 WAS 연동 작업이다.

Web Server와 WAS에서 각각 수행해야할 명령어들이다.

# Web Server

# nginx 설정 수정
vim /etc/nginx/nginx.conf
# server {...} 안에 추가
location / {
	index index.html index.htm index.jsp;
    proxy_pass http://11.11.11.11:8080;
}

setsebool -P httpd_can_network_connect 1

systemctl start nginx
# 또는 systemctl restart nginx
# WAS

systemctl stop firewalld
systemctl disable firewalld
setsebool -P httpd_can_network 1

# Tomcat 홈 디렉토리 경로
/usr/local/tomcat/webapps/ROOT/

# 연동 Test
vim /usr/local/tomcat/webapps/ROOT/test.jsp

# Tomcat 재시작
/usr/local/tomcat/bin/shutdown.sh && /usr/local/tomcat/bin/startup.sh

 

test.jsp 파일을 만들어 테스트 코드를 짜고, Tomcat 재시작 후 호스트에서 127.0.0.1/test.jsp 로 접근하여 오류가 없는지 확인한다.

 

 

 

 

 

5.

마지막으로 WAS와 DB Server를 연동한다.

여기서는 필요한 .jar 파일을 다운받고 환경변수를 세팅한다.

wget https://dlm.mariadb.com/1965742/Connectors/java/connector-java-2.7.5/mariadb-java-client-2.7.5.jar
cp mariadb-java-client-2.7.5.jar /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.342.b07-1.el7_9.x86_64/jre/lib/
cp mariadb-java-client-2.7.5.jar /usr/local/tomcat/lib/

wget https://downloads.mysql.com/archives/get/p/3/file/mysql-connector-java-5.1.40.tar.gz
tar xvf mysql-connector-java-5.1.40.tar.gz
cp mysql-connector-java-5.1.40/mysql-connector-java-5.1.40-bin.jar /usr/local/tomcat/lib/
cp mysql-connector-java-5.1.40/mysql-connector-java-5.1.40-bin.jar /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.342.b07-1.el7_9.x86_64/jre/lib/

# 환경변수
vim /etc/profile

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.342.b07-1.el7_9.x86_64/
export CATALINA_HOME=/usr/local/tomcat
PATH=$PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/mariadb-java-client-2.7.5.jar:$CATALINA_HOME/lib/mariadb-java-client-2.7.5.jar

# Tomcat 재시작
/usr/local/tomcat/bin/shutdown.sh && /usr/local/tomcat/bin/startup.sh

source /etc/profile

 

 

WebServer에 nginx,

WAS에 Tomcat이 있는데, redirect가 Apache Tomcat이기 때문에 Tomcat의 웹 페이지를 사용할 예정이다.

 

다시 한 번 경로를 확인한다.

/usr/local/tomcat/webapps/ROOT/

 

필요한 웹 페이지 파일은 위 경로 밑에 생성할 수 있다.

 

 

 

아래는 DB 연동 Test 코드이다.

/usr/local/tomcat/webapps/ROOT/login.jsp

# login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%		
        String ID="id"; // mysql ID
        String PWD="pw"; // mysql password
        String PORTNO="3306"; // mysql port
        String DBNAME="test"; // 연결할 DB 이름
        String TIMEZONE="serverTimezone=UTC";

        String Query="jdbc:mysql://11.11.11.13:"+PORTNO+"/"+DBNAME+"?"+TIMEZONE;

        Class.forName("com.mysql.jdbc.Driver");
        Connection conn=DriverManager.getConnection(Query, ID, PWD);

        if(conn!=null){
                out.println("Connected!!<br>");
                conn.close();
                out.println("Close WebDB.<br>");
        }
        else{
                out.println("Can't Connect WebDB!!<br>");
        }
%>

 

아까 생성했던 MySQL 아이디와 비밀번호를 넣고, 

초기에 생성되어 있던 test 데이터베이스를 이용하여 테스트를 실행했다.

 

 

 

호스트에서 127.0.0.1/login.jsp 에 접속했을 때 오류 없이 Connected 메세지가 뜬다면 성공이다.

 

 

 

이제 웹 페이지 코드를 작성하고 DB Server와 연결하여 Web Server를 구동할 수 있다.

 

728x90