0
0
Lập trình
Thaycacac
Thaycacac thaycacac

7 Mẹo Tăng Cường Bảo Mật TLS và HTTP/2 Trên Nginx

Đăng vào 4 tháng trước

• 5 phút đọc

Giới thiệu

Bảo mật lớp truyền tải (TLS) là nền tảng của bất kỳ dịch vụ web hiện đại nào. Khi kết hợp với HTTP/2, bạn sẽ có độ trễ thấp hơn, các luồng đa nhiệm và hiệu suất tổng thể tốt hơn. Tuy nhiên, một cấu hình TLS không chính xác có thể trở thành bề mặt tấn công. Hướng dẫn này sẽ đưa bạn qua bảy bước cụ thể để bảo vệ TLS và HTTP/2 trên máy chủ Nginx phục vụ lưu lượng thực.


1. Chỉ Sử Dụng Các Giao Thức Hiện Đại

Các phiên bản giao thức cũ (SSLv2, SSLv3, TLS 1.0/1.1) đầy rẫy các lỗ hổng đã biết. Hãy bắt Nginx chỉ sử dụng TLS 1.2TLS 1.3.

nginx Copy
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;

Nếu bạn cần hỗ trợ các trình duyệt cũ, hãy ngắt TLS ở một bộ cân bằng tải hoặc CDN và giữ cho backend chỉ sử dụng công nghệ hiện đại.


2. Chọn Bộ Mã Hóa Mạnh

Một bộ mã hóa tốt cân bằng giữa bảo mật và hiệu suất. Danh sách sau đây được khuyến nghị rộng rãi bởi Trình tạo cấu hình SSL của Mozilla:

nginx Copy
ssl_ciphers \
    "TLS_AES_256_GCM_SHA384:TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256" \
    "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384" \
    "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256";
  • Tại sao lại chọn các bộ mã hóa này?
    • Tất cả đều cung cấp khả năng bảo mật tiến về phía trước (ECDHE).
    • Không sử dụng RC4, DES, hoặc 3DES.
    • Chúng được tăng tốc phần cứng trên hầu hết các CPU.

3. Bật HTTP/2 và Tối Ưu Hóa Cài Đặt

HTTP/2 được bật chỉ bằng một chỉ thị, nhưng bạn có thể tinh chỉnh hành vi của nó.

nginx Copy
listen 443 ssl http2;
# Các điều chỉnh tùy chọn
http2_max_concurrent_streams 128;
http2_keepalive_timeout 30s;
  • http2_max_concurrent_streams giới hạn số luồng song song trên mỗi kết nối, ngăn một khách hàng làm cho những khách hàng khác không thể truy cập.
  • http2_keepalive_timeout giảm lãng phí kết nối không hoạt động.

4. Triển Khai OCSP Stapling

OCSP stapling tiết kiệm một vòng đi cho khách hàng và ẩn các truy vấn của bạn đến cơ quan cấp chứng chỉ khỏi công chúng.

nginx Copy
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;

Hãy chắc chắn rằng bộ phân giải trỏ đến một máy chủ DNS đáng tin cậy; nếu không, stapling sẽ thất bại và các trình duyệt có thể quay lại yêu cầu OCSP đầy đủ.


5. Thực Thi HSTS (HTTP Strict Transport Security)

HSTS yêu cầu trình duyệt chỉ giao tiếp HTTPS với miền của bạn trong một khoảng thời gian xác định.

nginx Copy
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
  • max-age=31536000 – một năm.
  • includeSubDomains – bảo vệ tất cả các miền phụ.
  • preload – cho phép bạn gửi miền vào danh sách preload của Chrome để thực thi nghiêm ngặt hơn.

Cảnh báo: Khi bạn bật preload, việc gỡ bỏ nó là một quá trình mất nhiều tháng. Hãy kiểm tra cẩn thận trên môi trường staging trước.


6. Tăng Cường Bảo Mật Cho Hệ Điều Hành Linux

TLS chỉ mạnh mẽ như hệ điều hành mà nó chạy trên đó.

  • Tường lửa – chặn tất cả các cổng vào ngoại trừ 80/443.
bash Copy
  sudo ufw allow 80/tcp
  sudo ufw allow 443/tcp
  sudo ufw enable
  • Fail2Ban – tự động cấm các địa chỉ IP thường xuyên thất bại trong việc bắt tay TLS hoặc cố gắng các cuộc tấn công phổ biến.
ini Copy
  [nginx-http-auth]
  enabled = true
  filter = nginx-http-auth
  logpath = /var/log/nginx/error.log
  maxretry = 5
  bantime = 3600
  • Cập Nhật Bảo Mật Tự Động – trên Debian/Ubuntu, hãy bật cập nhật không giám sát.
bash Copy
  sudo apt-get install unattended-upgrades
  sudo dpkg-reconfigure unattended-upgrades

7. Tự Động Gia Hạn Chứng Chỉ

Let’s Encrypt cung cấp chứng chỉ miễn phí và đáng tin cậy, nhưng bạn phải gia hạn chúng trước khi hết hạn. Sử dụng certbot với bộ hẹn giờ systemd.

bash Copy
# Cài đặt certbot cho Nginx
sudo apt-get install certbot python3-certbot-nginx

# Nhận chứng chỉ (thay thế example.com)
sudo certbot --nginx -d example.com -d www.example.com

# Xác minh gia hạn hoạt động
sudo certbot renew --dry-run

Certbot tự động tạo một bộ hẹn giờ systemd (certbot.timer) chạy hai lần mỗi ngày, vì vậy bạn không cần phải nghĩ về nó nữa.


Tóm Tắt

Dưới đây là một khối cấu hình Nginx tối thiểu nhưng sẵn sàng cho sản xuất mà bao gồm các khuyến nghị trước đó.

nginx Copy
server {
    listen 80       default_server;
    listen [::]:80  default_server;
    server_name example.com www.example.com;
    return 301 https://$host$request_uri;
}

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_prefer_server_ciphers on;
    ssl_ciphers "TLS_AES_256_GCM_SHA384:TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384";

    # OCSP stapling
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 1.1.1.1 1.0.0.1 valid=300s;
    resolver_timeout 5s;

    # HSTS
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

    # Gốc & ghi log
    root /var/www/html;
    access_log /var/log/nginx/example.access.log;
    error_log  /var/log/nginx/example.error.log;

    location / {
        try_files $uri $uri/ =404;
    }
}

Triển khai khối cấu hình, tải lại Nginx (sudo systemctl reload nginx), và chạy một bài kiểm tra SSL nhanh với Qualys SSL Labs hoặc openssl s_client -connect example.com:443 -servername example.com.


Kết luận

Tăng cường bảo mật TLS và HTTP/2 trên Nginx không chỉ là một danh sách kiểm tra một lần; đó là một kỷ luật liên tục. Bằng cách khóa các giao thức, bộ mã hóa và hệ điều hành, bạn giảm đáng kể bề mặt tấn công trong khi vẫn thu được lợi ích về hiệu suất của HTTP/2. Hãy nhớ theo dõi thời gian hết hạn của chứng chỉ, giữ cho hệ điều hành của bạn được cập nhật và thường xuyên xem xét bộ mã hóa của bạn theo các nghiên cứu về mật mã mới nổi.

Nếu bạn đang tìm kiếm một đối tác đáng tin cậy để kiểm tra hoặc lưu trữ các triển khai Nginx đã được bảo vệ của mình, hãy xem https://lacidaweb.com để nhận được lời khuyên hữu ích và dịch vụ quản lý.

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào