네트워크 공부 중, WAF를 실제로 적용해보고 싶다는 생각이 들어 실습해보게 됐다. 이를 정리한 내용이다.
EC2 서버 구성
서버는 파이썬 수업에서 2일동안 만든 SSTI fuzzer 테스팅을 위해 만든 서버로 진행하겠다. 그러기 위해서 docker와 docker-compose를 설치해주자.
docker 및 docker-compose 설치
sudo apt update
sudo apt install docker.io -y
위 명령어로 우선 docker를 설치해주자.
systemctl status docker

systemctl 명령어로 정상적으로 동작하는지 확인해주자.
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" \
-o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
위 명령어로 docker-compose를 설치해주고 실행 권한을 부여해주자.
sudo docker-compose -v

docker-compose가 제대로 설치되었는지 확인해보자.
깃허브로 테스트 서버 설치
sudo apt install git -y
깃허브에 올린 테스트 서버를 가져오기 위해 git을 설치해주자.
git -v

git clone https://github.com/junwonheo/jwcsSstiFuzzer.git
위 명령어로 테스트 서버를 가져오자.
cd jwcsSstiFuzzer/
sudo docker-compose up
서버가 돌아가고 있지만 아직 ec2의 보안 그룹을 설정하지 않아서 접속이 안될 것이다. 보안 그룹을 설정해주자.
보안 그룹 설정

위와 같이 5000번 포트와 5001번 포트에 대해 인바운드 규칙 설정을 해주자.
본 실습에서는 5001번에 대해서만 대상 그룹으로 설정해서 load balancer와 묶을 것이기는 하다. 5000번 포트는 본 실습에서 쓰이지 않을 것이니 설정 하지 않아도 무방하다.

그럼 위와 같이 서버에 접속이 되는 것을 확인할 수 있다.
Load Balancer 구성
waf를 구성하려면 load balancer 혹은 api gateway와 같은 HTTP 기반 AWS 리소스를 설정해야한다. 따라서 필자는 load balancer를 구성해보겠다.

application load balancer를 선택했다. 이번 실습은 waf 설정을 위한 load balancer 구성이기 때문에 각 유형의 차이점은 나중에 공부하겠다.
load balancer를 처음 구성하면서 헤맸던 부분만 골라서 확인해보겠다.
가용 영역 및 서브넷

자신이 사용할 ec2가 속한 서브넷을 선택해야 한다. 필자는 ap-northeast-2c를 선택했고, 2개 이상 선택해야해서 아무거나 더 눌러줬다.
보안 그룹 설정

보안 그룹도 설정해주어야한다. default로는 외부에서 접근하기에 부적절할 수 있다. 포트번호 뿐만 아니라 허용 대상(IP)까지 확인해주어야한다. 필자는 여기서 꽤 헤맸었다.

인바운드 규칙으로 80포트를 허용해주자.
리스너 및 라우팅

여기서 프로토콜과 포트는 어떤 프로토콜과 어떤 포트로 요청을 받을 것인지를 의미한다. 앞서 보안 그룹 설정과 맞춰서 80포트로 설정하겠다.
대상 그룹도 지정해줘야한다. 대상 그룹은 우리가 라우팅할 ec2 서버를 그룹으로 설정하면 된다.

여기서 포트 설정이 또 있는데, 아무런 값을 입력해도 운영이 되길래 당황했었다. 이후에 ec2 대상을 선택하는데 각각에 대해 따로 포트를 설정할 수 있다. 따라서 해당 포트를 대충 입력해도 운영에 지장이 없었던 것이다. 해당 포트는 기본값 개념인 것.
[참고]

여기서 인스턴스를 등록할 수 있다. 인스턴스에 5001을 설정하여 `아래에 보류 중인 것으로 포함`을 눌러주면 된다.

로드 밸런서를 생성해주면 위와 같이 프로비저닝 중이라는 것을 확인할 수 있다. 몇 분이 소요되니 그 동안 waf를 설정해주자.
WAF 설정

WAF를 설정할 때 어떤 요청을 방어할 것인지 규칙을 세울 수 있다. Add rules를 눌러 규칙을 세우자.

(\{\{|\}\})
위와 같이 설정했다.
POST 요청에 대해 검사를 하는 것이므로 body를 검사해주자.

associated AWS resources에서 Add AWS resources를 눌러주자.

앞서 생성한 loadbalancer를 선택해주면 된다.
동작 확인

위와 같이 SSTI 공격을 시도해보겠다.

403 Forbidden이 뜨면서 block된 것을 확인할 수 있다.

전체적인 네트워크 아키텍쳐를 그려보면 위 그림과 같다.
'시큐아' 카테고리의 다른 글
| 지뢰 찾기 무적 On/Off 핵 만들기 (0) | 2025.07.22 |
|---|---|
| NT Header, Image Section Header, IAT란? (0) | 2025.07.21 |
| [시큐아] 정보보호 개론 (0) | 2025.07.10 |
| [온택트 융합보안] 리눅스 기초 (0) | 2025.07.05 |