이전 프로젝트를 진행할 때 각자 환경 문제로 실행하지 못하는 경우가 너무 많아, 이번에는 같은 환경을 공유할 수 있도록 도커나 클라우드를 이용하기로 했다.
다들 도커를 처음 이용하기 떄문에 도커로 준비하는 과정이 실패할 수도 있다. 이를 대비하기 위해 AWS 클라우드 상에서도 환경을 세팅해보기로 했다. 둘다 해보고 되는 쪽으로 결정해보기로. AWS 공부도 할 겸.
AWS
AWS에서 환경을 구축하기 전에 기본 개념을 짚어본다.
- VPC (Virtual Private Cloud): AWS라는 거대한 땅 위에 긋는 '우리만의 사유지(비공개 네트워크)'. 이 안에서 서버를 만든다.
- EC2 (Elastic Compute Cloud): 사유지 위에 짓는 '집(가상 컴퓨터)'. 사용할 Ubuntu 서버에 해당한다.
- 보안 그룹 (Security Group): 집 앞을 지키는 '경비원(방화벽)'.
- 키 페어 (Key Pair): 집 현관문의 '열쇠'. 비밀번호 대신 사용하는 암호화된 파일(.pem)로, 이것을 잃어버리면 서버에 영영 접속할 수 없다. 절대 유출되어서는 안 된다.
- IAM (Identity and Access Management): AWS 콘솔(웹사이트)에 로그인하는 사용자 관리 권한. (이번에는 루트 계정이나 관리자 계정으로 진행한다고 가정)
1. 인스턴스 생성

EC2 - 인스턴스 시작

AMI는 ubuntu 24.04, 인스턴스 유형은 t2.micro 선택

새 키페어 생성. RSA, pem 선택
보안 그룹: [보안 그룹 생성] 선택.
SSH (TCP 22): 소스 유형을 [내 IP]로 선택.
스토리지: 30GiB 이내로 설정
연결: 터미널에서 ssh -i "team-key.pem" ubuntu@<내-EC2-퍼블릭-IP>
2. 연결 후 nmap, nuclei 설치
# 1. 패키지 목록 업데이트 및 업그레이드
sudo apt update && sudo apt upgrade -y
# 3. Nmap 설치
sudo apt install nmap -y
# 4. Nuclei 설치 (Go 언어 기반 툴이므로 바이너리를 직접 다운로드)
wget https://github.com/projectdiscovery/nuclei/releases/download/v3.5.1/nuclei_3.5.1_linux_amd64.zip
sudo apt install unzip -y
unzip nuclei_3.5.1_linux_amd64.zip
sudo mv nuclei /usr/local/bin/
# 설치 확인
nuclei -version

3. postgres 설치
# 1. PostgreSQL 설치
sudo apt install postgresql postgresql-contrib -y
# 2. 서비스 시작 확인
sudo systemctl start postgresql
sudo systemctl enable postgresql
# 3. 접속 및 기본 설정 (postgres 계정으로 전환)
sudo -i -u postgres
psql
# (이제 psql 프롬프트 내부입니다)
-- 팀원들이 쓸 사용자와 비밀번호 생성
CREATE USER <user> WITH PASSWORD '<Password>';
-- 프로젝트용 DB 생성
CREATE DATABASE project_db OWNER teamuser;
-- 권한 부여
GRANT ALL PRIVILEGES ON DATABASE project_db TO teamuser;
-- 나가기
\q
# (다시 우분투 쉘로 복귀)
exit

4. DVWA 설치
# 1. 웹 서버 및 데이터베이스 설치 (LAMP 스택)
sudo apt install apache2 mariadb-server mariadb-client php php-mysqli php-gd -y
# 2. MariaDB 보안 설정 및 DB 생성 (DVWA용)
sudo mysql -u root
# (SQL 프롬프트 진입)
CREATE DATABASE dvwa;
CREATE USER 'dvwa'@'localhost' IDENTIFIED BY 'password123';
GRANT ALL ON dvwa.* TO 'dvwa'@'localhost';
FLUSH PRIVILEGES;
EXIT;
# 3. DVWA 다운로드 및 설정
cd /var/www/html
sudo git clone https://github.com/digininja/DVWA.git
sudo chmod -R 777 DVWA/ # 실무에선 위험하지만, 실습 편의를 위해 권한 개방
# 4. 설정 파일 생성
cd DVWA/config
sudo cp config.inc.php.dist config.inc.php
# 5. 설정 파일 수정 (DB 비밀번호 입력)
# nano 에디터로 파일을 엽니다.
sudo nano config.inc.php
설정 파일 수정 내용
$_DVWA[ 'db_user' ] = 'dvwa';
$_DVWA[ 'db_password' ] = 'password123'; -- 아까 설정한 비밀번호
수정 후 Ctrl + O (저장) -> Enter -> Ctrl + X (종료).
# 6. Apache 재시작
sudo systemctl restart apache2
5-1. 보안 그룹 수정 (팀원 초대)
- AWS 콘솔 -> EC2 -> 왼쪽 메뉴 [보안 그룹] 클릭.
- 아까 만든 보안 그룹 체크 -> 하단 [인바운드 규칙] 탭 -> [인바운드 규칙 편집]
- 규칙 추가 (SSH):
- 유형: SSH (22)
- 소스: 팀원의 IP
- 설명: Team Member A Hom
- 규칙 추가 (DVWA 웹 접속용):
- 유형: HTTP (80)
- 소스: 팀원들의 IP들만 각각 추가
- [규칙 저장] 클릭.
5-2. 키 페어(.pem) 공유
- 다운로드 받은 .pem 파일은 물리적인 열쇠.
- 공유 방법: 비공개 채널로 팀원들에게 파일 전송
- 주의: 깃허브(GitHub)나 블로그에 이 파일 내용을 올리면 절대 안 됨
5-3. 접속 테스트
팀원들에게 다음 정보를 주고 접속해보라고 하기.
- SSH: ssh -i team-key.pem ubuntu@<서버-퍼블릭-IP>
- DVWA: 웹 브라우저 주소창에 http://<서버-퍼블릭-IP>/DVWA 입력
- 초기 화면에서 [Create / Reset Database] 버튼을 한 번 눌러주면 세팅 완료
6. 세팅 테스트
# 1. Nmap 확인
nmap --version
# 결과: Nmap version 7.xx ... 라고 뜨면 성공
# 2. Nuclei 확인
nuclei -version
# 결과: Nuclei Engine Version: v2.9.8 ... 라고 뜨면 성공
데이터베이스 접속
psql -h localhost -d project_db -U teamuser
비밀번호 입력 후 프롬프트가 `project_db=>` 모양으로 바뀌는지 확인, `\q`로 나가기
# 아파치 웹서버와 마리아DB가 'active (running)' 상태인지 확인
systemctl status apache2
systemctl status mariadb
실제 브라우저 접속: http://<내-EC2-퍼블릭-IP>/DVWA
