설정이유
sentry로 에러를 로깅하다보면 아래와 같이 악의적인 요청들을 확인할 수 있다. 이전에 1시간 동안 1.1k 가 넘은 악의적인 요청을 처리한 경험도 있었고, 현재는 자비로 서버 비용을 처리하고 있기 때문에 이러한 악의적인 요청들을 프록시 레벨에서 처리하는 것이 중요했다.

DNS를 위해 서버 앞단에 cloudflare를 사용하고 있기 때문에 cloudflare의 WAF(Web Application Firewall)를 적용시키기로 결정했다. WAF는 사용자의 웹 브라우저와 웹 서버 사이에서, 들어오는 트래픽을 검사하고 필터링하여 악성 요청과 활동을 탐지하고 차단한다.
설정 방법
크게 Custom rules 와 Rate limiting rules를 설정하기로 했다.
Custom rules(사용자 지정 규칙)
마침 설정 방법을 잘 정리해주신 블로그가 있어 자료를 첨부한다. (https://ittraveler.tistory.com/45)
Rate limiting rules(속도 제한 규칙)
사용자 지정 규칙과 같이 제한하려는 상황을 규칙으로 설정할 수 있다. 예를 들면 아래와 같이 설정할 수 있다. 10초동안 40회 이상 동일한 IP로 요청이 들어오면 10초 동안 429 응답코드로 차단을 한다.

결과
예를 들어 사용자 지정 규칙을 "uri 패스에 favicon를 포함한 요청은 차단한다" 와 같은 규칙을 지정하면 아래와 같이 cloudflare 단에서 차단 되는 걸 확인할 수 있다.

다만 프록시를 켜줘야만 이 기능을 이용할 수 있다.

이렇게 설정 한 후 하루 정도 지나면 얼마나 차단이 되었는 지도 확인해볼 수 있다.

후기

'백엔드 개발' 카테고리의 다른 글
#062. 확장함수 + reified 적용하기 (0) | 2023.09.11 |
---|---|
#061. firebase CM 도입하기 (0) | 2023.09.09 |
#057. 쿼리개선: 피드 페이지 로직 개선 (0) | 2023.08.25 |
#056. 리팩터링: 멀티스레드 환경에서 null 제거 이해하기 (Smart cast to 'xx' is impossible, because 'xxx' is a mutable property that could have been changed by this time) (0) | 2023.08.14 |
#055. 리팩터링: Promise 객체 다루기 (0) | 2023.08.13 |