Cách cấu hình bảo mật Nginx và chống DDoS website giúp tăng cường độ tin cậy và khả năng chịu tải của hệ thống, bảo vệ website khỏi các cuộc tấn công mạng đáng nguy hiểm.
Bảo mật Nginx là một phần quan trọng trong việc bảo vệ và đảm bảo an toàn cho website của bạn. Nginx là một máy chủ web phổ biến và mạnh mẽ được sử dụng để xử lý yêu cầu HTTP và cung cấp các dịch vụ web. Tuy nhiên, với sự phát triển của các cuộc tấn công mạng ngày càng tinh vi, việc cấu hình bảo mật Nginx trở thành một yếu tố quan trọng để ngăn chặn các cuộc tấn công DDoS, SQL injection, cross-site scripting (XSS) và nhiều hình thức tấn công khác mà có thể gây hại cho website và dữ liệu của bạn.
Cách cấu hình bảo mật Nginx và chống DDoS website [Update]
![Cách cấu hình bảo mật Nginx và chống DDoS website [Update] 13 Cách cấu hình bảo mật Nginx và chống DDoS website](https://itsmeit.co/wp-content/uploads/2022/03/cach-phong-chong-ddos-website-voi-nginx.jpg)
Bước 1: Thiết lập thời gian chờ và giải phóng tài nguyên
client_body_timeout 5s; client_header_timeout 5s;
Cả hai thiết lập client_body_timeout
và client_header_timeout
trong cấu hình Nginx đều liên quan đến việc đặt giới hạn thời gian chờ cho các phần của yêu cầu từ phía khách hàng (client). Dưới đây là giải thích chi tiết về từng thiết lập:
client_body_timeout 5s
: Khi khách hàng gửi yêu cầu POST hoặc PUT có dữ liệu (ví dụ: thông tin biểu mẫu), máy chủ Nginx sẽ chờ trong vòng 5 giây để nhận dữ liệu yêu cầu. Nếu trong thời gian này không nhận được dữ liệu từ khách hàng, máy chủ Nginx sẽ đóng kết nối với khách hàng. Cấu hình bảo mật Nginx này giúp ngăn chặn các kết nối treo và giải phóng tài nguyên máy chủ.
client_header_timeout 5s
: Khi khách hàng gửi yêu cầu (ví dụ: User-Agent, Accept-Language) được gửi kèm theo. Máy chủ Nginx sẽ chờ trong vòng 5 giây để nhận tiêu đề yêu cầu từ khách hàng. Nếu trong thời gian này không nhận được tiêu đề yêu cầu, máy chủ Nginx sẽ đóng kết nối. Điều này giúp ngăn chặn các kết nối treo và đảm bảo rằng máy chủ không phải chờ đợi vô thời hạn.
Tuy các giá trị timeout có thể được điều chỉnh, việc đặt thời gian chờ quá thấp có thể gây ra những vấn đề như kết nối bị đóng trước khi hoàn thành yêu cầu. Do đó, nên đặt các giá trị timeout
phù hợp với loại yêu cầu và môi trường mạng để đảm bảo hoạt động ổn định của trang web.
Bước 2: Ẩn thông tin phiên bản Nginx
![Cách cấu hình bảo mật Nginx và chống DDoS website [Update] 14 Ẩn thông tin phiên bản Nginx](https://itsmeit.co/wp-content/uploads/2022/03/cach-phong-chong-ddos-website-nginx-protect-ddos-1.jpg)
server_tokens off;
Đây là thiết lập để ẩn thông tin phiên bản của Nginx được trả về trong tiêu đề HTTP “Server”. Bằng cách tắt server_tokens
, Nginx sẽ không hiển thị thông tin về phiên bản Nginx mà chỉ hiển thị “Server: nginx
” mà không có phiên bản cụ thể.
Bước 3: Chặn truy cập trực tiếp bảo vệ thư mục trong Nginx
autoindex off;
Cấu hình này tắt chức năng autoindex
trong Nginx, ngăn người dùng truy cập trực tiếp vào danh sách thư mục và tệp tin của server thông qua trình duyệt. Sẽ trả về mã lỗi 403 cho người dùng đây là cấu hình bảo mật Nginx rất cần thiết cho trang web.
![Cách cấu hình bảo mật Nginx và chống DDoS website [Update] 15 Chặn truy cập trực tiếp bảo vệ thư mục trong Nginx](https://itsmeit.co/wp-content/uploads/2022/03/cach-phong-chong-ddos-website-nginx-protect-ddos-2-1024x149.png)
Bước 4: Ngăn chặn tấn công qua HTTP, MIME sniffing, clickjacking, JavaScript
add_header X-Frame-Options SAMEORIGIN; add_header Strict-Transport-Security "max-age=31536000"; add_header X-Content-Type-Options nosniff; add_header X-XSS-Protection "1; mode=block";
add_header X-Frame-Options SAMEORIGIN;
: Dòng mã này thêm tiêu đề HTTP “X-Frame-Options” vào phản hồi của Nginx. Chính sách “SAMEORIGIN” trong tiêu đề này giới hạn trang web chỉ có thể nhúng vào các khung cùng nguồn gốc (origin
) với trang web đó. Điều này giúp bảo vệ trang web khỏi các tấn công ddos như clickjacking.
add_header Strict-Transport-Security "max-age=31536000";
: Dòng mã này thêm tiêu đề HTTP “Strict-Transport-Security” vào phản hồi của Nginx. Tiêu đề này khuyến nghị trình duyệt chỉ truy cập trang web qua kết nối HTTPS trong một khoảng thời gian xác định (ở đây là 31536000 giây, tương đương 1 năm). Điều này giúp tăng cường bảo mật và ngăn chặn tấn công qua HTTP.
add_header X-Content-Type-Options nosniff;
: Dòng mã này thêm tiêu đề HTTP “X-Content-Type-Options” vào phản hồi của Nginx. Giá trị “nosniff
” trong tiêu đề này chỉ ra rằng trình duyệt không nên xác định kiểu nội dung của tệp tin tự động, mà chỉ sử dụng kiểu nội dung được khai báo trong tiêu đề “Content-Type”. Điều này giúp chống ddos website MIME sniffing.
add_header X-XSS-Protection "1; mode=block";
: Dòng mã này thêm tiêu đề HTTP “X-XSS-Protection” vào phản hồi của Nginx. Giá trị “1; mode=block
” trong tiêu đề này bật bộ bảo vệ chống XSS (cross-site scripting
) tích hợp sẵn trong trình duyệt. Nếu trình duyệt phát hiện các tấn công XSS, nó sẽ chặn và ngăn chặn việc thực thi mã JavaScript độc hại.
Bước 5: Chặn truy cập vào Server Nginx bằng IP
![Cách cấu hình bảo mật Nginx và chống DDoS website [Update] 16 Cấu hình chặn truy cập trực tiếp từ IP vào máy chủ Nginx](https://itsmeit.co/wp-content/uploads/2023/06/chan-truy-cap-truc-tiep-tu-ip-vao-may-chu-nginx-1024x694.jpg)
Cấu hình để chặn truy cập trực tiếp từ IP vào máy chủ Nginx là cần thiết để bảo vệ hệ thống khỏi các cuộc tấn công trực tiếp và tăng cường bảo mật bằng cách bắt buộc người dùng sử dụng tên miền chính thức.
Bước 6: Ngăn chặn các cuộc tấn công DDOS
Các cuộc tấn công DDoS thường được thực hiện từ một tập hợp địa chỉ IP cố định, đó là những địa chỉ IP của các máy tính bị chiếm đoạt để thực hiện cuộc tấn công. Tuy nhiên, có một số biện pháp chống ddos website mà bạn có thể thực hiện để ngăn chặn hoặc giảm thiểu tác động của các cuộc tấn công.
Cấu hình Nginx giới hạn gửi yêu cầu (Requests) đến Server
Bạn có thể giới hạn tốc độ NGINX chấp nhận các yêu cầu đến ở một giá trị tiêu biểu cho người dùng thực. Ví dụ: bạn có thể quyết định rằng một người dùng thực truy cập trang đăng nhập chỉ có thể đưa ra yêu cầu sau mỗi 2 giây. Bạn có thể định cấu hình NGINX để cho phép một địa chỉ IP máy khách duy nhất cố gắng đăng nhập chỉ sau mỗi 2 giây (tương đương với 30 yêu cầu mỗi phút):
limit_req_zone $binary_remote_addr zone=one:10m rate=30r/m; server { # ... location /login.html { limit_req zone=one; # ... } }
Xử lý bursts giới hạn nhiều truy cập hợp lệ đến cùng lúc
Để xử lý bursts và giới hạn nhiều truy cập hợp lệ đến cùng lúc, bạn có thể sử dụng các tùy chọn và cấu hình bổ sung trong module “limit_req” của Nginx. Ví dụ dưới đây sẽ giúp bạn hiểu cách làm:
http { limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; limit_req_zone $binary_remote_addr zone=burst:10m burst=10 nodelay; server { ... location / { limit_req zone=one burst=5; limit_req zone=burst burst=10 nodelay; ... } } }
Trong ví dụ trên, chúng ta đã tạo hai vùng giới hạn yêu cầu. Vùng “one” với tốc độ giới hạn là 1 yêu cầu mỗi giây, và vùng “burst” với tùy chọn burst là 10 (số lượng yêu cầu tạm thời chấp nhận được trong một khoảng thời gian ngắn).
Trong khối location /
, chúng ta đã áp dụng giới hạn yêu cầu bằng cách sử dụng limit_req
với zone là “one” và burst là 5, giới hạn tối đa 5 yêu cầu trong một khoảng thời gian ngắn. Đồng thời, chúng ta cũng áp dụng limit_req
với zone là “burst”, burst là 10 và tùy chọn nodelay để xử lý bursts mà không chờ đợi (nghĩa là cho phép xử lý nhanh các yêu cầu bursts).
![Cách cấu hình bảo mật Nginx và chống DDoS website [Update] 17 cach phong chong ddos website nginx protect ddos 4](https://itsmeit.co/wp-content/uploads/2022/03/cach-phong-chong-ddos-website-nginx-protect-ddos-4-1024x512.jpg)
Việc sử dụng cấu hình trên cho phép bạn giới hạn số lượng yêu cầu trong một khoảng thời gian, đồng thời xử lý các bursts
truy cập hợp lệ một cách linh hoạt. Bạn có thể điều chỉnh các giá trị của burst và tốc độ giới hạn (rate
) phù hợp với nhu cầu và tải trọng của ứng dụng của bạn.
Xử lý hàng đợi mà không delay request (Queueing with No Delay)
Cách phòng chống ddos website ở trên sử dụng burst
giúp traffic flow
trở nên mượt mà, tuy nhiên trong thực tế nó có thể khiến cho website của trông có vẻ bị chậm. Trong ví dụ của chúng ta, request
thứ 20 trong queue
phải đợi đến 2s mới được xử lý, mang lại trải nghiệm không tốt cho người dùng. Để giải quyết vấn đề này, sử dụng tham số nodelay
bên cạnh tham số burst
.
location /login/ { limit_req zone=mylimit burst=20 nodelay; proxy_pass https://itsmeit.co; }
Cấu hình trên áp dụng giới hạn yêu cầu (limit_req
) cho một vùng (zone
) được gọi là “mylimit” trong location
có đường dẫn /login/
. Nghĩa là mọi yêu cầu truy cập đến URL bắt đầu bằng /login/
sẽ bị giới hạn theo tốc độ và burst chỉ định.
burst=20
: Chỉ định rằng trong một khoảng thời gian ngắn, Nginx sẽ chấp nhận tối đa 20 yêu cầu (burst) từ địa chỉ IP gửi yêu cầu trước khi áp dụng giới hạn.nodelay
: Tùy chọn này cho phép xử lý ngay lập tức các yêu cầu bursts mà không chờ đợi, đồng nghĩa với việc không có đợi (delay) giữa các yêu cầu.
Sau khi áp dụng giới hạn yêu cầu, nếu một địa chỉ IP gửi nhiều yêu cầu hơn giới hạn burst (trong trường hợp này là 20 yêu cầu) trong một khoảng thời gian ngắn, các yêu cầu thêm sẽ bị từ chối (trả về mã lỗi 503). Các yêu cầu hợp lệ sẽ được chuyển tiếp (proxy_pass
) đến https://itsmeit.co
, được xử lý bởi upstream server
.
Điều này giúp hạn chế tải lên máy chủ và bảo vệ khỏi các cuộc tấn công DDoS hoặc lạm dụng tài nguyên bằng cách áp dụng giới hạn yêu cầu trên đường dẫn /login/
.
Cấu hình Nginx giới hạn số lượng kết nối
Một cách phòng chống ddos nữa là giới hạn số lượng kết nối có thể được mở bởi một địa chỉ IP máy khách. Ví dụ: bạn có thể cho phép mỗi địa chỉ IP của người dùng (client)
mở không quá 10 kết nối đến trang web của bạn:
limit_conn_zone $binary_remote_addr zone=addr:10m; server { # ... location /store/ { limit_conn addr 10; # ... } }
Cấu hình từ chối 1 IP đang kết nối đến trên Nginx
![Cách cấu hình bảo mật Nginx và chống DDoS website [Update] 18 Cấu hình bảo mật trang web với Nginx (Nginx Server Security)](https://itsmeit.co/wp-content/uploads/2022/03/cach-bao-mat-trang-web-voi-nginx-server-sercurity-3.jpg)
Nếu trang web của bạn đang bị DDOS bạn có thể xác định các địa chỉ IP đang tấn công và từ chối kết nối đến server
. Ví dụ ta đã xác định được IP 123.123.123.0 port 28 đang thực hiện liên tục requets
đến server và cách cấu hình phòng chống ddos website với Nginx là thêm IP danh sách chặn.
location / { deny 123.123.123.0/28; # ... }
Nếu xác định được nhiều IP bạn có thể cấu hình như sau:
location / { deny 123.123.123.3; deny 123.123.123.5; deny 123.123.123.7; # ... }
Trên đây là cách cấu hình phòng chống ddos website cũng như các cấu hình bảo mật Nginx giúp bạn có thể ngăn chặn, hạn chế các cuộc tấn công trang web bằng ddos. Ngoài ra bạn cũng có thể sử dụng CloudFlare cũng hỗ trợ chống DDOS rất hiệu quả.
– Advertising –