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을 위한 간단하고 효과적인 도구입니다.
# 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 -p2단계: Fail2Ban 설치
Fail2Ban은 의심스러운 활동(여러 번의 실패한 로그인 시도, 포트 스캔)을 보이는 IP 주소를 자동으로 차단합니다.
# 설치
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 status3단계: Nginx 보호
Nginx를 사용하는 경우 HTTP 플러드 공격으로부터 보호하기 위해 속도 제한을 구성하세요.
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 nginx4단계: CDN 사용
최대 보호를 위해 Cloudflare와 같은 CDN 서비스를 사용하세요. CDN은 프록시 역할을 하여 서버의 실제 IP를 숨기고 대부분의 DDoS 공격을 흡수합니다. 장점: 실제 IP 숨기기, 자동 악성 트래픽 필터링, 부하 분산, 무료 SSL/TLS, L7 보호를 위한 WAF.
- cloudflare.com에 등록(무료 플랜 사용 가능)
- 도메인을 추가하고 등록 기관에서 NS 레코드 변경
- DNS 레코드에 대해 '프록시' 모드(주황색 클라우드) 활성화
- SSL/TLS 섹션에서 SSL 모드를 'Full (strict)'로 설정
- 보안 설정에서 'DDoS 보호' 및 '봇 전투 모드' 활성화
5단계: 모니터링
정기적인 모니터링은 공격을 조기에 감지하는 데 도움이 됩니다.
# 활성 연결 모니터링
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 사용
- 의심스러운 활동에 대한 로깅 활성화 및 로그 정기 확인
- 서비스가 전역적이지 않은 경우 지리적 차단 사용 고려