DDoS (Distributed Denial of Service) là tấn công làm tràn ngập traffic khiến server không thể phục vụ người dùng bình thường. Đây là hướng dẫn nhận biết và giảm thiểu thiệt hại.
Dấu hiệu VPS đang bị DDoS:
- Website/service đột ngột chậm hoặc không truy cập được
- Load average tăng cao bất thường (top, uptime)
- Bandwidth tiêu thụ đột biến
- Số lượng kết nối TCP tăng vọt
- Log web server đầy các request lạ từ nhiều IP
- Ping đến VPS bị timeout hoặc trễ cao
Bước 1: Xác nhận đang bị DDoS
# Xem tổng kết nối
ss -s
netstat -s | grep -E "failed|overflow|drop"
# Đếm kết nối HTTP/HTTPS
ss -tn state established | grep -E ":80 |:443 " | wc -l
# Xem SYN flood
ss -tn | grep -c SYN_RECV
# Top IP kết nối nhiều nhất
netstat -tn | grep :80 | awk "{print $5}" | cut -d: -f1 | sort | uniq -c | sort -rn | head -20
# Xem load realtime
watch -n 1 "uptime && ss -s | head -5"
Loại DDoS phổ biến:
- SYN Flood: Gửi hàng ngàn gói SYN không hoàn chỉnh → server bị đầy bảng kết nối
- HTTP Flood: Gửi hàng ngàn HTTP request hợp lệ → web server quá tải
- UDP Flood: Gửi UDP packet lớn → băng thông bị bão hòa
- Slowloris: Giữ kết nối HTTP mở lâu → hết connection pool
Bước 2: Block IP tấn công ngay lập tức
# Block 1 IP
iptables -I INPUT -s 1.2.3.4 -j DROP
# Block dải IP
iptables -I INPUT -s 1.2.3.0/24 -j DROP
# Block nhiều IP cùng lúc
for ip in 1.2.3.4 5.6.7.8 9.10.11.12; do
iptables -I INPUT -s $ip -j DROP
done
# Lưu iptables
iptables-save > /etc/iptables/rules.v4
Bước 3: Chống SYN Flood bằng kernel
# Bật SYN cookies
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
# Giảm SYN backlog timeout
echo 3 > /proc/sys/net/ipv4/tcp_synack_retries
echo 1 > /proc/sys/net/ipv4/tcp_syn_retries
# Lưu vĩnh viễn vào sysctl.conf
cat >> /etc/sysctl.conf << EOF
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_synack_retries = 3
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_max_syn_backlog = 2048
EOF
sysctl -p
Bước 4: Giới hạn kết nối với iptables
# Giới hạn 50 kết nối đồng thời từ 1 IP
iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 50 -j REJECT
# Giới hạn rate connection mới (chống HTTP flood)
iptables -I INPUT -p tcp --dport 80 -m state --state NEW -m limit --limit 30/min --limit-burst 60 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -j DROP
# Giới hạn ICMP (chống ping flood)
iptables -A INPUT -p icmp -m limit --limit 5/s --limit-burst 10 -j ACCEPT
iptables -A INPUT -p icmp -j DROP
Bước 5: Dùng Nginx rate limiting
# Thêm vào nginx.conf (http block):
limit_req_zone $binary_remote_addr zone=one:10m rate=30r/m;
limit_conn_zone $binary_remote_addr zone=addr:10m;
# Thêm vào server block:
limit_req zone=one burst=60 nodelay;
limit_conn addr 20;
Bước 6: Chuyển sang Cloudflare (khuyến nghị)
Cloudflare miễn phí có thể hấp thụ hầu hết các cuộc tấn công DDoS:
- Đăng ký tại cloudflare.com, thêm domain
- Trỏ nameserver về Cloudflare
- Bật Under Attack Mode khi bị tấn công: Security > Under Attack Mode
- Bật Bot Fight Mode: Security > Bots
- Tạo Firewall Rules chặn traffic lạ theo country, ASN, user-agent
Sau khi qua Cloudflare, cấu hình VPS chỉ nhận traffic từ Cloudflare IPs:
# Chỉ cho Cloudflare IP vào port 80/443
for ip in $(curl -s https://www.cloudflare.com/ips-v4); do
iptables -I INPUT -p tcp -m multiport --dports 80,443 -s $ip -j ACCEPT
done
iptables -A INPUT -p tcp -m multiport --dports 80,443 -j DROP
Bước 7: Cài CSF Firewall (toàn diện hơn)
# Cài CSF
wget https://download.configserver.com/csf.tgz
tar xzf csf.tgz && cd csf
sh install.sh
# Cấu hình chống DDoS trong /etc/csf/csf.conf:
CT_LIMIT = "100" # max connection per IP
CT_INTERVAL = "30" # kiểm tra mỗi 30 giây
SYNFLOOD = "1" # bật chống SYN flood
SYNFLOOD_RATE = "100/s"
SYNFLOOD_BURST = "150"
# Khởi động
csf -r
Phòng tránh DDoS lâu dài:
- Luôn dùng Cloudflare — ẩn IP thật, hấp thụ traffic tấn công
- Không để lộ IP thật — tránh dùng IP thật trực tiếp cho domain
- Cài CSF hoặc UFW — giới hạn connection rate
- Cập nhật kernel — các bản mới có cải tiến chống DDoS tốt hơn
- Tắt service không cần — giảm attack surface
- Backup thường xuyên — khi bị tấn công nặng có thể rebuild nhanh
- Liên hệ datacenter — nếu bị UDP flood lớn, datacenter có thể null-route IP tấn công từ upstream
Lưu ý: DDoS quy mô lớn (hàng Gbps) không thể chặn ở cấp VPS — cần datacenter hoặc CDN như Cloudflare hỗ trợ.