블로그로 돌아가기
1월 19, 2026가이드

VPS를 DDoS 공격으로부터 보호하는 방법: 실용 가이드

방화벽, 속도 제한 및 기타 검증된 방법을 사용하여 VPS를 DDoS 공격으로부터 보호하는 포괄적인 가이드.

VPS를 DDoS 공격으로부터 보호하는 방법: 실용 가이드

DDoS 공격(분산 서비스 거부)은 몇 분 안에 서버를 오프라인으로 만들 수 있으며, 수익 손실, 고객 불만 및 평판 손상으로 이어집니다. 2026년에는 이러한 공격이 더욱 정교하고 접근하기 쉬워졌습니다. 다행히 현대적인 보호 방법도 발전했습니다. 이 가이드는 가장 일반적인 유형의 DDoS 공격으로부터 Hiddence VPS를 보호하는 방법을 보여줍니다.

DDoS 공격이란 무엇인가요?

DDoS 공격은 여러 컴퓨터(봇넷)가 동시에 서버에 요청을 보내 리소스를 압도하여 합법적인 사용자가 사용할 수 없게 만드는 경우 발생합니다.

주요 DDoS 공격 유형

  • 볼류메트릭 공격(L3/L4): UDP 플러드, ICMP, SYN 플러드 — 네트워크 대역폭 압도
  • 애플리케이션 계층 공격(L7): HTTP 플러드, Slowloris — 애플리케이션 계층 대상
  • 프로토콜 공격: 네트워크 프로토콜의 취약점 악용

내장 Hiddence 보호

모든 Hiddence VPS에는 기본 레이어 3-4 DDoS 보호(네트워크 수준)가 포함되어 있습니다. 이것은 대부분의 볼류메트릭 공격을 자동으로 필터링합니다. 그러나 레이어 7(애플리케이션) 공격은 추가 구성이 필요합니다.

1단계: 방화벽 설정

첫 번째 방어선은 적절한 방화벽 구성입니다. UFW(Uncomplicated Firewall)는 Ubuntu/Debian을 위한 간단하고 효과적인 도구입니다.

bash
# UFW 설치
sudo apt update && sudo apt install ufw -y

# SSH 허용(중요! UFW 활성화 전에 이것을 수행)
sudo ufw allow 22/tcp

# HTTP 및 HTTPS 허용
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# UFW 활성화
sudo ufw enable

# 상태 확인
sudo ufw status verbose

# 고급 보호 규칙:
# SSH 연결 제한(무차별 대입 공격 보호)
sudo ufw limit 22/tcp

# ICMP 핑 플러드 차단
sudo nano /etc/ufw/before.rules
# *filter 다음에 추가:
-A ufw-before-input -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
-A ufw-before-input -p icmp --icmp-type echo-request -j DROP

# SYN 플러드에 대한 보호
sudo nano /etc/sysctl.conf
# 추가:
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 5

# 변경 사항 적용
sudo sysctl -p

2단계: Fail2Ban 설치

Fail2Ban은 의심스러운 활동(여러 번의 실패한 로그인 시도, 포트 스캔)을 보이는 IP 주소를 자동으로 차단합니다.

bash
# 설치
sudo apt install fail2ban -y
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

# SSH 및 HTTP 보호를 위한 구성
# 로컬 구성 생성
sudo nano /etc/fail2ban/jail.local

# 추가:
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 5
banaction = ufw

[sshd]
enabled = true
port = 22
logpath = /var/log/auth.log

[nginx-http-auth]
enabled = true
filter = nginx-http-auth
port = http,https
logpath = /var/log/nginx/error.log

[nginx-limit-req]
enabled = true
filter = nginx-limit-req
port = http,https
logpath = /var/log/nginx/error.log

# Fail2Ban 재시작
sudo systemctl restart fail2ban

# 상태 확인
sudo fail2ban-client status

3단계: Nginx 보호

Nginx를 사용하는 경우 HTTP 플러드 공격으로부터 보호하기 위해 속도 제한을 구성하세요.

bash
sudo nano /etc/nginx/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;
    
    # Slowloris 보호
    client_body_timeout 10s;
    client_header_timeout 10s;
    keepalive_timeout 5s 5s;
    send_timeout 10s;
    
    # 나머지 구성...
}

# server 블록에 추가:
server {
    location / {
        # 요청 제한 적용
        limit_req zone=one burst=20 nodelay;
        
        # 연결 제한: IP당 최대 10개
        limit_conn addr 10;
        
        # 구성...
    }
}

# 구성 테스트 및 다시 로드
sudo nginx -t
sudo systemctl reload nginx

4단계: CDN 사용

최대 보호를 위해 Cloudflare와 같은 CDN 서비스를 사용하세요. CDN은 프록시 역할을 하여 서버의 실제 IP를 숨기고 대부분의 DDoS 공격을 흡수합니다. 장점: 실제 IP 숨기기, 자동 악성 트래픽 필터링, 부하 분산, 무료 SSL/TLS, L7 보호를 위한 WAF.

  • cloudflare.com에 등록(무료 플랜 사용 가능)
  • 도메인을 추가하고 등록 기관에서 NS 레코드 변경
  • DNS 레코드에 대해 '프록시' 모드(주황색 클라우드) 활성화
  • SSL/TLS 섹션에서 SSL 모드를 'Full (strict)'로 설정
  • 보안 설정에서 'DDoS 보호' 및 '봇 전투 모드' 활성화

5단계: 모니터링

정기적인 모니터링은 공격을 조기에 감지하는 데 도움이 됩니다.

bash
# 활성 연결 모니터링
watch -n 1 'ss -s'

# 연결 수별 상위 IP 보기
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

# 실시간 로그 보기
sudo tail -f /var/log/nginx/access.log
sudo journalctl -u nginx -f

# Fail2Ban에서 차단된 IP 확인
sudo fail2ban-client status sshd

비상 조치

공격이 이미 진행 중인 경우 다음 조치를 취하세요:

  • 소스 식별: 'netstat' 또는 로그를 사용하여 공격 IP 식별
  • 임시 차단: sudo ufw insert 1 deny from ATTACKING_IP
  • 전체 서브넷 차단: sudo ufw deny from 123.45.0.0/16
  • 속도 제한 제한: Nginx 제한을 임시로 1-5 req/s로 낮춤
  • 지원팀에 문의: 고급 보호 활성화를 위해 Hiddence 지원팀에 연락
  • Cloudflare에서 'Under Attack Mode' 활성화(사용하는 경우)

베스트 프랙티스

  • CDN을 사용하는 경우 서버의 실제 IP를 공개하지 마세요
  • 시스템을 정기적으로 업데이트: sudo apt update && sudo apt upgrade
  • 서버 접속을 위해 비밀번호 대신 SSH 키 사용
  • 기본 SSH 포트(22)를 비표준으로 변경
  • 빠른 복구를 위해 자동 백업 설정
  • 중요한 서비스에 대해 별도의 IP 사용
  • 의심스러운 활동에 대한 로깅 활성화 및 로그 정기 확인
  • 서비스가 전역적이지 않은 경우 지리적 차단 사용 고려