Welcome to My World (www.dgmayor.com)

소프트웨어/웹 서버 등 개발 환경 세팅

51. VPS 서버 세팅

dgmayor 2022. 9. 6. 18:03
728x90

알아서 결제하고...

회사에서 주는 콘솔 접속하면....

 

요청에 의해서 “Ubuntu 에서 JSP 서버를 세팅하는 방법“을 적도록 하겠다.

최종 수정 : 2017-06-29

 

Ubuntu 16.04 LTS 기준입니다.

 


* 이 글은 Ubuntu 에 JSP 웹서버 세팅을 소개하고 있습니다.

* Ubuntu 에서 PHP 웹서버 세팅을 원하시면 https://blog.lael.be/post/73 글로 이동하세요.

* Ubuntu 에서 PHP와 JSP를 동시 구동하고 싶으시면 https://blog.lael.be/post/1023 글로 이동하세요.


 

*JSP는 SI프로젝트에서 주로 사용되는 언어이다.

*국내의 금융, 공공기관 프로젝트에서 주로 사용되기 때문에 개발자의 몸값이 높다.

이것은 순전히 JAVA언어의 우수성 때문이라기 보다는, 수요와 공급의 법칙으로 인한 것이다.

 

 

- 시장경제는 대개 수요과 공급의 법칙으로 정해진다.

 

국내의 경우 2012년 부터 SI가 저물고 있다. 여러 ‘고도화 프로젝트’가 종료되고, 경제가 장기 불황(성장을 안하거나, 실질 성장률이 떨어짐)에 접어듬에 따라서,

SI 프로젝트의 단가 및 갯수가 확 줄었다.

* 따라서 JSP 개발자의 몸값도 낮아졌다. (공급과잉)

* 2013년도 부터 ‘오픈소스’ 및 단가 절감을 위해서 공공기관에서도 PHP 프로젝트가 발주되기 시작했다.

* Cafe 24의 경우 2014년 09월 11일 부터 JSP호스팅 사업을 중단하였다. (관련 공지)

 


 

1) 리눅스 버전체크

#uname -a
Linux 150-95-172-188 4.4.0-57-generic #78-Ubuntu SMP Fri Dec 9 23:50:32 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

2) Ubuntu 버전체크

#cat /etc/issue
Ubuntu 16.04.1 LTS \n \l

3) 하드용량체크

#df -h
 Filesystem            Size  Used Avail Use% Mounted on
 /dev/mapper/LaelServer02-root
 37G  739M   35G   3% /
 tmpfs                 244M     0  244M   0% /lib/init/rw
 varrun                244M   72K  244M   1% /var/run
 varlock               244M     0  244M   0% /var/lock
 udev                  244M  148K  244M   1% /dev
 tmpfs                 244M     0  244M   0% /dev/shm
 lrm                   244M  2.7M  242M   2% /lib/modules/2.6.28-11-server/volatile
 /dev/sda5             228M   14M  202M   7% /boot

대략 다 더하면 40G가 나온다.

--

4) 메모리 체크

#free -m
             total       used       free     shared    buffers     cached
Mem:           988        703        285          0        137        393
-/+ buffers/cache:        172        816
Swap:         1881          0       1881

988M의 전체메모리중 현재 703M을 사용하고 있고 285M가 비어있다.

 

5) 설치된 소프트웨어 최신버전 패치

apt 목록 갱신

apt란 Advanced Packaging Tool 을 뜻합니다.

우리는 apt 라는 우분투에 내장된 프로그램을 이용해서 프로그램을 쉽게 설치/제거 할 수 있다.

 

패키지 목록 갱신.

#apt-get update

 

현재 운영체제에 설치되어있는 프로그램 최신버전패치

#apt-get upgrade

6) 시스템 시간 설정

이것을 하지 않으면 영국 시간을 불러올 것이다.

물론 초기 설치할 때 Asia/Seoul 을 설정했다면 이 작업을 할 필요는 없다. 하지만 또 한다고 해서 문제되지는 않는다.

- 데비안 패키지 재설정 TimeZone Data 를 실행한다.

#dpkg-reconfigure tzdata

GUI 환경이 나올 텐데, 순서대로 Asia - Seoul 을 선택하면 된다.

 

 

7) Hostname 설정

이 서버에 이름을 정하는 것이다. 이름을 잘 정해 두어야 나중에 다중 서버작업을 할 때 헷갈리지 않는다.

