bastion 인스턴스에 VPN 설치하여 보안 강화하기

졸업 작품팀에서 나는 백엔드 파트 및 인프라 구축을 담당하게 되었다. Terraform과 AWS를 사용하여 내가 구축한 인프라 환경의 보안에 신경쓰고자 VPN을 활용하기로 하였다.


서론

  작년 SW마에스트로 활동을 통해 나는 Terraform을 활용하여 인프라 구축을 할 수 있게 되었다. 이를 졸업 작품에서 활용하고자 하였다.

Cloud Architecture

image

개발 환경

  • bastion, was: AWS EC2 Ubuntu t2.micro
  • local: mac 14.2.1
  • terminal: Warp

본론

1. bastion 서버 - 접속

ssh -i xxx.pem ubuntu@xxx.xxx.xxx.xxx

  SSH 방식으로 bastion 인스턴스에 원격 접속 하도록 한다.

2. bastion 서버 - Docker 설치

# 1. 우분투 시스템 패키지 업데이트
sudo apt-get update

# 2. 관련 패키지 설치
sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common

# 3. Docker 공식 GPG키 추가
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

# 4. Docker 공식 apt 저장소 추가
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

# 5. 우분투 시스템 패키지 업데이트
sudo apt-get update

# 6. Docker 설치
sudo apt-get install docker-ce docker-ce-cli containerd.io

# 7. Docker 설치 확인
sudo systemctl status docker

  아래와 같은 화면이 출력된다면 정상적으로 설치가 완료된 것이다.

image

3. bastion 서버 - openvpn 설정

sudo docker run \
  --name openvpn \
  --volume openvpn-data:/etc/openvpn \
  --detach=true \
  -p 1194:1194/udp \
  --cap-add=NET_ADMIN \
  -e "OVPN_SERVER_CN=${public_ip}" \
  -e "OVPN_NETWORK=172.22.16.0 255.255.240.0" \
  -e "OVPN_ROUTES=172.22.16.0 255.255.240.0, 10.42.0.0 255.255.0.0" \
  -e "OVPN_NAT=true" \
  -e "OVPN_DNS_SERVERS=${private_ip(xxx.xxx.xxx.2)}" \
  -e "USE_CLIENT_CERTIFICATE=true" \
  wheelybird/openvpn-ldap-otp:v1.8

4. bastion 서버에서 .ovpn 파일 추출

sudo docker exec -it openvpn show-client-config

  해당 명령어를 통해 출력된 내용을 그대로 복사하여 xxx.ovpn 파일로 생성하면 된다. 필자는 Warp라는 어플리케이션을 터미널로 사용하고 있어 그대로 복사하여 내 로컬 환경에 저장할 수 있었다.

5. VPN 파일 실행

  로컬 환경에서 ovpn 파일을 실행한다. 필자는 Tunnelblick이라는 어플리케이션을 통해 VPN을 실행하였다.

6. was 서버 접근

ssh -i xxx.pem ubuntu@xxx.xxx.xxx.xxx

  SSH 방식으로 was 인스턴스에 원격 접속할 수 있다. 여기서 유의할 점은 xxx.xxx.xxx.xxx가 private_ip라는 점이다. 즉 public ip를 할당받지 않더라도 vpn을 실행하면 private ip를 통해 was 서버에 접근할 수 있다!

결론

이점

  bastion 인스턴스에 vpn을 설치하여 was에 접근할 수 있게 함으로써 얻을 수 있는 가장 큰 이점은 보안이다. bastion 인스턴스가 외부에서 내부 네트워크로의 단일 진입점 역할을 함으로써 보안 감사 및 모니터링을 간소화할 수 있으며, 이를 통해 보안 위험을 최소화할 수 있다.
  그 외에도 승인된 사용자만이 was에 접근할 수 있기 때문에 접근 제어에 있어 이점을 가질 수 있다.

TMI

  지난 번 다른 프로젝트의 환경 구축을 위해 NCP를 사용하여 VPN을 설치하였으나 동작하지 않았다. 이는 internet gateway의 유무로 판단되며 이에 대한 자세한 이유는 추후 포스팅 해보겠다.