Website bỗng dưng không vào được, VPS chập chờn, băng thông chạm trần dù bạn không chạy quảng cáo nào. Một trong những nguyên nhân có thể là tấn công DDoS. Vậy DDoS là gì, kẻ tấn công làm thế nào để một máy chủ quá tải, và người dùng VPS tự làm được gì để giảm thiệt hại? Bài này giải thích ở góc độ phòng thủ, dễ hiểu cho người không chuyên.
Tóm tắt nhanh:
- DDoS (Distributed Denial of Service) là tấn công từ chối dịch vụ phân tán: rất nhiều máy cùng gửi lưu lượng rác để mục tiêu quá tải, người dùng thật không truy cập được.
- Có ba nhóm chính: làm nghẽn băng thông, làm cạn kết nối, làm quá tải ứng dụng.
- Đợt tấn công lớn chỉ lọc được ở phía trước VPS (nhà mạng, datacenter, CDN). Trên VPS, bạn chống được các đợt nhỏ và tấn công tầng ứng dụng.
- Với website, bật Cloudflare và giữ kín IP gốc là bước đơn giản, hiệu quả rõ rệt.
DDoS là gì?
Hãy tưởng tượng một cửa hàng nhỏ bị hàng nghìn người lạ kéo đến cùng lúc, đứng chật cửa nhưng không mua gì. Khách thật không chen vào được, cửa hàng coi như đóng cửa. DDoS làm điều tương tự với máy chủ: gửi lượng truy cập vượt quá khả năng xử lý của băng thông, CPU hoặc phần mềm, khiến dịch vụ ngừng phục vụ người dùng thật.

Chữ "D" đầu tiên là Distributed (phân tán): lưu lượng không đến từ một máy mà từ rất nhiều máy ở khắp nơi. Đó thường là một botnet, mạng lưới máy tính, camera, router bị nhiễm mã độc và bị điều khiển từ xa mà chủ nhân không hay biết. Vì nguồn tấn công phân tán nên không thể chặn chỉ bằng vài địa chỉ IP.
DDoS khác với hack: kẻ tấn công thường không lấy được dữ liệu hay chiếm quyền VPS, mục tiêu là làm dịch vụ gián đoạn. Tuy vậy, DDoS đôi khi được dùng để đánh lạc hướng trong lúc thực hiện tấn công khác, nên vẫn cần theo dõi cả các dấu hiệu VPS bị xâm nhập.
Các kiểu tấn công DDoS thường gặp

1. Làm nghẽn băng thông (volumetric)
Kẻ tấn công bơm thật nhiều dữ liệu, thường bằng gói UDP, tới mức đường mạng của mục tiêu bị đầy. Một kỹ thuật phổ biến là khuếch đại: lợi dụng các máy chủ DNS, NTP cấu hình sai để biến một yêu cầu nhỏ thành phản hồi lớn gấp nhiều lần gửi về nạn nhân. Quy mô loại này đo bằng Gbps, thường vượt xa băng thông của một VPS. Bạn có thể đọc thêm về băng thông ở bài băng thông VPS là gì.
2. Làm cạn kết nối (tầng giao thức)
Thay vì làm đầy đường truyền, kiểu này khai thác cách các giao thức mạng hoạt động. Ví dụ SYN flood gửi hàng loạt yêu cầu mở kết nối TCP nhưng không bao giờ hoàn tất, khiến máy chủ giữ chỗ chờ cho tới khi hết chỗ nhận kết nối mới. Đơn vị đo là số gói tin mỗi giây.
3. Làm quá tải ứng dụng (tầng 7)
HTTP flood gửi các request trông giống người dùng thật vào những trang nặng: tìm kiếm, giỏ hàng, trang lọc sản phẩm. Lưu lượng không lớn nhưng mỗi request bắt CPU và cơ sở dữ liệu làm việc nhiều, nên website chậm rồi sập. Loại này khó phân biệt với khách thật nhất, nhưng cũng là loại bạn có nhiều cách tự xử lý nhất.
Dấu hiệu VPS hoặc website có thể đang bị DDoS

