제육's 휘발성 코딩
반응형

망 구성

image

지난 포스팅에서 망 분리는 다음과 같다.

  • VPC 생성
    • CIDR C 클래스 선택
  • 서브넷 생성
    • 외부망으로 사용할 서브넷 2개
      • IP 64개 할당 (/26) 및 접근 허용
      • 데이터 센터 A, C 사용
      • 라우팅 테이블 - 모든 네트워크 (0.0.0.0) 에 대해 인터게이트웨이 생성
      • 외부망 보안 그룹 적용
    • 내부망으로 사용할 서브넷 2개
      • IP 32개 할당(/27) 및 접근 허용
      • 데이터 센터 A, C 사용
      • 라우팅 테이블 - 모든 네트워크에 대해 NAT 게이트웨이 생성
      • 내부망 보안 그룹 적용
  • EC2 생성
    • 외부망 EC2 1대, 내부망 EC2 1대
      • 외부망 : 보안 그룹 - ICMP(핑 테스트) 전체 오픈, SSH (22) 공인 IP 오픈
      • 내부망 : ICMP(핑 테스트) 전체 오픈, SSH(22) 관리망 오픈
      • t3.medium 사용
      • EIP 적용

Bastion 이란?

image

기존 망 구성에서 관리망 용도로 EC2 서버를 한대 더 증설하고 Bation을 적용하자. Bastion이란 성 외곽을 보호하기 위해 돌출된 부분을 뜻하며, 이를 아키텍쳐에 적용하여 보안을 강화할 수 있다. 예를 들어 22번 포트와 같이 SSH가 보안이 허술하다면 심각한 문제를 야기할 수 있다. Bastion을 사용하면 서비스 트래픽과 관리자용 트래픽을 구분할 수 있으며, 디도스와 같은 공격을 받더라도 Bastion 서버만 재구성하면 되므로 서비스에 피해를 최소화할 수 있다.

서브넷 생성

image

  • 기존에 내부망으로 사용하던 sasca37-internal-a 를 관리망 용도인 sasca37-bastion-a 로 변경하자.

라우팅 테이블 생성

image

  • 관리망 용도로 사용할 라우팅 테이블을 생성하고, 관리망 용도로 사용할 서브넷을 연결하자.

image

  • 전체 라우팅 테이블은 다음과 같다.

보안 그룹 생성

image

  • 보안 그룹은 다음과 같다.
    • 외부망 : 8080포트 전체 대역 오픈, 22번 포트 관리망 오픈
    • 내부망 : 3306포트 외부망 오픈, 22번 포트 관리망 오픈
    • 관리망 : 22번 포트 공인IP 오픈

EC2 생성

image

  • EC2-sasca37-bastion 이란 태그 네임으로 EC2 인스턴스를 생성하고 EIP를 적용하자. 전체 생성한 EC2는 다음과 같다.

Bastion 서버 환경 설정

공개키 생성 및 적용

## Bastion Server에서 공개키를 생성합니다.
bastion $ ssh-keygen -t rsa
bastion $ cat ~/.ssh/id_rsa.pub

## 접속하려는 서비스용 서버에 키를 추가합니다.
$ vi ~/.ssh/authorized_keys

## Bastion Server에서 접속을 해봅니다.
bastion $ ssh ubuntu@[서비스용 서버 IP]
  • 보안그룹에서 내부망과 외부망의 SSH를 전체 네트워크로 열어두고 다음과 같이 적용시켜보자.

image

  • 적용하는 과정은 다음과 같다. Bastion 서버에서 생성한 RSA 키를 내부망, 외부망 서버에 모두 키를 등록한 후 내부망, 외부망의 보안그룹에서 SSH를 관리망 대역으로 한정지어 변경하자.
bastion $ sudo vi /etc/hosts
[서비스용IP]    [별칭]

bastion $ ssh [별칭]
  • 다음과 같이 vi /etc/hosts 에서 호스트 알리아스를 설정해두자.

