개발
home
🛡️

AWS WAF를 이용하여 IP 차단하기

Created
2021/11/21
Tags
AWS
WAF
abusing
2021-11-21 @이영훈
social login으로 계정을 반복적으로 많이 생성하는 악성 유저를 차단하기 위해서 AWS WAF를 도입하였습니다. 지난 글에서는 AWS WAF를 이용해서 소셜 회원가입 URL 호출을 많이 하는 IP를 특정하는 내용을 기록으로 남겼습니다. 이번에는 IP를 차단하는 내용을 기록으로 남깁니다.

1. 탐지한 IP 가져오기

Region이 올바른지 확인하고 CloudWatch > Log Insights에 들어갑니다
원하는 log group을 선택하고 쿼리를 입력하고 실행합니다
저는 20번 이상의 호출을 보낸 IP를 조회하는 쿼리를 작성했습니다
fields httpRequest.clientIp | stats count(*) as requestCount by httpRequest.clientIp | filter requestCount >= 20 | sort requestCount desc | limit 10000
SQL
복사

2. IP set 추출하고 가공해서 만들기

조회한 IP를 Rule에 등록하기 편한 형태로 IPv4 set, IPv6 set을 만듭니다
저는 Python 코드를 사용해서 좀 더 쉽게 등록할 수 있게 하였습니다
Export results > Copy table to clipboard (CSV)를 클릭합니다
복사한 내용을 ip-table.csv 파일에 붙여넣습니다
main.py 파일을 실행합니다
실행하면 ip-v4-set.txt 파일과 ip-v6-set.txt 파일에 결과 생깁니다
해당 IP만 차단하기 위해서 CIDR 형식으로 서브넷 마스크를 IPv4에는 /32을 IPv6에는 /128 붙여진 결과가 생겼습니다
# ip-v4-set.txt 123.123.123.1/32 ... # ip-v6-set.txt 1aaa:1bbb:0000:1aaa:1aaa:1aaa:aaaa:1111/128 ...
Plain Text
복사

3. IP set 등록하기

AWS WAF > IP Sets > Create IP set을 들어가서 IP set을 추가합니다
IPv4 버전과 IPv6 버전을 등록할 수 있습니다

4. Rule 등록하기

AWS WAF > Web ACLs에서 원하는 ACL을 선택합니다
그리고 Rules 탭으로 들어옵니다 Add rules > Add my own rules and rule groups를 선택합니다
IP set을 선택하고 원하는 조건을 선택하고 Rule을 만듭니다
저는 다음과 같이 설정했습니다
Add rule 버튼을 누르면 우선순위 선택하는 페이지가 나옵니다
룰 우선순위(Rule Priority)를 설정하고 Save를 합니다
마찬가지로 IPv6 set도 동일하게 설정합니다
이렇게 해서 등록한 IP가 해당 API URL을 하지 못하게 막았습니다
지금은 수동으로 등록을 하였지만 나중에는 lambda 함수 설정을 통해 탐지를 해서 실시간에 가깝게 블락을 하는 방법으로 확장을 하는 방법 등을 고려할 수 있습니다