- Băng thông vào tăng vọt, chạm trần gói, trong khi bạn không có chiến dịch hay sự kiện nào.
- Website chậm hoặc trả lỗi 502, 503, 504 cho người dùng ở nhiều nơi cùng lúc.
- Log truy cập có rất nhiều request từ các IP lạ, lặp lại cùng một đường dẫn, user-agent bất thường.
- Ping tới VPS mất gói, Remote Desktop hoặc SSH chập chờn, CPU tăng cao dù không có tác vụ mới.
Cần phân biệt với các nguyên nhân khác: website lên báo hay chạy quảng cáo cũng làm lưu lượng tăng (khách thật), còn một tiến trình lỗi trên VPS cũng có thể ăn hết CPU. Bài VPS bị chậm, đầy RAM, CPU hướng dẫn cách tìm nguyên nhân.
Trên VPS Linux, vài lệnh giúp bạn nhìn nhanh tình hình kết nối:
# Đếm số kết nối theo trạng thái
ss -s
# 10 IP đang mở nhiều kết nối nhất tới VPS
ss -tn state established | awk 'NR>1 {print $4}' | cut -d: -f1 | sort | uniq -c | sort -rn | head
# 10 IP gửi nhiều request nhất trong log Nginx
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head
Nguyên lý chống DDoS: nhiều lớp lọc nối tiếp
Không có một nút bấm nào chặn được mọi kiểu DDoS. Cách làm thực tế là xếp nhiều lớp lọc, mỗi lớp chặn một phần:

- Lọc upstream: nhà mạng và datacenter có thiết bị lọc lưu lượng trước khi nó vào đường mạng của VPS. Đây là lớp duy nhất đối phó được các đợt tấn công lớn hơn băng thông của VPS. Mức độ lọc tuỳ từng nhà cung cấp, nên hỏi rõ trước khi thuê nếu dịch vụ của bạn có nguy cơ bị nhắm tới.
- CDN, reverse proxy: với website, dịch vụ như Cloudflare đứng trước VPS, hấp thụ lưu lượng bằng mạng lưới máy chủ rất lớn và che giấu IP thật của VPS.
- Trên VPS: tường lửa, giới hạn số kết nối và số request mỗi IP, chặn các IP có hành vi bất thường.
- Ứng dụng: bật cache, tối ưu truy vấn nặng để mỗi request tốn ít tài nguyên hơn, giúp website chịu được nhiều lượt truy cập hơn.
Những việc bạn tự làm được
1. Đưa website qua Cloudflare và giữ kín IP gốc
Trỏ tên miền qua Cloudflare (gói miễn phí đã có lọc DDoS cơ bản), bật chế độ proxy (đám mây màu cam) cho bản ghi trỏ về VPS. Khi đó người truy cập chỉ thấy IP của Cloudflare. Quan trọng là giữ kín IP thật của VPS:
- Không để bản ghi DNS nào khác (ví dụ
mail,ftp) trỏ thẳng về cùng IP mà không qua proxy. - Nếu IP gốc từng bị lộ, cân nhắc đổi IP mới sau khi đã đưa website qua Cloudflare.
- Chỉ cho phép dải IP của Cloudflare kết nối tới port 80, 443 trên VPS.
Xem thêm cách trỏ tên miền ở bài trỏ tên miền về VPS và cài SSL.
2. Giới hạn request và kết nối trên Nginx
Với website chạy Nginx, hai tính năng có sẵn limit_req và limit_conn giúp chặn một IP gửi quá nhiều request:
limit_req_zone $binary_remote_addr zone=perip:10m rate=10r/s;
limit_conn_zone $binary_remote_addr zone=connip:10m;
server {
# ...
limit_req zone=perip burst=20 nodelay;
limit_conn connip 20;
limit_req_status 429;
}

