Skip to content
VDS · Bảo mật

Tấn công vào máy: chúng tôi làm gì và bạn có thể làm gì

Tấn công vào kênh và vào ứng dụng trông như thế nào, chúng khác nhau ra sao, bạn có thể cấu hình gì ở phía mình và cách nhận biết rằng đó hoàn toàn không phải là tấn công.

Cập nhật 23 tháng 8, 2026

Từ “tấn công” nghe giống nhau trong hai tình huống hoàn toàn khác nhau: khi kênh của bạn bị ngập bởi lưu lượng rác và khi vài trăm yêu cầu mỗi giây làm sập ứng dụng của bạn. Chúng được xử lý khác nhau, và việc đầu tiên cần làm là xác định bạn đang đối mặt với loại nào.

Phân biệt hai trường hợp

Dấu hiệuKênh bị bão hòaỨng dụng bị quá tải
Đồ thị lưu lượng trong “Tổng quan”Chạm trầnGiá trị bình thường
Bộ xử lýKhông tảiTải tối đa
SSHKhông kết nối đượcHoạt động, nhưng chậm
Log máy chủ webTrốngHàng nghìn yêu cầu giống hệt nhau

Xem đồ thị bộ xử lý, bộ nhớ và lưu lượng trong “Tổng quan” tại /hosting/vds/m/<id> trong 24 giờ qua. Nếu lưu lượng bình thường nhưng bộ xử lý bị ghim ở mức trần, đó là tải ứng dụng, và bạn cần xử lý nó ở phía mình.

Những gì bạn có thể làm

Giới hạn tần suất yêu cầu trong nginx:

limit_req_zone $binary_remote_addr zone=perip:10m rate=10r/s;
limit_conn_zone $binary_remote_addr zone=conn:10m;

server {
    limit_req zone=perip burst=20 nodelay;
    limit_conn conn 20;
    client_body_timeout 10s;
    client_header_timeout 10s;
}

Giới hạn kết nối trong tường lửa:

ufw limit 22/tcp

Các quy tắc linh hoạt hơn có trong bài viết nftables: tại đó bạn cũng có thể giới hạn tần suất kết nối mới và duy trì danh sách địa chỉ bị chặn kèm thời gian sống.

Tìm nguồn trong log:

awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20
ss -tn state established | awk '{print $4}' | cut -d: -f1 | sort | uniq -c | sort -rn | head

Chặn một địa chỉ hoặc mạng một lần:

ufw deny from 203.0.113.0/24

fail2ban có thể tự động hóa việc chặn dựa trên log.

Những gì chúng tôi làm

Hạ tầng của chúng tôi lọc lưu lượng rác trên đường đến node — trước khi nó tiêu tốn băng thông của bạn. Cơ chế này chống lại các cuộc tấn công thể tích vào kênh và không cần bạn cấu hình gì.

Những gì bảo vệ ở cấp node không làm: nó không phân tích logic ứng dụng của bạn. Những yêu cầu trông bình thường từ bên ngoài vẫn đến được máy của bạn, và chỉ cấu hình của chính bạn mới bảo vệ được chống lại chúng.

Nếu máy của bạn trở thành nguồn tấn công — ví dụ, nó bị xâm nhập và đang tham gia vào chiến dịch spam của người khác — quyền truy cập sẽ bị hạn chế theo chính sách sử dụng hợp lý. Hãy kiểm tra máy của bạn theo các dấu hiệu bị xâm nhập.

Bộ nhớ đệm và tệp tĩnh

Kỹ thuật hiệu quả nhất chống lại một đợt ngập yêu cầu là không tính toán cùng một thứ hai lần:

location /static/ {
    expires 30d;
    add_header Cache-Control "public";
}

Đặt bộ nhớ đệm cho các trang nặng ở phía ứng dụng. Một yêu cầu được phục vụ từ bộ nhớ đệm tốn ít hơn hàng trăm lần.

Những lỗi thường gặp

  • Đặt limit_req mà không có burst — những người dùng bình thường có trang tải hàng chục tệp sẽ bị cắt.
  • Chặn từng địa chỉ một bằng tay trong một cuộc tấn công phân tán: có hàng nghìn địa chỉ, và bạn sẽ không theo kịp.
  • Chặn hoàn toàn ICMP — nó phá vỡ việc thương lượng kích thước gói, xem MTU.
  • Nhầm lỗi của chính bạn với một cuộc tấn công: một vòng lặp trong mã, một bot tìm kiếm thu thập một thư mục bạn quên loại trừ, các lần thử lại vô tận của máy khách.

Hãy đặt giới hạn trước, trên một máy yên tĩnh. Trong một đợt ngập yêu cầu, bạn sẽ không thể tinh chỉnh các giá trị rate và burst: bạn sẽ phải sửa cấu hình một cách mò mẫm và chắp vá.