DDoS(Distributed Denial of Service) 공격은 다수의 좀비 PC나 서버에서 동시에 대량의 트래픽을 발생시켜 서비스를 마비시키는 공격입니다. 공격 유형에 따라 대응 방법이 다르므로, 유형을 정확히 파악하는 것이 중요합니다.

레이어별 분류

L7 (애플리케이션): HTTP Flood, Slowloris, CC 공격
L4 (전송):         SYN Flood, UDP Flood, ACK Flood
L3 (네트워크):     ICMP Flood, IP Fragmentation

L3/L4 볼류메트릭 공격

UDP Flood

대량의 UDP 패킷을 임의의 포트로 전송합니다. 서버는 각 패킷을 처리하고 ICMP Destination Unreachable 메시지를 반환하느라 자원이 고갈됩니다.

특징: 대역폭 소모, 수백 Gbps까지 발생 가능 대응: 업스트림 필터링, 불필요한 UDP 포트 차단

# iptables로 UDP 트래픽 제한
iptables -A INPUT -p udp -m limit --limit 100/s --limit-burst 200 -j ACCEPT
iptables -A INPUT -p udp -j DROP

SYN Flood

TCP 3-way 핸드셰이크의 첫 단계(SYN)만 보내고 ACK를 보내지 않아 서버의 연결 대기 큐를 가득 채웁니다.

특징: 서버 연결 자원 소모, 정상 사용자 접속 불가 대응: SYN Cookie 활성화

# SYN Cookie 활성화 (Linux)
echo 1 > /proc/sys/net/ipv4/tcp_syncookies

# 영구 설정
echo 'net.ipv4.tcp_syncookies = 1' >> /etc/sysctl.conf
sysctl -p

ICMP Flood (Ping Flood)

대량의 ICMP Echo Request(ping)를 전송합니다.

대응:

# ICMP 응답 비활성화
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

L7 애플리케이션 공격

HTTP Flood

정상적인 HTTP GET/POST 요청을 대량으로 발생시킵니다. 각 요청이 서버 자원(DB 쿼리, 파일 읽기 등)을 소모하게 만듭니다.

특징: 적은 대역폭으로도 서버 마비 가능, 탐지 어려움 대응: Rate Limiting, CAPTCHA

# Nginx Rate Limiting
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=30r/m;

location /api/ {
    limit_req zone=api_limit burst=10 nodelay;
}

Slowloris

HTTP 연결을 열어둔 채 헤더를 아주 천천히 전송하여 서버의 동시 연결 수를 고갈시킵니다.

특징: 매우 적은 대역폭으로 서버 마비 가능 대응: 연결 타임아웃 설정

# Nginx 타임아웃 설정
client_header_timeout 10s;
client_body_timeout 10s;
send_timeout 10s;
keepalive_timeout 15s;

공격 탐지 방법

# 초당 SYN 패킷 수 확인
watch -n 1 'netstat -s | grep "SYN"'

# 연결 상태별 수 확인
ss -tan | awk '{print $1}' | sort | uniq -c | sort -rn

# 특정 IP 연결 수 상위 20개
ss -tn | awk 'NR>1{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -20

# Nginx 초당 요청 수
tail -f /var/log/nginx/access.log | awk '{print $4}' | uniq -c

TCP 커널 파라미터 최적화

cat >> /etc/sysctl.conf << 'EOF'
# SYN 대기 큐 크기 증가
net.ipv4.tcp_max_syn_backlog = 65536

# TIME_WAIT 소켓 재사용
net.ipv4.tcp_tw_reuse = 1

# 연결 추적 테이블 크기
net.netfilter.nf_conntrack_max = 1048576

# 백로그 큐 크기
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 65536
EOF

sysctl -p

TCP-80.NET의 DDoS 대응

저희는 모든 서버에 네트워크 레이어 DDoS 방어를 기본 제공합니다. L7 레이어 공격이나 대규모 공격이 발생하면 웹 프록시 서비스나 DDoS 방어존 추가를 검토해 보세요.

텔레그램 @tcp80net으로 현재 공격 상황을 공유해 주시면 빠르게 대응 방안을 안내해 드립니다.