0
0
Lập trình
NM

Danh Sách Kiểm Tra Bảo Mật Nginx với TLS và HTTP/2

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

• 5 phút đọc

Giới thiệu

Là một Kỹ sư vận hành hệ thống (SRE), bạn biết rằng một máy chủ web được cấu hình sai sẽ mở ra cơ hội cho các cuộc tấn công. Nginx là một máy chủ proxy ngược và máy chủ tệp tĩnh phổ biến, nhưng khi cài đặt mặc định, nó có các cài đặt TLS dễ dãi và không tối ưu cho HTTP/2. Danh sách kiểm tra này hướng dẫn bạn qua các bước thiết yếu để bảo mật Nginx, kích hoạt TLS hiện đại và tối ưu hiệu suất cho HTTP/2 - tất cả trong khi giữ cho khối lượng công việc vận hành ở mức thấp.


1. Lấy Chứng Chỉ Đáng Tin Cậy

  • Sử dụng CA uy tín - Let’s Encrypt cung cấp chứng chỉ miễn phí, tự động gia hạn mỗi 90 ngày. Đối với các khối lượng công việc sản xuất, hãy xem xét việc sử dụng CA trả phí để có xác minh mở rộng.

  • Tự động gia hạn - Cài đặt certbot hoặc acme.sh và thêm một cron job:

    bash Copy
    0 3 * * * /usr/bin/certbot renew --quiet --post-hook "systemctl reload nginx"
  • Lưu trữ khóa an toàn - Giữ các khóa riêng trong /etc/ssl/private với quyền 600 và thuộc quyền sở hữu của root:root.


2. Thực Thi Các Phiên Bản TLS và Cipher Suite Mạnh

Các giao thức cũ (TLS 1.0/1.1) dễ bị tấn công POODLE và BEAST. Hạn chế Nginx chỉ sử dụng TLS 1.2 và TLS 1.3:

Copy
```nginx
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH";
ssl_prefer_server_ciphers on;
```
  • Ưu tiên cipher của máy chủ - Điều này ngăn chặn các khách hàng hạ cấp xuống các cipher yếu.
  • Sử dụng forward-secrecy - Bao gồm các nhóm ECDHE/ECDH. Các công cụ như SSL Labs có thể xác minh điểm số của bạn.

3. Kích Hoạt HTTP/2 Để Tăng Tốc Tải Trang

HTTP/2 cho phép đa luồng qua một kết nối TLS duy nhất, giảm độ trễ. Kích hoạt nó với cờ http2 trên chỉ thị listen:

Copy
```nginx
listen 443 ssl http2;
```

Đảm bảo cấu hình TLS của bạn đáp ứng các yêu cầu của HTTP/2 (không có TLSv1.0, không có cipher RC4). Kiểm tra với curl -I --http2 https://yourdomain.com.


4. Củng Cố Các Header và Kích Hoạt HSTS

Các header phản hồi liên quan đến bảo mật cung cấp thêm một lớp bảo vệ:

Copy
```nginx
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options DENY;
add_header Referrer-Policy no-referrer-when-downgrade;
```
  • HSTS yêu cầu trình duyệt luôn sử dụng HTTPS trong năm tới.
  • always đảm bảo header được thêm vào ngay cả trong các phản hồi lỗi.

5. Triển Khai OCSP Stapling

OCSP stapling giảm thời gian bắt tay TLS và bảo vệ chống lại các cuộc tấn công thu hồi chứng chỉ:

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

Kiểm tra trạng thái với openssl s_client -connect yourdomain.com:443 -status.


6. Hạn Chế Cipher Suite Cho Các Trình Duyệt Cũ (Tùy Chọn)

Nếu bạn có các trình duyệt cũ, bạn có thể tạo một khối server riêng biệt lắng nghe trên một cổng không phải HTTP/2 (ví dụ: 8443) với một cipher suite linh hoạt hơn, sau đó chuyển hướng tất cả lưu lượng đến khối 443 đã được củng cố.


7. Tường Lửa và Giới Hạn Tốc Độ

  • UFW/iptables - Chỉ cho phép các cổng 80 và 443 từ internet, chặn mọi thứ khác.

  • Fail2Ban - Bảo vệ chống lại các nỗ lực tấn công brute-force vào điểm cuối quản trị:

    ini Copy
    [nginx-http-auth]
    enabled = true
    filter = nginx-http-auth
    logpath = /var/log/nginx/error.log
    maxretry = 5
    bantime = 3600
  • Giới hạn tốc độ kết nối để giảm thiểu các cuộc tấn công DoS:

    nginx Copy
    limit_req_zone $binary_remote_addr zone=one:10m rate=30r/s;
    limit_req zone=one burst=10 nodelay;

8. Ghi Nhận và Giám Sát

  • Kích hoạt ghi nhận yêu cầu và lỗi với định dạng JSON để dễ dàng tiếp nhận vào ELK hoặc Loki:

    nginx Copy
    log_format json_escape '{"time":"$time_iso8601","remote_addr":"$proxy_protocol_addr","host":"$host","request":"$request","status":$status,"bytes_sent":$body_bytes_sent,"request_time":$request_time}';
    access_log /var/log/nginx/access.json json_escape;
  • Thiết lập cảnh báo cho các đột biến đột ngột trong phản hồi 4xx/5xx sử dụng Prometheus + Alertmanager.


9. Quản Lý Cập Nhật Định Kỳ

Các lỗ hổng Nginx thường xuất hiện. Tự động hóa cập nhật hệ điều hành và gói:

Copy
```bash
apt-get update && apt-get upgrade -y
systemctl restart nginx
```

Trên Debian/Ubuntu, hãy kích hoạt cập nhật tự động cho các bản vá bảo mật.


10. Xác Minh Việc Củng Cố

Chạy các kiểm tra này sau mỗi thay đổi:

  1. Kiểm tra SSL Labs - Nhắm đến điểm A+.
  2. Kiểm tra máy chủ SSL của Qualys - Xác nhận OCSP stapling và HSTS.
  3. curl -I -s -D - https://yourdomain.com - Xác minh các header.
  4. nginx -t - Đảm bảo cú pháp cấu hình đúng trước khi tải lại.

Kết luận

Bằng cách làm theo danh sách kiểm tra này, bạn sẽ có một máy chủ Nginx có khả năng giao tiếp với TLS 1.3, truyền tải qua HTTP/2 và chống lại các cuộc tấn công web phổ biến nhất. Sự kết hợp của các cipher mạnh, HSTS, OCSP stapling và giám sát chủ động tạo ra một tư thế phòng thủ sâu mà không làm giảm hiệu suất.

Nếu bạn đang tìm kiếm một đối tác lưu trữ đáng tin cậy có thể giúp bạn thực hiện các bước củng cố này trên nền tảng quản lý, hãy xem xét https://lacidaweb.com để có trải nghiệm thân thiện với nhà phát triển.

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