Tấn công từ chối dịch vụ phân tán (DDoS) chiếm dụng tài nguyên server qua các chiến thuật giao tiếp kỹ thuật số lạm dụng. Loại tấn công này là "cuộc đột kích có tổ chức" của thế giới máy tính. Nhiều hành động phiền toái giống kiến kết hợp tạo ra mối đe dọa đủ mạnh để dừng server trải qua nhiều thử thách. Tệ nhất, có nhiều phương tiện tiến hành chiến tranh web du kích này chống lại server không ngờ. May mắn, server có thể cấu hình để chống trả.
Nginx, hệ thống server phổ biến cho máy Unix, đi kèm đủ chức năng tích hợp để hạn chế hiệu quả tấn công DDoS lớn.
Dưới đây là vài tùy chọn hiệu quả xử lý mối đe dọa này trên server dùng Nginx:
Sao lưu file cấu hình
Trước khi thay đổi cài đặt, hãy sao lưu nhanh cấu hình server. Lệnh sau dùng cho việc này:
sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.backup-original

Khi xong, bạn sẵn sàng tiến tiếp.
Kiểm tra lưu lượng
Theo dõi lưu lượng server giúp dễ dàng tối ưu bảo mật và triển khai chiến thuật thêm. Nginx có module riêng cho việc này.
Thiết lập trang trạng thái
Nginx thường đi kèm module tên "stub status" (http_stub_status_module) cho phép chức năng này tích hợp vào môi trường server khá dễ. Trước hết, kiểm tra nó bằng lệnh:
nginx -V

Hoặc pipe lệnh trên vào grep để tìm nhanh:
nginx -V 2>&1 | grep -o with-http_stub_status_module

Nếu đầu ra trông như hình, bạn tốt để đi; ngược lại, bạn cần cài lại hoặc biên dịch lại Nginx với module.
Thiết lập trang trạng thái bạn có thể kiểm tra很简单, nhưng bạn cũng cần giới hạn truy cập chỉ tối thiểu (máy của bạn) để giữ an toàn. Bắt đầu bằng mở file cấu hình chính server tại "/etc/nginx/nginx.conf".

Mở và thêm mã sau vào "http directive" để kích hoạt module, thay thông tin của bạn thay vì "localhost", "/status_page" và "127.0.0.1":
server {
listen 80;
listen [::]:80;
server_name localhost;
##
# Status Page Settings
##
location /status_page {
stub_status on;
allow 127.0.0.1;
allow ::1;
deny all;
}
}
Lưu ý: bạn cần quyền sudo để sửa file này.

Bây giờ test cấu hình:
sudo nginx -t

Nếu ổn, gửi tín hiệu reload cho server:
sudo systemctl reload nginx

Để truy cập trang trạng thái, truy cập vị trí server_name theo sau "/status_page" trong trình duyệt hoặc dùng công cụ dòng lệnh như curl. (Hữu ích nếu cache trình duyệt không tự cập nhật.) Lệnh curl truy cập trang trong ví dụ:
curl localhost/status_page

Trong trình duyệt, trông như hình sau.

Kiểm tra access log
Nếu nhận thấy lưu lượng bất thường khi kiểm tra trang trạng thái, có thể tốt nếu kiểm tra access log server. Nó ở "/var/log/nginx/access.log". Log liệt kê phương thức HTTP, ngày/giờ truy cập, user agent và trang truy cập.

Giới hạn kết nối
Trong nhiều chiến thuật đáng thử để chống DDoS, một trong đơn giản và hiệu quả nhất là giới hạn tốc độ lưu lượng đến.
Lý tưởng, bạn nên hạn chế truy cập đủ để ngăn bot độc hại lấn át server ở tốc độ siêu nhân trong khi giữ tốc độ hợp lý cho khách người. Trong Nginx, đạt được với chỉ thị limit_req_zone và limit_req. Mã sau đặt ràng buộc bộ nhớ và tốc độ cho mọi location server cấu hình hiển thị:
limit_req_zone $binary_remote_addr zone=speedbump:10m rate=10r/s;
"Zone" chỉ định tên và kích thước (Megabyte) không gian bộ nhớ lưu yêu cầu người dùng. "Rate" thiết lập tổng số yêu cầu Nginx chấp nhận mỗi giây (10 trong ví dụ). Hãy nghĩ mã này như quy tắc và mã tiếp theo như việc áp dụng quy tắc:
limit_req zone=speedbump burst=20;
Mã trên thực tế làm nhiều hơn chỉ thực hiện quy tắc giới hạn; nó cũng thêm hàng đợi nhỏ lên đến 20 yêu cầu để xử lý mềm dẻo kết nối hợp pháp xuất hiện hơi nhanh hơn bình thường, vượt cả quy tắc và hàng đợi dẫn đến lỗi 503 cho client. Đây là hai directive trong nginx.conf:

Danh sách đen IP
Nếu bạn nắm được địa chỉ IP đang DDoS server, bạn có thể đơn giản đưa vào danh sách đen và từ chối mọi kết nối từ IP này.
Thêm mã sau vào server directive:
location / {
deny 123.123.123.0/28;
# ...
}
Chặn yêu cầu đến file cụ thể
Nếu tấn công DDoS nhắm vào file cụ thể trên server – ví dụ file xmlrpc.php trên WordPress (file bị nhắm nhiều nhất trên server WordPress) – bạn có thể chặn tất cả yêu cầu đến nó. Thêm mã vào server directive:
location /xmlrpc.php {
deny all;
}
Làm theo quy trình trên, bạn sẽ giới hạn hầu hết tấn công DDoS. Hãy xem tài liệu Nginx để thêm tùy chọn bảo mật bạn có thể triển khai.