waf로 ddos 방어와 경보 생성

박건희·2022년 8월 24일
1
post-thumbnail

shelid advance를 사용하면 ddos를 방어할 수 있다.
하지만 shelid advance는 비용이 너무 많이 나간다.
그래서 비교적 저렴한 waf를 사용하여 ddos를 방어하고자 한다.
waf로 ddos를 막는방법은 속도기반규칙을 직접 만들어 webACL에 적용하여
특정 속도 이상으로 들어오는 ip에대해 제한을 걸어버려서 ddos에 대한 방어를 진행한다.

waf를 만들고 로깅하는 방법은 아래 벨로그에 정리를 해 놓았다.

링크텍스트

waf로 ddos를 방어하는 방법은 공식홈페이지에서 찾을 수 있었다.
지금 시작하는 작업은 해당 링크를 참고하여 만들었다.

링크텍스트

링크텍스트

1. 규칙그룹 생성

waf를 만들고 로깅까지 한 다음
규칙 그룹으로 들어간다.
Create Rule Group을 클릭한다.

2. 이름 설정

규칙그룹의 이름은 waf-ddos라고 하고 CloudWatch metric name의 이름도 똑같이 해준다.
그리고 리전은 서울 리전으로 설정해준다음 next를 누른다.

3. 규칙 생성

Add Rules를 클릭하고 규칙의 이름도 waf-ddos로 지정하고,
Rate-based rule를 선택해준다.

4. 속도 제한 걸기

이 시나리오에서는 모든 내부 IP를 포함하는 IP 집합을 만든다. 그런 다음 범위 축소 문에서 이 IP 집합을 제외한다.
그래서 지정한 ip외의 ip들에 한에서만 속도 제한 규칙을 적용시킨다.

공식 문서에 의하면 속도 제한은 단일 ip주소에서 5분간 허용된 최대 수를 말한다.
속도 제한은 5분 동안 허용되는 단일 IP 주소의 최대 요청 수입니다.
이 값은 지속적으로 평가되며 이 제한에 도달하면 요청이 차단된다.
해당 IP 주소에서 보낸 요청이 한도 미만으로 떨어지면 속도 기반 규칙 작업이 중단된다.

임계 값은 100~200,000,000까지 되어있어서
기준값을 2000이라고 잡는다. 기준값을 잡은 근거는 없다.
잘 몰라서 임의로 2000을 기준으로 잡은것이다.

그리고 ddos가 웹서비스와 웹어플리케이션에 대한 공격하여 자원을 소모시키는것을 막기 위해서
클라이언트 IP 필드를 기준으로 속도 제한을 지정하는 Source IP address를 선택한다.

그리고 Only consider requests that match the criteria in a rule statement
선택하여 속도 제한에 대한 요청 수 계산 기준에서 규칙 문의 기준과 일치하는 요청만
속도 제한 규칙이 고려하도록 설정한다.

그리고 If a request 를 Doesn’t match the statement (NOT)로 선택을 해서
지정한 조건과 일치하지 않을때의 조건문을 생성한다.

조건문에 입력할 statement는 다음과 같이 생성한다.

Inspect(검사)에서는 Originates from an IP address in를 선택하여
ip주소로 부터 검사를 시작하도록 설정한다.
그리고 ip set을 선택해서 생성한 ip set을 등록한다.

즉, ip set에서 생성한 source IP 주소 그룹인 teamCom을 지정하여 해당 ip 주소들만
현재 만든 속도 제한 규칙을 적용시키지 않도록 설정한다.

<teamCom는 팀에서 사용하는 팀원들의 ip를 집합시켜 놓은 그룹이다.>

그래서 if a request에서 설정한 조건,
즉 teamCom에서 지정한 ip와 외부에서 들어오는 source ip가 일치하지 않을 경우

Action에서 Block을 지정하여 전부 막아버리도록 설정을 한다.

이제 Add rule을 클릭하여 규칙을 생성해준다.

waf-ddos에 용량을 선택해준다. 일단은 최소값인 3을 선택해준다.
그리고 next를 선택해준다.

그리고 waf-ddos의 우선순위를 설정해준다.
만든 규칙은 1개 밖에 없기 때문에 그냥 next를 클릭한다.

검토 후 Create rule group을 클릭한다.

waf-ddos 규칙이 생성된것을 확인할 수 있다.

5. webACL에 적용

이제 만든 규칙을 webACL에 적용시켜야한다.
webACL에 가서 test-waf를 클릭한다.
DDOS라는 판단근거가 설정한 임계값을 넘어가기 전에는 모든 트래픽들이 허용되어야 한다.
규칙에서 정의한 2000이라는 임계값을 넘어야지만 이를 차단하도록 설정을 해야하므로
waf-ddos는 모두 Allow으로 설정해야한다.

그리고 전부 next를 클릭해준다.

그리고 Create web ACL을 클릭한다.

그리고 Rules -> Add rules를 클릭해서 Add my own rules and rule groups를
클릭한다.

Rule group을 선택하고
이름은 waf-ddos-acl로 한 다음 Rule group을 waf-ddos로 선택해준다.

그리고 Add rule을 클릭한다.

save를 클릭한다.

waf-ddos에 등록된것을 확인할 수 있다.

6. webACL 만들어서 지표 생성

webACL을 하나 만들어준다.

add rule -> add my own rules and rule groups를 클릭하여
내가 만든 waf-ddos 규칙을 추가해준다.

block을 선택 해준다.

next를 누른다.

next를 누른다.

create web acl을 클릭한다.

waf-ddos가 생성된것을 확인할 수 있다.

cloudwatch의 지표로 가서 waf-ddos가 업데이트 되었는지 확인을 한다.

7. 지표에 있는 ddos 경보 생성

경보 생성하기 위해 경보상태로 가서 경보를 생성한다.

지표 선택을 클릭한다음
지표이름이 BlockRequest waf-ddos를 클릭하여 지표선택을 클릭한다.

임계값은 정적으로 하고 보다 큼을 선택한 다음
임계값을 160이라고 설정하고 다음 버튼을 클릭한다.
기간은 1분으로 설정을 한다.

1분동안 waf-ddos의 트래픽이 160이라는 임계값 이상 들어오면 경보가 울리도록 설정한다.
그리고 다음 버튼을 클릭한다.

경보상태를 선택해준 다음에
새 주제 생성을 클릭하여 이름은 waf-ddos-alarm라고 한다음 알람 메시지를
수신할 이메일 주소를 입력 후 주제 생성을 클릭한다.
클릭 후 다음 버튼을 누른다.

경보 이름은 DDOS is Attack your aws service 라고 한다음에
설명에 DDOS is Attack your aws service.라고 한다.
그리고 다음 버튼을 눌러준다.

검토한 다음에 경보생성을 클릭해준다.

그래서 정리를 하면 webACL에서는 모두 Allow라고 설정하고
Rule groups의 waf-ddos에서 임계 속도만큼 올라가면
그때 waf-ddos에서 차단을 하도록 한다.

결론적으로는 waf 로 ddos 방어 규칙을 생성하여서
해당 규칙으로 ddos를 방어한다.

그리고 waf에서 webACL을 생성하여 비정상적인 트래픽이나 정상적인 트래픽이나
엄청나게 트래픽이 올라간다면 이를 알람으로 알려주도록 한다.

profile
hihihi

0개의 댓글