1P by neo 2달전 | favorite | 댓글 1개

DDoS 공격을 받고 있지만 아무것도 하지 않음

  • 수주간에 걸쳐 누군가가 DDoS 공격을 시도하고 있음.
  • 서버에 수백만 건의 요청을 쏟아부어 설정 파일을 수백만 번 다운로드하려 함.
  • 최근 5일 동안에만 80만 번 이상 다운로드를 시도했으며, 설정 파일은 다운로드당 약 200MB임.
  • 대부분의 트래픽은 EU, 특히 독일과 영국에서 발생함.
  • 공격은 이 블로그 글을 쓰는 현재에도 계속 진행 중임.

이 긴박한 상황에서 우리가 하는 일

  • 공격자의 IP 주소를 차단하지 않음.
  • Cloudflare를 사용하지만 "Under Attack" 모드를 활성화하지 않음.
  • 서버 CPU는 공격 중에 대부분의 시간 동안 거의 유휴 상태임.
  • 일반적으로 거의 아무것도 하지 않음.

왜 그런가?

  • 서비스가 월 수십억 건의 요청을 문제없이 처리할 수 있으며 비용이 많이 들지 않음.
  • 약 8개의 API 서비스와 데이터베이스가 있으며, 캐싱 없이도 월 수십억 건의 요청을 처리할 수 있음.
  • Cloudflare와 무제한 대역폭을 가지고 있음.

어떻게 가능한가?

  • TablePlus 앱의 디자인은 단순하며, 이 철학은 최소한으로 유지되는 백엔드 서비스에도 적용됨.
  • Vercel이나 Netlify와 같은 제3자 서비스를 사용하지 않음. 대신 제한 없는 웹 서버를 사용함.
  • 과거에는 약한 VPS/프로세서로 인해 모놀리식이 병목 현상을 일으켰지만, 오늘날 강력한 VPS는 단일 인스턴스에서 월 수십억 건의 요청을 처리할 수 있음.
  • 따라서 각 앱에 대해 모놀리식 서비스를 구축함. 배포 및 유지 관리가 쉬움.

모놀리식에 대해 이야기해보자

  • 모든 것을 복잡하게 만드는 경향이 있지만, 압박이나 제한을 받을 때까지 문제가 되지 않음.
  • 복잡성을 싫어하므로 모놀리식을 선택함. 앱이 필요로 하는 모든 것을 단일 서비스에 통합함.
  • 배포가 간단함. 단 하나의 구성 파일, 빌드 및 배포가 필요함.
  • 의존성이 적어 디버깅과 병목 현상 식별이 쉬움.

Go나 Rust의 단일 웹 프레임워크가 올바르게 구현되면 월 수십억 건의 요청을 처리할 수 있음

  • 고성능 프레임워크를 선택함.
  • 데이터베이스를 인덱싱하여 데이터 세트가 커짐에 따라 가져오는 시간을 줄임.
  • 주 데이터베이스를 로그/사용 데이터베이스와 분리하여 성능 문제로 인해 핵심 비즈니스에 영향을 받지 않도록 함.
  • Nginx와 같은 강력한 리버스 프록시를 사용하여 요청을 핵심 API로 처리 및 분배함.
  • Cloudflare 뒤에 모든 것을 두고 적절히 구성함.
  • DDoS 보호가 있는 CDN을 사용함.
  • CDN이나 캐싱 없이 큰 다운로드 파일을 VPS에 두지 않음.

배포에 대해 이야기해보자

  • TablePlus에서는 배포 과정을 가능한 한 단순화함.
  • Docker, Kubernetes 또는 컨테이너를 사용하지 않고 환경 설정이 필요 없음.
  • 바이너리를 사용함. 바이너리는 복사하여 리눅스 서버에서 프로세스로 실행할 수 있음.
  • Go와 Rust를 선택함. 고성능 언어이며 배포를 위한 바이너리 파일을 생성할 수 있음.

업데이트

  • Vercel이 연락을 취해왔으며, 이러한 상황에서 사이트를 보호할 수 있는 기능이 있다고 함.
  • 지출 관리를 통해 지출 한도를 설정할 수 있고, 공격 챌린지 모드가 있어 CF의 "Under Attack" 모드와 유사함.

GN⁺의 의견

  • 이 기사는 DDoS 공격에도 불구하고 안정적인 서비스 운영을 가능하게 하는 강력한 인프라와 단순화된 배포 전략의 중요성을 강조함.
  • 모놀리식 아키텍처는 복잡성을 줄이고, 배포를 간소화하며, 성능 최적화에 유리한 점을 보여줌.
  • 클라우드 서비스와 CDN을 효과적으로 활용하여 DDoS 공격에 대한 탄력성을 갖춘 것은 다른 기업들에게도 좋은 사례가 될 수 있음.
  • 이러한 접근 방식은 특히 초기 단계의 스타트업이나 중소기업에게 비용 효율적인 인프라 구축에 대한 통찰을 제공함.
  • 그러나 모든 시스템이나 애플리케이션에 모놀리식 접근 방식이 적합한 것은 아니므로, 각각의 요구 사항과 상황에 맞는 아키텍처를 선택하는 것이 중요함.