위의 뜻은 “li599-115 서버에 root 사용자” 라는 뜻이다.

글 쓰는 지금 단어를 빨리 생각해보았는데  newhistory 라는 것이 떠오르더라.

이제 이 서버는 newhistory 라는 이름으로 만들 것입니다.

#vi /etc/hostname

빈 파일일 건데(또는 기존 hostname이 쓰여있을것임.) 원하는 이름으로 바꾼다. newhistory

권장하는 단어는 이 서버에 연결될 대표 도메인이다. 예를 들어 lael.be 같은 것.

 

적용한다.

#hostname -F /etc/hostname

 

서버에 재 접속하면 적용된 것을 확인 할 수 있을 것이다.

 

8) 웹서버 설치 (와쓰 설치)

좀 복잡한게…

JSP 프로젝트는 JAVA 버전에 영향을 많이 받는다.

 

예를들어서 3년전에 내가 짜서 완벽하게 돌아가는 코드가, 지금은 컴파일에러가 나면서 안돌아 갈 수 있는 것이다.

즉 이런류의 질문이 올라온다. (http://okky.kr/article/183920)

 

널리 쓰이는 코드들은 권장 jdk 버전을 명시해 놓았다.

http://www.egovframe.go.kr/wiki/doku.php?id=egovframework:dev3.0:gettingstarted

 

SI 프로젝트 발주처의 성격에 따라서 웹서버 선호가 다른데, 이 글은 주로 입문자 분이 볼 것이라 생각하니

전 세계에서 가장 널리 쓰이는 Apache Tomcat 으로 설치하도록 하겠다.

 

2017년 6월 현재 JAVA 9 (= JAVA 1.8) 이 나왔으나, 아직까지 JAVA 8(= JAVA 1.8) 이 널리 쓰이므로 java 8 로 설치하도록 하겠다.

 

자바 해석기 설치

#apt-get install openjdk-8-jre-headless

 

자바 컴파일러 설치

#apt-get install openjdk-8-jdk

 

자바 해석기 버전 확인

#java -version

 

 

자바 컴파일러 버전확인

#javac -version

 

 

Apache Tomcat 설치

공식사이트 : http://tomcat.apache.org/

 

 

이 글에서는 tomcat8 을 설치하겠다.

 

#apt-get install tomcat8

 

설치된 tomcat 버전 확인

#/usr/share/tomcat8/bin/version.sh

 

확인

http://서버의아이피:8080

 

 

 

9) virtual host 설정하기. (도메인 설정하기)


 

** 도메인을 소유하고 있지 않은경우** (혼자 도메인없이 jsp 연습해보고 싶을때)

9번을 통채로 건너뛰세요!

 

sftp 로 서버에 root 계정으로 접속하신 후

/var/lib/tomcat8/webapps/ROOT

위치에 index.jsp 파일을 생성하고 확인해보세요.

 

=> 이제 10번으로 이동


 

 

* 도메인을 소유한 경우에 대한 설명입니다. (일반적인 호스팅 환경)

먼저 사용자를 등록하자. (myuser 말고 사용하고 싶은 사용자 아이디를 입력하셔도 됩니다.)

#adduser myuser

추가한 사용자로 쉘 전환하기.

#su -l myuser

document root 생성하기.

#mkdir -p www/ROOT

(즉 /home/myuser/www/home/myuser/www/ROOT 폴더를 생성하는 것이다.)

 

이 경우 AppBase는 /home/myuser/www 이다.

 

#cd www/ROOT

 

#vi index.jsp

 

HELLO JSP!

<%= new java.util.Date() %>


즉 위의 index.jsp 파일의 위치는 /home/myuser/www/ROOT/index.jsp 이다.

 

다시 root 쉘로 돌아와서 (myuser 쉘에서 exit 명령어 또는 쉘을 하나 더 열어서 새로 로그인하자)

#vi /etc/tomcat8/server.xml

 

문서 최하단에 아래와 같이 나타날 건데,

 

 

아래 예시와 같이 Host 구문을 추가하자.

기존 구문을 지우지 말고 복사해서 사용하자.

hellomyjsp.co.kr 는 당신이 소유한 도메인 이름을,

appBase 는 당신이 추가한 사용자 아이디를 고려해서 작성하자.

 

 

tomcat 8 재시작

#service tomcat8 restart

 

결과 확인

웹브라우저에서 환경설정 파일에 적은 주소  http://hellomyjsp.co.kr:8080  접속.

 

 

