(vncloud.vn) Distributed Denial‑of‑Service (DDoS) attack là hành động cố gắng làm cho các dịch vụ thường là website. Website thường bị tấn công bởi rất nhiều yêu cầu được gửi từ nhiều máy tính khác nhau khiến cho trang web trờ nên quá tải và ko thể phản hồi lại yêu cầu từ các máy client.
Contents
Nginx và Nginx Plus có nhiều tính năng giúp giảm nhẹ tác hại của cuộc tấn công DDoS dự trên việc điều chỉnh lưu lượng truy cập và các yêu cầu. Dưới đây là một số phương pháp bảo vệ website của bạn trước các cuộc tấn công DDoS.
Bạn có thể giới hạn tần suất gửi request tới server cho các người dùng. Ví dụ bạn tính toán một người dùng bình thường có thể gửi 2 yêu cầu login (request) mỗi giây là nhiều rồi. Vậy bạn có thể cấu hình Nginx và Nginx Plus cho phép một địa chỉ client IP có thể gửi request đến trang login 2 lần mỗi giây (tương đương với trung bình 30 yêu cầu / 1 phút)
limit_req_zone $binary_remote_addr zone=one:10m rate=30r/m; server { # ... location /login.html { limit_req zone=one; # ... } }
limit_req_zone
cấu hình một vùng nhớ chia sẻ (zone) có tên là one để lưu trữ trạng thái (state) của yêu cầu theo kiểu key-value, trong trường hợp này key là địa chỉ IP của client. limit_request
có hiệu lực trong block /login.html
và tham chiếu điến cấu hình bộ nhớ chia sẻ one
.
Bạn có thể giới hạn số lượng kết nối được mở từ một địa chỉ IP. Ví dụ bạn có thể cấu hình cho phép tối đa 10 kết nối đến địa chỉ /store
trên trang web của bạn
limit_conn_zone $binary_remote_addr zone=addr:10m; server { # ... location /store/ { limit_conn addr 10; # ... } }
limit_conn_zone
cấu hình một vùng nhớ chia sẻ là addr
để lưu trữ thông tin các request theo từng địa chỉ client IP. Tương tự limit_conn
có hiệu lực trong block /store
và đọc dữ liệu từ vùng nhớ chia sẻ là addr
và đặt giới hạn tối đa là 10 kết nối trên một địa chỉ client IP.
Bạn có thể khai báo một số địa chỉ IP vào trong blacklist (danh sách đen) với chỉ thị deny
làm cho Nginx và Nginx Plus từ chối mọi kết nối từ các địa chỉ IP trong danh sách này. Ví dụ bạn muốn chặn các địa chỉ IP trong dải 123.123.123.1 đến 123.123.123.28
location / { deny 123.123.123.0/28; # ...
Hoặc bạn có thẻ chỉ định từng địa chỉ IP một như sau
location / { deny 123.123.123.3; deny 123.123.123.5; deny 123.123.123.7; # ... }
Trong trường hợp này bạn sẽ chỉ định một số địa chỉ IP có thể truy cập đến trang web của bạn, còn lại sẽ từ chối hết các kết nối từ địa chỉ IP khác Ví dụ chỉ cho phép kết nối từ các địa chỉ IP ở trong dải 192.168.1.0 đến 192.168.1.24;
location / { allow 192.168.1.0/24; deny all; # ... }
Với Nginx bạn có thế giới hạn số lượng kết nối tối đa đến server, nếu quá số lượng này server sẽ tự động từ chối yêu cầu. Ví dụ bạn muốn cấu hình cho server chỉ nhận tối đa 200 kết nối bạn có thể làm như sau
upstream website { server 192.168.100.1:80 max_conns=200; server 192.168.100.2:80 max_conns=200; queue 10 timeout=30s; }
Trong ví dụ trên max_conns
để khai báo số lượng kết nối tối đa đến server. Trong khi đó queue
là hàng đợi dùng khi tất cả server đều đạt số lượng tối đa kết nối thì yêu cầu tiếp theo sẽ được đưa vào hàng đơi và sẽ được giữ trong hàng đợi tối đa là 30 giây
Việc loại bỏ hoàn toàn DDoS là rất khó, tuy nhiên ta có một số biện pháp loại bỏ các trường hợp tấn công đơn giản hoặc giảm nhẹ tác hại của các vụ tấn công DDoS. Hy vọng các ví dụ trên có thể giúp ích cho bạn trong thực tế. Cảm ơn bạn đã theo dõi bài viết
Tham khảo: mitigating-ddos-attacks-with-nginx-and-nginx-plus