Hacker News 의견
  • 첫 번째 댓글 요약:

    • 댓글 작성자는 웹사이트의 성능에 대해 자랑하는 것이 과장되었다고 생각함.
    • "월간 10억 요청"은 초당 몇 백 요청에 불과하며, 이는 사소한 수준이며 DDoS 공격이라고 볼 수 없음.
    • 사이트가 CDN(Cloudflare) 뒤에 있기 때문에, 성능 관련하여 특별한 것을 한 것으로 보이지 않음.
    • 200MB 파일이 CDN을 통해 캐시되고 제공되는 것은 당연한 일이며, 이를 자랑하는 것은 부적절한 설계로 보임.
  • 두 번째 댓글 요약:

    • 월간 4TB의 트래픽은 DDoS 공격으로 보기 어려움.
    • 월간 600만 요청은 초당 2회 요청에 불과하며, 이 정도 규모에서는 단일 서비스(monolith service)를 운영하는 것이 문제가 되지 않음.
    • 대부분의 요청은 Cloudflare가 CDN 수준에서 캐싱하여 처리할 것으로 가정됨.
  • 세 번째 댓글 요약:

    • 사이트는 단순한 정적 마케팅 사이트로, 토론 포럼이 없으며 피드백은 GitHub 이슈를 통해 처리됨.
    • 정적 파일이 매일 수백만 번 다운로드되는 것을 간단한 배포로 처리할 수 있다고 자랑하는 것은 이상함.
    • Cloudflare가 모든 완화 작업을 수행하고 있으며, 실제로는 교통량이 매우 적어서 필요하지 않을 수도 있음.
  • 네 번째 댓글 요약:

    • 설명된 추가 트래픽은 "서비스의 무의미한 남용"으로 보이며, 실제 DDoS 공격으로 보기 어려움.
    • 이러한 남용이 비용이나 자원 고갈 문제를 일으키지 않는 한 무시할 수 있음.
    • 자동 확장 인프라의 대부분이 유용한 작업을 수행하지 않는다는 이야기는 흔하며, 트래픽을 주시하는 것이 좋음.
    • 로깅에 대한 불만이 있으며, 로그 저장소가 저렴하고 풍부하다면 문제가 되지 않지만, 남용 트래픽을 자동으로 분류하고 일상적인 처리를 억제하는 것이 좋음.
  • 다섯 번째 댓글 요약:

    • 영국에서 발생한 월간 5천만 요청은 단일 스크립트가 실행되어 발생할 수 있는 수준임.
    • 작성자는 Go 서버가 최적화 없이도 초당 250배 많은 요청을 처리할 수 있을 것으로 기대함.
    • 조언 자체는 나쁘지 않지만, 그들의 숫자가 그 조언의 증거가 되지는 않음.
  • 여섯 번째 댓글 요약:

    • 바이너리를 배포하는 것이 도커를 사용하는 것보다 선호될 수 있지만, 바이너리를 실행하는 호스트에 대한 보안 문제가 있음.
    • 단일 VPS에서 호스팅되는 단일 서비스(monolith service)는 비용이 저렴하고 좋지만, 하드웨어에 문제가 발생하면 상당한 다운타임이 발생할 수 있음.
    • 모든 것을 단일 서비스에 통합함으로써 깊이 있는 방어(defence in depth)를 잃을 수 있으며, 이는 보안 문제가 발생할 경우 데이터 저장소에 대한 접근을 허용할 수 있음.
  • 일곱 번째 댓글 요약:

    • "월간 10억 요청"은 단일 서버에서 처리할 수 있는 수준으로, 단일 잘못된 스크립트가 이 정도의 트래픽을 발생시킬 수 있음.
  • 여덟 번째 댓글 요약:

    • 월간 수십억 요청이 큰 DDoS 공격으로 간주되는지에 대한 의문을 제기함.
  • 아홉 번째 댓글 요약:

    • 각 앱에 대해 단일 서비스(monolith service)를 구축하는 것은 배포 및 유지 관리가 쉬움.
    • 도커, 쿠버네티스, 종속성, 런타임 환경 없이 단순히 바이너리 파일만 배포하면 됨.
  • 열 번째 댓글 요약:

    • 제목을 읽고 더 큰 내용을 기대했지만, Cloudflare 뒤에 있다는 것은 중요한 요소임.
    • 트래픽 분포에 따라 Cloudflare 없이도 VPS에서 잘 운영될 수 있음.
    • 러시아의 layer7 DDoS 공격은 주요 제공업체들이 용량 문제로 인해 실패하는 정도로 큰 규모임.