10 - 1) MariaDB 설치

mysql 과 mariadb 는 완전 API 호환된다.

 

#apt-get install mariadb-server

MariaDB 10.0.24 이 설치된다.

 

MariaDB 초기화.

14.04 LTS까지는 자동으로 처리되던 작업인데.. 분리되었다.

아무튼 데이터베이스 초기화 작업을 하도록 하자.

다음의 명령어 실행하자.

/usr/bin/mysql_secure_installation

모르면 엔터 누르면 된다. (비밀번호만 설정하고 나머지는 엔터)

잘못한 것 같으면 위 명령어를 다시 실행하면 된다.

 

 

:: root 의 인증 플러그인 정보 제거하기

MySQL에 플러그인이라는 개념이 생겼다. 그 중 하나가 서버사이드 인증이다.

예를들어 Linux의 myuser1 사용자와 MySQL(MariaDB)의 myuser1 과 연결이 되는 경우이다. (비밀번호 필요없이 쉘인증)

root 사용자가 기본값으로 unix_socket Auth Plugin 이 설정되어 있는데… 이건 실 사용에 많은 불편함을 준다.  기존과 같이 비밀번호 인증 방식으로 바꾸도록 하자.

Linux root 사용자로 로그인한 상태에서

# mysql

(현재는 unix_socket 인증방식이라서 Linux root 사용자는 MySQL(MariaDB) root 계정에 비밀번호 없이 로그인 할 수 있다)

use mysql;
update user set plugin='' where User='root';
flush privileges;
exit;

 

 

MYSQL 콘솔 클라이언트 버전체크

#mysql -V
mysql  Ver 15.1 Distrib 10.0.24-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

 

 

10 - 2) 기본 언어셋 설정(중요)

이 단계를 건너뛰면 DB가 latin1 으로 생성되며 추후 DB작업에 문제가 생길 수 있다.

#vi /etc/mysql/mariadb.conf.d/50-server.cnf

 

(vi 에디터 사용방법을 모른다면 ftp 클라이언트를 사용하여 서버에 로그인 후 해당파일을 수정하고 덮어쓰기한다.)

 

[mysqld] 항목에 다음 2 줄을 추가한다.

2015년도 부터는 아래와 같이 utf8mb4 속성을 사용하세요.

이 속성은 utf8확장입니다. 기존의 모든 utf8과 상위 호환됩니다. (utf8 에서 utf8mb4 로의 변환은 손실이 일어나지 않습니다.)

 

utf8mb4 속성은 스마트폰 이모티콘 문자(emoji)를 저장할 수 있습니다.

자세한 설명은 이곳에(https://blog.lael.be/post/917) 있습니다.

/etc/mysql/mariadb.conf.d/50-server.cnf 에 추가
1
2
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

 

 

변경사항 적용

#service mysql restart

 

11) 연결 드라이버 설치 (JDBC Mysql Connector 설치)

Java에서 Mysql DB와 Connect 하는 드라이버를 설치해야 한다.

#apt-get install libmysql-java

/usr/share/java/mysql-connector-java.jar 위치에 connector 가 설치된다.

 

Tomcat8 라이브러리 폴더에 링크생성

#ln -s /usr/share/java/mysql-connector-java.jar /usr/share/tomcat8/lib/mysql-connector-java.jar

 

Tomcat8 재시작

#service tomcat8 restart

 

12) 예제소스 테스트

MySQL 접속주소 :  localhost

MySQL 사용자 아이디 : test

MySQL 사용자 비밀번호 : test

MySQL 데이터베이스명 : test

인 경우.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<%@ page import = "java.sql.*" %>
<%
 
Class.forName("com.mysql.jdbc.Driver");
String myUrl = "jdbc:mysql://localhost/test";
Connection conn = DriverManager.getConnection(myUrl, "test", "test");
 
// the mysql insert statement
String query = " insert into users (first_name, last_name, date_created, is_admin, num_points)"
+ " values (?, ?, ?, ?, ?)";
 
// create the mysql insert preparedstatement
PreparedStatement preparedStmt = conn.prepareStatement(query);
preparedStmt.setString (1, "Barney");
preparedStmt.setString (2, "Rubble");
preparedStmt.setString (3, "vv");
preparedStmt.setBoolean(4, false);
preparedStmt.setInt (5, 5000);
// execute the preparedstatement
preparedStmt.execute();
 
conn.close();
%>

 

 

결과확인

 

#북마크:

