2021.06.23 - [오라클 클라우드] - 완전무료서버셋팅2) 인스턴스 원격 접속 [Oracle Cloud Always Free, SSH, 인스턴스, 가상 컴퓨터]
인스턴스에 원격 접속하는 방법은 위 포스팅 참고바람
이번에는 Ubuntu 환경에서 Tomcat과 Nginx를 설치하여 도메인을 연결해볼건데, 도메인은 이미 구매하여 설정완료했다는 전제하에 포스팅을 진행할 예정이다.
도메인 구매 및 Cloudflare 에 관련된 포스팅은 추후에 작성하려고 함.
왜 굳이 Tomcat과 Nginx를 사용했는지는.. 따로 이유는 없고 그냥 인스턴스 하나 망치기 전에 Tomcat과 Nginx로 구축했었기 때문에 똑같은 설정으로 재구축할거다.. 암튼 그런거다..
1. root 계정으로 전환
sudo -i
2. apt의 패키지 리스트를 업데이트/업그레이드
apt update
apt upgrade
apt update 는 설치가 가능한, 즉 설치가 되어있지 않은 패키지에 대하여 최신버전으로 업데이트하고
apt upgrade 는 이미 설치되어 있는 패키지를 최신버전으로 업그레이드한다. (현재 포스팅에선 선택사항임)
3. 필요한 패키지들을 다운로드
본인은 JDK 1.8 (Java 8) 을 사용할 것이기 때문에 Tomcat9를 다운로드받아 사용할 것이지만, 그 외의 버전을 사용하고 싶다면 아래 페이지를 참고해 본인의 Java 스펙에 맞춰 다운로드 받으면 된다.
추가로 다운로드 도중 y/n 뜨는건 추가 디스크 공간을 사용해야한다는 메세지라 그냥 y하면 됨
http://tomcat.apache.org/whichversion.html
- jdk 설치
apt install openjdk-8-jdk //jdk 1.8
/*설치생략*/
java -version //Java 버전확인
openjdk version "1.8.0_292" 와 같은 jdk 버전이 출력되면 정상설치가 된거고, Command 'java' not found 와 같은 메세지가 출력되면 jdk가 제대로 설치되지 않은 것이므로 재설치를 시도해본다.
- tomcat 설치
apt install tomcat9
- nginx 설치
echo "deb http://nginx.org/packages/mainline/ubuntu `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list
curl -fsSL https://nginx.org/keys/nginx_signing.key | sudo apt-key add -
apt-key fingerprint ABF5BD827BD9BF62
apt install nginx
출처 : https://hoing.io/archives/5340?unapproved=1947&moderationhash=8f01ae3ed8c23bb1091ab0eac5ee535d
- 방화벽관련 설치
apt install iptables-persistent
apt install netfilter-persistent
본인은 ufw가 아닌 iptables 를 사용해 방화벽을 수정하려고 하는데, iptables 의 경우 인스턴스를 재시작할 경우 방화벽설정이 날라갈 수 있으므로 위 두가지 패키지를 설치해 그 설정을 유지하려고 한다.
- net-tools 설치
apt install net-tools
방화벽을 손보고, 서버를 올리면서 netstat 같은 명령어를 심심찮게 사용할 것이기 때문에 net-tools를 설치한다.
4. 방화벽 설정
기본적으로 필요한 패키지를 모두 다운로드했다면 톰캣에서 기본적으로 사용하는 포트인 8080포트를 열어줘야 하는데,
위에서 말했듯 ufw가 아닌 iptables를 사용할 것이기 때문에 ufw를 끄고 iptables로 방화벽 설정을 해주려고 한다.
그리고 SSH 포트가 22번으로 계속 사용할 경우 좀 더 공격당하기 쉽기 때문에 SSH 포트도 같이 변경한다.
먼저 현재 열려있는 포트가 무엇이 있는지 확인해보자
netstat -nlp | grep LISTEN
vi /etc/ssh/sshd_config
ufw disable //ufw 중지
service ssh restart //ssh 재시작
iptables -I INPUT 1 -p tcp --dport 8080 -j ACCEPT //8080포트 개방
iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT //80포트 개방 (nginx)
iptables -A INPUT -p tcp --dport 22 -j DROP //22번포트 삭제
iptables -I INPUT 1 -p tcp --dport 1234 -j ACCEPT //SSH포트 개방, 본인은 1234로 했으나 자신이 정한 포트입력
netfilter-persistent save //iptables 변경사항저장
netfilter-persistent restart //netfilter-persistent 재실행
service iptables restart //iptables 재실행
netstat -nlp | grep LISTEN //LISTEN 포트 출력
하지만 우리는 로컬서버가 아니기때문에 Oracle Cloud의 인스턴스에서도 방화벽규칙을 수정해주어야 한다.
본인은 이미 전에 80포트를 추가해놔서 이미지를 첨부할 때 설명을 빠뜨렸는데, 똑같이 80포트도 추가한다
이후 수신 규칙 추가가 완료되면 주소창에 http://[공용IP주소]:8080를 입력해보면 톰캣 디폴트페이지가 나온다.
잘 설치되어 실행된 것은 확인이 되었고 nginx의 proxy_pass로 리다이렉트해줄 것이기 때문에 8080포트는 더 이상 열어놓지 않아도 된다. 8080번 포트에 대한 수신규칙도 삭제하고, 리눅스의 방화벽에서도 삭제해준다.
iptables -A INPUT -p tcp --dport 8080 -j DROP //8080번포트 삭제
netfilter-persistent save //iptables 변경사항저장
netfilter-persistent restart //netfilter-persistent 재실행
service iptables restart //iptables 재실행
그리고서 MobaXterm 을 종료하지 말고, 아직 작업중이던 터미널이 켜져있는 상태로 터미널을 하나 더 켜서 접속이 되는지 확인해봐야한다. 절대로 확인해!!!!!! 본인은 진지하다. 아주 진지하다. 궁서체다. 확인안하고 막 껐다가 인스턴스에 접근 못해서 날려먹으면 절대 내 탓이 아니다.
5. 도메인 포워딩
nginx 를 설정해야할 차례다. nginx를 까는 순간부터 실행되고 있으니 http://[공용IP]로 접속하여 잘 접속되는지부터 확인하자
음 영롱하네 나도 네가 좋아 nginx
이제 구매했던 도메인을 입력하여 tomcat으로 접근할 수 있도록 설정해보겠다.
cd /etc/nginx
cat nginx.conf
cd conf.d
vi default.conf
8080포트를 사용할거면 위에서 왜 8080포트를 닫은거냐고 물어볼 수도 있다.
proxy_pass는 내부 -> 내부 이기때문에 위에서 포트를 닫음으로써 "외부에서 8080포트에 접근하는 것"은 제한하고 "내부에서 8080포트에 접근하는 것"은 가능하도록 설정한 것이다.
외부에선 최소한의 포트만 접근가능하도록 하는 것이 맞다는 게 내 의견이다. 본인은 보안전문가가 아니기 때문에 그냥 개인적인 의견임ㅎ
8080포트로는 tomcat이 돌아가고 있기 때문에 proxy_pass로 http://localhost:8080를 설정해주면 톰캣의 경로로 이동시켜준다. 이후 nginx를 재시작해주고 도메인으로 접근해보자
service nginx restart
톰캣페이지다. 아름답다.
이로써 방화벽을 간단히 수정하고 tomcat과 nginx를 사용해 기본적인 페이지 연결을 해보았다.
다음 포스팅에서는 실제 프로젝트 war를 tomcat으로 실행시키고, 오라클 DB를 연동해보겠다.
이전글
2021.06.25 - [오라클 클라우드] - 완전무료서버셋팅3) 오라클 DB 만들기 [Oracle Cloud Always Free, ATP, 오라클, Oracle]
다음글
포스팅예정