nginx rate limit 적용하여 DOS 공격을 막아보자!

찬디·2025년 8월 20일

우테코

목록 보기
14/18

개요

데모데이날 DOS 공격으로 서비스가 다운되는 문제를 피하기 위해 nginx 설정을 합니다.
https://velog.io/@praisebak/%EC%8B%A4%EC%8B%9C%EA%B0%84-%EB%8C%80%EC%9D%91
dos 공격을 받은 날

Before

약 50개의 요청이 모두 404(거부되면 503이 뜹니다)

After

이제는 약 10개 언저리 요청에 대해서 503요청으로 반환하면서 애플리케이션 단까지 가지 않게되었습니다.


이제 애플리케이션 로그에서도 찍히지않습니다!

설정

 limit_req_zone $binary_remote_addr zone=perip:100m rate=10r/s;

 location / {
     limit_req zone=perip burst=20 nodelay;

설정값 의미

  • limit_req_zone $binary_remote_addr zone=perip:100m rate=10r/s;
    • 10r/s는 1초에 10개의 request를 의미합니다. 그 이상 요청을 제한됩니다.
  • zone=perip:100m: 각 IP 주소의 요청 상태를 저장할 메모리 공간을 만듭니다.
    • 100m는 mb를 의미하며,약 160만개의 request만 버틸 수 있습니다.
  • burst=20, burst는 유저가 10개의 이상의 요청을 보내면 지연큐로 가는데, 지연큐의 크기를 몇개까지만 허용할건지를 의미합니다.
    • 20개가 넘으면 모두 거부됩니다.

한계점

  • ip가 바뀌면 뚫립니다!(DDOS 공격)
    • WAS단에서 유저 기반 요청을 필터링해야합니다.
profile
깃허브에서 velog로 블로그를 이전했습니다.

0개의 댓글