12) 보안패치 (fail2ban)

이 곳에서는 fail2ban 이라는 프로그램을 사용하여 서버를 보호하는 방법을 적도록 하겠다.

fail2ban 이란 지정한 시간내에 지정한 횟수만큼 실패 하면 ban 시간만큼 접속을 차단하는 것이다.

 

여러명이서 같이 쓰는 서버에 좋다. 주로 웹호스팅 서버. 방화벽 세팅하기 귀찮을때에도 이것을 사용한다.

 


 

fail2ban 은 로그기반 프로그램이기 때문에 로그가 쌓이는 시점으로 계산됩니다.

이것 때문에 발생하는 fail2ban maxretry별 최대 로그인 시도가능 횟수.

1 => 1번

2 => 7번

3=> 13번

4=> 19번

5=> 25번

6=>31번

n=> 6*(n-1) + 1

 

SSH의 경우 로그인이 실패(fail)하면 재시도(retry) 5회 하도록 해 줍니다.  재시도는 카운트 되지 않습니다.

SFTP의 경우 로그인이 실패(fail)하면 retry 안하고 바로 연결을 끊기 때문에 로그인 최대 시도횟수가 의도한대로 동작합니다.


 

 

방화벽 확인

#iptables -L

아마 이렇게 되어 있을 것이다.

 

Fail2ban 설치

#apt-get install fail2ban

 

설치 후 방화벽 확인

#iptables -L

fail2ban 이라는 항목이 추가되었으며 패킷을 컨트롤 할 수 있게된다.

 

아무것도 설정하지 않으면 패키지 기본값이 적용된다.

ssh 연결에 대해서 최근 10분간 6회이상 비밀번호가 틀리면,  ban조건이 충족한 때로부터 10분동안 ssh 접속차단(drop)된다.

 

아무것도 설정안해도 충분히 보호가 되지만 몇가지 설정을 해보도록하자.

 

fail2ban 환경설정

jail(감옥) 파일을 수정한다.

#vi /etc/fail2ban/jail.conf


상단의 [DEFAULT] 항목을 보자.

ignoreip 에는 ban 이 절대 되지 않을 아이피를 적는다. (123.234.123.234/32 형태로 적는다. 추가시 스페이스바로 구분.)

bantime 은 접속을 차단할 시간이다. 600은 10분을 의미한다.

findtime 은 통계를 찾을 시간이다.

maxretryfail 횟수이다.

 

 

 

maxretry 항목을 당신의 요구사항에 맞게 변경하자.

원래 3이었는데 6으로 재정의(redefine) 된다. 6이면 충분하다. 비밀번호 틀리기도 어렵다.

 

 

ssh 의 경우 로그인의 성공이나 실패여부를 모두 /var/log/auth.log 에 저장한다.

위의 경우

1) 고객의 ssh 신규접속

2) fail2ban 프로그램이 /var/log/auth.log 파일을 읽어서 최근 600초(10분)동안 6회이상 실패한 기록이 있으면

3) 600초 동안 연결차단

 

* 라엘이의 설정예제

신뢰된 아이피 및 ban 시간만 변경함.

 

* 설정 변경후 적용을 위해서 서비스 재시작

#service fail2ban restart

 

 

* 라엘이의 실 서버 적용예제

아래와 같이 무차별로그인 시도한 사람은 일정기간 ban 될 것이다.

#iptables -L

 

* 실수로 당신의 IP 가 ban이 되었다면

1) ban이 되지 않는 다른 아이피로 root 로그인을 시도하자.

2) fail2ban 을 reload 또는 restart 하자.  이 경우 밴 목록이 초기화 되는데 모든 IP에 대해 1번의 로그인 기회가 주어질 것이다.

로그인 시도 -> 로그인 성공 -> 로그인

로그인 시도 -> 로그인 실패 -> (fail2ban 이 인증로그를 살펴본 후 ban 요건을 탐색하고) ban

3) 또는 위에서 설정한 ignoreip 에 해당 IP 를 적으면 절대로 ban 시키지 않는다.

 

끝.

728x90

'소프트웨어 > 웹 서버 등 개발 환경 세팅' 카테고리의 다른 글

53. Portable JDK 만들기  (0) 2023.02.25
52. VI 에디터 사용법  (0) 2022.09.06
50. 인증  (0) 2022.08.30
49. 리눅스 개인 ppa 만들기  (0) 2022.08.26
48. How to write Shell Script in Linux  (0) 2022.08.24