Hai dòng *_zone phải nằm trong khối http (file trong sites-available hoặc conf.d đều được nạp vào khối này). Luôn chạy nginx -t trước khi reload. Nếu website đứng sau Cloudflare, cần cấu hình Nginx lấy IP thật của khách (module real_ip), nếu không giới hạn sẽ áp lên IP của Cloudflare.
3. Đóng port không cần thiết
Mỗi port mở là một điểm có thể bị nhắm tới. Chỉ mở những port thật sự dùng, cơ sở dữ liệu chỉ lắng nghe nội bộ. Đọc bài port là gì để biết cách kiểm tra và đóng port.
4. Hiểu đúng vai trò của fail2ban
fail2ban rất hữu ích để chặn các IP dò mật khẩu SSH hay đăng nhập WordPress (xem bảo mật VPS Linux cơ bản). Nhưng fail2ban đọc log rồi mới chặn, nên chỉ phù hợp với lượng IP vừa phải; nó không phải công cụ chống DDoS quy mô lớn. Khi băng thông đã bị làm đầy, mọi biện pháp chạy trên VPS đều không còn tác dụng.
5. Tối ưu website để chịu tải tốt hơn
Bật cache trang (plugin cache cho WordPress, FastCGI cache của Nginx), dùng CDN cho ảnh và file tĩnh, giới hạn các trang tìm kiếm nặng. Website càng nhẹ thì càng cần nhiều request rác mới làm sập được.
Khi nghi ngờ bị DDoS, nên làm gì?
- Ghi lại thời điểm, triệu chứng, chụp biểu đồ băng thông và CPU.
- Kiểm tra log để xác định kiểu tấn công: nhiều request HTTP (tầng ứng dụng) hay băng thông bị đầy (tầng mạng).
- Với tầng ứng dụng: bật chế độ chống tấn công của Cloudflare (Under Attack Mode), siết giới hạn request, chặn các đường dẫn bị nhắm tới.
- Liên hệ nhà cung cấp VPS, gửi kèm thông tin đã ghi lại để được kiểm tra ở phía hạ tầng.
Câu hỏi thường gặp
Website nhỏ có bị DDoS không?
Có. Thuê một đợt DDoS nhỏ ngày nay khá rẻ, nên website nhỏ vẫn có thể bị nhắm tới vì cạnh tranh, tống tiền hoặc chỉ do bị dò trúng ngẫu nhiên. Phòng trước bằng Cloudflare và giới hạn request tốn rất ít công sức.
Đổi IP VPS có hết bị DDoS không?
Chỉ có tác dụng nếu IP mới không bị lộ lại. Nếu tên miền vẫn trỏ thẳng về IP mới, kẻ tấn công tìm ra ngay. Đổi IP nên đi kèm việc đưa website qua CDN và giữ kín IP gốc.
DDoS có làm mất dữ liệu trên VPS không?
DDoS chủ yếu làm gián đoạn dịch vụ, không trực tiếp xoá hay đánh cắp dữ liệu. Tuy vậy, việc VPS bị quá tải đột ngột có thể làm hỏng tiến trình đang ghi dữ liệu. TDCLOUD sao lưu hằng ngày cho toàn bộ gói VPS, và bạn vẫn nên tự giữ một bản sao riêng theo quy tắc 3-2-1.
Tôi có nên tự kiểm thử DDoS vào website của mình?
Không nên tự dùng công cụ tấn công, kể cả nhắm vào hệ thống của mình: lưu lượng đó đi qua hạ tầng chung, ảnh hưởng tới người dùng khác và có thể vi phạm điều khoản dịch vụ, pháp luật. Nếu cần kiểm thử tải, hãy dùng công cụ load test hợp pháp với mức vừa phải và báo trước cho nhà cung cấp.
Nếu VPS của bạn có dấu hiệu bất thường về băng thông hoặc kết nối, hãy liên hệ đội kỹ thuật TDCLOUD kèm thời điểm và ảnh chụp biểu đồ để được kiểm tra. Bạn cũng có thể tham khảo các gói VPS cao cấp nếu website cần nhiều tài nguyên hơn để chịu tải.