Mục Lục
- Giới thiệu
- Chỉ Sử Dụng Các Phiên Bản TLS Hiện Đại
- Chọn Bộ Mã Mạnh
- Bật HTTP/2 và Server Push (Tùy Chọn)
- Củng Cố Bảo Mật Header
- Cấu Hình OCSP Stapling
- Nén Thông Minh: Gzip + Brotli
- Bảo Vệ Chống Các Cuộc Tấn Công Brute-Force
- Tổng Hợp
- Giám Sát và Bảo Trì Liên Tục
- Kết Luận
Giới Thiệu
Khi bạn là người phụ trách DevOps cho một dịch vụ web có lưu lượng truy cập cao, TLS không chỉ là một mục kiểm tra – mà còn là một nền tảng quan trọng về hiệu suất và bảo mật. Việc cấu hình sai TLS có thể làm tăng độ trễ, lộ ra các mã yếu, hoặc thậm chí mở ra khả năng bị tấn công giảm cấp. Hướng dẫn này sẽ hướng dẫn bạn qua bảy bước thực tiễn để khóa chặt ngăn xếp TLS của Nginx trong khi vẫn giữ thời gian yêu cầu đến phản hồi sắc nét.
1. Chỉ Sử Dụng Các Phiên Bản TLS Hiện Đại
Các phiên bản giao thức cũ (SSLv2, SSLv3, TLS 1.0/1.1) chứa nhiều lỗ hổng đã biết. Trong tệp nginx.conf, hãy đặt chỉ thị ssl_protocols cho các phiên bản ổn định mới nhất:
ssl_protocols TLSv1.2 TLSv1.3;
TLS 1.3 mang lại sự giảm 30-40% độ trễ trong quá trình bắt tay và loại bỏ nhiều bộ mã cũ.
2. Chọn Bộ Mã Mạnh
Một danh sách mã được chọn kỹ lưỡng giúp ngăn chặn các thuật toán yếu như RC4 hoặc 3DES. Danh sách sau đã được xác thực bởi cấu hình trung gian của Mozilla và hoạt động tốt với hầu hết các trình duyệt:
ssl_ciphers \
'TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256' \
'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384' \
'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305' \
'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
ssl_prefer_server_ciphers on;
ssl_prefer_server_ciphers on;ép buộc thứ tự của máy chủ, loại bỏ việc thao tác mã từ phía khách hàng.
3. Bật HTTP/2 và Server Push (Tùy Chọn)
HTTP/2 hoạt động song song với TLS và có thể giảm miligiây khỏi TTFB. Bật nó cho từng trang:
listen 443 ssl http2;
Nếu bạn có các tài sản quan trọng (ví dụ: CSS nằm trên trang chính), hãy cân nhắc http2_push_preload on; để chủ động đẩy chúng.
4. Củng Cố Bảo Mật Header
Các header phản hồi tập trung vào bảo mật giúp bảo vệ chống lại click-jacking, MIME sniffing và XSS. Thêm chúng một lần trong khối http:
add_header X-Content-Type-Options nosniff always;
add_header X-Frame-Options SAMEORIGIN always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
Header Strict-Transport-Security yêu cầu các trình duyệt sử dụng HTTPS trong một năm và cho biết sự bao gồm trong danh sách preload của Chrome.
5. Cấu Hình OCSP Stapling
OCSP stapling giảm số lượt đi và về cần thiết cho các kiểm tra thu hồi chứng chỉ. Đặt các chỉ thị này bên trong khối server:
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
Nếu máy chủ giải quyết thất bại, Nginx sẽ quay lại yêu cầu OCSP từ phía khách hàng, bảo toàn khả năng truy cập.
6. Nén Thông Minh: Gzip + Brotli
Nén giúp giảm kích thước tải trọng, nhưng bạn phải tránh nén các tài sản đã được nén (ví dụ: JPEG, MP4). Bật cả Gzip và Brotli để có khả năng tương thích tối đa:
# Gzip (sử dụng cho các trình duyệt cũ hơn)
gzip on;
gzip_types text/plain text/css application/json application/javascript;
gzip_vary on;
# Brotli (ưu tiên khi khách hàng hỗ trợ)
brotli on;
brotli_comp_level 6;
brotli_types text/plain text/css application/json application/javascript;
Brotli thường mang lại sự giảm kích thước từ 20-30% so với Gzip, cải thiện tốc độ cảm nhận trên các trình duyệt hiện đại.
7. Bảo Vệ Chống Các Cuộc Tấn Công Brute-Force
Ngay cả với TLS hoàn hảo, kẻ tấn công vẫn có thể làm ngập máy chủ của bạn bằng các yêu cầu bắt tay không hợp lệ. Một jail nhẹ nhàng của Fail2Ban có thể giảm bớt các IP xấu:
[nginx-https]
enabled = true
filter = nginx-https
logpath = /var/log/nginx/error.log
maxretry = 5
bantime = 3600
Tạo một bộ lọc tương ứng (/etc/fail2ban/filter.d/nginx-https.conf):
[Definition]
failregex = .*client sent TLS alert.*
.*SSL_do_handshake() failed.*
Tải lại Fail2Ban và bạn sẽ bắt đầu thấy các IP vi phạm bị chặn sau một vài lần bắt tay thất bại.
Tổng Hợp
Một khối server tối thiểu, sẵn sàng cho sản xuất có thể trông như sau:
server {
listen 443 ssl http2;
server_name example.com www.example.com;
# Cơ bản về TLS
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256';
ssl_prefer_server_ciphers on;
ssl_stapling on;
ssl_stapling_verify on;
resolver 1.1.1.1 8.8.8.8 valid=300s;
# Header bảo mật
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
add_header X-Content-Type-Options nosniff always;
add_header X-Frame-Options SAMEORIGIN always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
# Nén
gzip on;
gzip_vary on;
gzip_types text/plain text/css application/json application/javascript;
brotli on;
brotli_comp_level 6;
brotli_types text/plain text/css application/json application/javascript;
# Tệp gốc & tĩnh
root /var/www/example.com/html;
index index.html index.htm;
}
Triển khai cấu hình này, chạy nginx -t && systemctl reload nginx, và theo dõi nhật ký lỗi Nginx để phát hiện bất kỳ lỗi bắt tay nào.
Giám Sát và Bảo Trì Liên Tục
- Chỉ Số: Kết nối với Prometheus bằng
nginx_exporterđể theo dõi độ trễ bắt tay TLS và tỷ lệ 4xx/5xx. - Gia Hạn Chứng Chỉ: Tự động hóa với
--deploy-hookcủa Certbot để tải lại Nginx sau khi gia hạn. - Kiểm Tra Bộ Mã: Chạy
sslscanhoặctestssl.shhàng tuần để đảm bảo bạn không vô tình kích hoạt lại các mã yếu. - Tuning Fail2Ban: Điều chỉnh
maxretryvàbantimedựa trên mô hình lưu lượng; một trường hợp sai có thể chặn người dùng hợp lệ.
Kết Luận
Củng cố bảo mật TLS cho Nginx không phải là một nhiệm vụ đơn lẻ; đó là một vòng lặp liên tục của cấu hình, kiểm tra và giám sát. Bằng cách làm theo bảy mẹo này, bạn sẽ tận hưởng một tư thế bảo mật chặt chẽ hơn, độ trễ thấp hơn, và người dùng hài lòng hơn. Để tìm hiểu sâu hơn về hiệu suất và những thực tiễn tốt nhất về bảo mật Nginx, hãy xem các tài nguyên tại lacidaweb.com.