← 전체 목록
병원홈페이지보안

Nginx rate limit 설정으로 소규모 DDoS 공격을 버틸 수 있습니다

ℹ️ 본 글은 정보 제공 목적이며, 광고·제휴 링크가 포함될 수 있습니다.

소규모 DDoS 공격 기본 대응 방법을 실전에서 배운 것은 특정 검진 이벤트 예약 당일이었습니다. 사이트가 갑자기 응답을 멈췄고, 처음엔 트래픽이 몰린 줄 알았습니다. Nginx 로그를 보니 수십 개의 IP에서 동시에 대량 요청이 들어오는 전형적인 DDoS 패턴이었습니다. Cloudflare가 없는 상황에서 서버 자체적으로 버텨야 했고, Nginx의 rate limiting으로 어느 정도 완화할 수 있었습니다.

Nginx Rate Limiting 설정

Nginx의 limit_req_zonelimit_req 지시어로 IP당 요청 속도를 제한합니다.

# nginx.conf의 http 블록에 추가
http {
    # 요청 제한 존 정의 (IP별로 초당 10회)
    limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
    
    # 연결 수 제한
    limit_conn_zone $binary_remote_addr zone=addr:10m;
}
# server 블록에서 적용
server {
    location / {
        limit_req zone=one burst=20 nodelay;
        limit_conn addr 20;
        # ...
    }
}
  • rate=10r/s: IP당 초당 10회 요청 허용
  • burst=20: 순간적으로 20회까지 허용 (급증 대비)
  • nodelay: 허용 범위 초과 시 즉시 503 반환

특정 IP 즉시 차단

공격 중 특정 IP를 즉시 차단하는 방법입니다.

# UFW로 즉시 차단
sudo ufw deny from 공격IP

# Nginx에서 차단 (nginx.conf에 추가)
location / {
    deny 공격IP;
    allow all;
}

# 적용
sudo nginx -t
sudo systemctl reload nginx

로그에서 상위 공격 IP를 추출하는 명령:

awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20

장기적 대응: Cloudflare 도입

소규모 DDoS라도 서버만으로는 한계가 있습니다. Cloudflare 무료 플랜으로도 기본적인 DDoS 완화 기능이 제공됩니다.

Cloudflare 무료 플랜 주요 기능:

  • DDoS 완화 (레이어 3, 4, 7)
  • 봇 필터링
  • Rate Limiting (일부 제한)
  • CDN으로 서버 원본 IP 숨기기

서버 앞에 Cloudflare를 두면 공격 트래픽이 서버에 직접 도달하지 않습니다. 실제 공격이 없더라도 병원 사이트에 Cloudflare 도입은 강력히 권장합니다. 속도 개선 효과도 함께 얻을 수 있습니다.

편집 정책

AI가 초안을 생성하고, 의료기관 인프라 운영자가 1차 데이터 기반으로 최종 검수·승인합니다.

작성·검수: WavePix 운영자 (의료기관 3곳 인프라 전담)