Tăng cường bảo mật cho máy chủ Nginx

Nginx là 1 máy chủ reverse proxy mã nguồn mở cho các giao thức HTTP, HTTPS, SMTP, POP3 và IMAP, cũng như là 1 máy chủ cân bằng tải (load balancer), HTTP cache và web. Gần đây, máy chủ web Nginx đã chính thức vượt qua thị phần của máy chủ Apache, để trở thành máy chủ phổ biến nhất thế giới.
Trong bài viết này, mình sẽ hướng dẫn các bạn quả trị viên trang web bổ sung thêm một vài cấu hình quan trọng giúp tăng cường bảo mật của máy chủ web nginx.

Screenshot 2021 07 11 155555 Tăng cường bảo mật cho máy chủ Nginx

1. Ẩn thông tin phiên bản máy chủ Nginx

Với thông tin về phiên bản máy chủ Nginx, kẻ tấn công sẽ có được cái nhìn đầu tiên về các lỗ hổng tồn tại trong phiên bản đó.

sed -i "s/# server_tokens off;/server_tokens off;/g" /etc/nginx/nginx.conf

2. Vô hiệu hóa ETags
ETags là một thành phần của giao thức HTTP cung cấp tính năng liên quan đến bộ nhớ đệm. Tuy nhiên, tiêu đề Etags lại chứa các thông tin nhạy cảm về máy chủ web như số inode của các tệp được yêu cầu.

sed -i 's/server_tokens off;/server_tokens off;\netag off;/' /etc/nginx/nginx.conf

3. Xóa trang mặc định của nginx server

Thông thường trang mặc định của máy chủ nginx sẽ có chứa thông tin phiên bản ngnix đang chạy cũng như hệ điều hành của máy chủ web. Từ đó, kẻ tấn công sẽ có được cái nhìn đầu tiên về các lỗ hổng tồn tại trong phiên bản đó.

echo "" > /var/www/html/index.html

4. Sử dụng mã hóa mạnh

Với việc sử dụng giao thức https và các thuật toán mã hóa mạnh, sẽ ngăn ngừa các cuộc tấn công MITM.

sed -i "s/ssl_prefer_server_ciphers on;/ssl_prefer_server_ciphers on;\nssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384;/" /etc/nginx/nginx.conf

5. Bật HttpOnly và Secure flags

HttpOnly và Secure flasg giúp giảm thiểu rủi ro tập lệnh phía máy khách truy cập vào cookie.

sed -i "s|^\s*try_files \\\$uri \\\$uri/ =404;|try_files \\\$uri \\\$uri/ =404;\nproxy_cookie_path / \"/; secure; HttpOnly\";|" /etc/nginx/sites-available/default

6. Ngăn ngừa tấn công Clickjacking

sed -i "s|root /var/www/html;|root /var/www/html;\nadd_header X-Frame-Options DENY;|" /etc/nginx/sites-available/default

7. Ngăn ngừa tấn công XSS

sed -i "s|root /var/www/html;|root /var/www/html;\nadd_header X-XSS-Protection \"1; mode=block\";|" /etc/nginx/sites-available/default

8. Bắt buộc các kết nối tới máy chủ phải là bảo mật

sed -i "s|root /var/www/html;|root /var/www/html;\nadd_header Strict-Transport-Security \"max-age=31536000; includeSubdomains;\";|" /etc/nginx/sites-available/default

9. Ngăn ngừa MIME sniffing

sed -i "s|root /var/www/html;|root /var/www/html;\nadd_header X-Content-Type-Options nosniff;|" /etc/nginx/sites-available/default

10. Thiết lập ssl session timeout

Là khoảng thời gian lớn nhất có thể giữa hai lần user request lên server mà session của user chưa bị hủy. Bằng cách rút ngắn thời gian khả dụng giữa hai lần request, sẽ tăng cường bảo mật cho phiên làm việc của quản trị viên trang web.

sed -i "s/ssl_prefer_server_ciphers on;/ssl_prefer_server_ciphers on;\nssl_session_timeout 5m;/" /etc/nginx/nginx.conf

11. Thiết lập ssl session cache

Kích thước bộ nhớ cache phiên SSL giới hạn số lượng phiên được lưu trong bộ nhớ cache cho một cấu hình cụ thể. Khi đạt đến giới hạn bộ nhớ cache của cấu hình, mục nhập phiên SSL cũ nhất được liên kết với cấu hình đó sẽ bị loại bỏ khỏi bộ đệm và phiên SSL mới được lưu vào bộ đệm.

sed -i "s/ssl_session_timeout 5m;/ssl_session_cache shared:SSL:10m;\nssl_session_timeout 5m;/" /etc/nginx/nginx.conf

nguồn: WhiteHat


Từ khoá: nginx, webserver