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ệu | Kê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ần | Giá trị bình thường |
| Bộ xử lý | Không tải | Tải tối đa |
| SSH | Không kết nối được | Hoạt động, nhưng chậm |
| Log máy chủ web | Trống | Hà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_reqmà 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ị
ratevàburst: bạn sẽ phải sửa cấu hình một cách mò mẫm và chắp vá.