Shell Prompt 변경하기

$ sudo vi ~/.bashrc
  USERNAME=BASTION
  PS1='[\e[1;31m$USERNAME\e[0m][\e[1;32m\t\e[0m][\e[1;33m\u\e[0m@\e[1;36m\h\e[0m \w] \n\$ \[\033[00m\]'

$ source ~/.bashrc
  • Bastion 서버는 구분해야하는 서버이므로 쉘 프롬프트를 설정하자.

환경변수 적용하기

$ sudo vi ~/.profile
  HISTTIMEFORMAT="%F %T -- "    ## history 명령 결과에 시간값 추가
  export HISTTIMEFORMAT
  export TMOUT=600              ## 세션 타임아웃 설정 

$ source ~/.profile
$ env
  • 세션 타임아웃 설정 하여 일정 시간 동안 작업하지 않을 경우 터미널을 해제할 수 있다. 600초로 설정하자.

logger 사용하기

$ sudo vi ~/.bashrc
  tty=`tty | awk -F"/dev/" '{print $2}'`
  IP=`w | grep "$tty" | awk '{print $3}'`
  export PROMPT_COMMAND='logger -p local0.debug "[USER]$(whoami) [IP]$IP [PID]$$ [PWD]`pwd` [COMMAND] $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" )"'

$ source  ~/.bashrc

$ sudo vi /etc/rsyslog.d/50-default.conf
  local0.*                        /var/log/command.log
  # 원격지에 로그를 남길 경우 
  local0.*                        @원격지서버IP

$ sudo service rsyslog restart
$ tail -f /var/log/command.log

환경 세팅 및 자바 설치

# 현재 위치를 확인합니다.
$ pwd

# 파일시스템별 가용공간을 확인합니다.
$ df -h

# 각 디렉토리별로 디스크 사용량을 확인합니다.
$ sudo du -shc /*

# 현재 경로의 파일들(숨김파일 포함)의 정보를 확인합니다.
$ ls -al

# 소스코드를 관리할 디렉토리를 생성하고 이동합니다.
$ mkdir nextstep && cd nextstep

# git 명령어의 위치를 확인해봅니다.
$ which git && which java

$ sudo apt update
$ sudo apt install default-jre
$ sudo apt install default-jdk

빌드

$ ./gradlew clean build

# jar파일을 찾아본다.
$ find ./* -name "*jar"

실행

$ java -jar [jar파일명] & 

$ curl http://localhost:8080
  • -Dserver.port=8080 옵션을 활용해서 port를 변경할 수 있다.
  • 서버 시작 시간이 오래 걸리는 경우 $ java -Djava.security.egd=file:/dev/./urandom -jar [jar파일명] & 를 통해 해결 가능하다.
  • 터미널 세션이 끊어질 경우 background로 실행중인 프로세스에 hang-up signal이 발생해 죽는 경우가 있는데 $ nohup java -jar [jar파일명] 1> [로그파일명] 2>&1 & 를 활용하여 해결가능하다.

로그 확인

# java applicaion이 남기는 로그를 확인합니다.
$ tail -f [로그파일명]

# 파일을 압축하고 파일 소유자와 모드를 변경해봅니다.
$ tar -cvf [파일명] [압축할파일 또는 디렉터리]
$ sudo chown [소유자계정명]:[소유그룹명] [file이름] 
$ chmod [옵션] [파일명]

> https://ko.wikipedia.org/wiki/Chmod

종료

$ ps -ef | grep java
$ pgrep -f java
$ kill -2 [PID]

명령어 이력 확인

$ history

도메인 등록하기

# 80포트 접근시 8080포트로 리다이렉트 설정
sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
# 체이닝 확인
sudo iptables -t nat -L --line-number

REFERENCES

https://edu.nextstep.camp

반응형
profile

제육's 휘발성 코딩

@sasca37

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요! 맞구독은 언제나 환영입니다^^