Cách cấu hình Nginx làm Reverse Proxy với chứng chỉ SSL miễn phí Let's Encrypt

Tác giả Network Engineer, T.Chín 17, 2021, 09:09:49 SÁNG

« Chủ đề trước - Chủ đề tiếp »

0 Thành viên và 2 Khách đang xem chủ đề.

Cách cấu hình Nginx làm Reverse Proxy với chứng chỉ SSL miễn phí Let's Encrypt


Tiện ích certbot bởi Electronic Fronter Foundation (EFF) có thể sử dụng xác thực DNS để có được, cài đặt và đổi Giấy chứng nhận SSL tin cậy miễn phí trên một loạt các cấu hình máy chủ web, bao gồm một Reverse Proxy.

Cấu hình này có thể được sử dụng trên các trang web nội bộ và bên ngoài. Nó đặc biệt hữu ích trong những trường hợp bạn muốn có một chứng chỉ đáng tin cậy cho một ứng dụng web nội bộ mà không cần tốn thời gian, công sức và rủi ro khi tạo và duy trì Tổ chức phát hành chứng chỉ nội bộ (CA) của riêng bạn.

Hướng dẫn này sẽ giải thích cách cấu hình Nginx với chứng chỉ đáng tin cậy để hoạt động như một Reverse Proxy trước Bộ điều khiển Unifi.

1. Cài đặt certbot.

Chứng chỉ Let's Encrypt sẽ hết hạn sau mỗi 90 ngày, vì vậy chúng sẽ rất khó duy trì nếu không có certbot xử lý việc gia hạn tự động. Tất nhiên, các máy chủ công cụ như Bộ điều khiển Unifi không thể tự chạy certbot. Hệ thống đang chạy Nginx có thể sử dụng certbot để tự động gia hạn chứng chỉ cho chính nó và chuyển lưu lượng truy cập đến công cụ một cách minh bạch bằng cách hoạt động như một Reverse Proxy.

Mặc dù certbot có thể được tìm thấy trong kho gói của hầu hết các bản phân phối Linux, EFF khuyến nghị sử dụng bản phát hành nhanh, vì bản phát hành nhanh được xuất bản trực tiếp bởi EFF, vì vậy nó luôn là bản phát hành mới nhất.

Đầu tiên, hãy  cài đặt snapd. Nó đã được cài đặt trên Ubuntu.

Xóa bất kỳ certbot đã cài đặt trên hệ thống của mình.

Sau đó sử dụng  snapd để cài đặt  certbot.

Mã nguồn [Chọn]
sudo snap install core; sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot

2. Cấu hình Nginx làm Reverse Proxy.

Cài đặt Nginx. Ví dụ: trên máy chủ Debian hoặc Ubuntu chạy lệnh sau.

Mã nguồn [Chọn]
sudo apt install -y nginx
Nếu trang web (trang web mà Nginx ở phía trước) sử dụng chứng chỉ SSL tự ký, hãy tải xuống bản sao của chứng chỉ. Cách dễ nhất để thực hiện việc này là truy cập trang web trong Google Chrome hoặc Microsoft Edge (chẳng hạn như URL HTTPS của bộ điều khiển Unifi https://host:8443), nhấp vào ổ khóa trên thanh địa chỉ và nhấp vào chứng chỉ. Trên Windows, nhấp vào tab Chi tiết, sau đó click Copy to file.... Nhấp vào tiếp theo và chọn định dạng Base-64. Lưu chứng chỉ, sau đó tải nó lên máy chủ web bằng SCP và di chuyển nó vào một thư mục thích hợp, ví dụ:

Mã nguồn [Chọn]
sudo mkdir /etc/nginx/ssl
sudo mv unifi.cer /etc/nginx/ssl
sudo chown root:root /etc/nginx/ssl/unifi.cer
sudo chmod u=rw,go=r /etc/nginx/ssl/cert/unifi.cer

Tạo một tập tin mới trong /etc/nginx/sites-available

Mã nguồn [Chọn]
sudo nano /etc/nginx/sites-available/unifi.example.net
Thêm chi tiết cấu hình cho Reverse Proxy HTTP cơ bản. Certbot sẽ thêm cấu hình HTTPS cho bạn sau.

Nếu trang web đang sử dụng HTTP thuần túy chứ không phải HTTPS, hãy bỏ qua dòng proxy_ssl_trusted_certificate.

Mã nguồn [Chọn]
server {
    listen 80;
    listen [::]:80;
    server_name unifi.example.net;

    location / {
        proxy_pass https://127.0.0.1:8443;
        proxy_ssl_trusted_certificate /etc/nginx/ssl/unifi.cer;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

Lưu các tập tin.

Kích hoạt cấu hình mới.

Mã nguồn [Chọn]
ln -s /etc/nginx/sites-available/unifi.example.net /etc/nginx/sites-enabled/unifi.example.net
sudo service nginx reload

Tiếp theo cài đặt certbot plugin cho nhà cung cấp DNS của bạn. Danh sách các plugin DNS có thể được tìm thấy tại đây. Ở đó, bạn sẽ tìm thấy các liên kết đến hướng dẫn cụ thể cho từng plugin/nhà cung cấp DNS.

DNS là một phương thức xác thực đáng tin cậy certbot có thể sử dụng ngay cả khi máy chủ web của bạn không được tiếp xúc với internet.

Trong ví dụ này, chúng ta sẽ sử dụng Google DNS.

Mã nguồn [Chọn]
sudo snap set certbot trust-plugin-with-root=ok
sudo snap install certbot-dns-google

Yêu cầu chứng chỉ cho tên miền/tên miền phụ của bạn bằng cách sử dụng sudo certbot certonly và chuyển các tùy chọn cấu hình mà plugin DNS của bạn yêu cầu, theo tài liệu của plugin đó. Ví dụ dưới đây sử dụng Google DNS.

Mã nguồn [Chọn]
sudo certbot certonly --dns-google --dns-google-credential /etc/letsencrypt/creds/google-dns-creds.json -d unifi.example.net
Sau khi nhận được chứng chỉ, hãy sử dụng certbot để thêm cấu hình SSL vào cấu hình Nginx trước đó.

Mã nguồn [Chọn]
sudo certbot --nginx  -d unifi.example.net
Bạn sẽ thấy đầu ra như thế này.

Mã nguồn [Chọn]
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator nginx, Installer nginx
Cert not yet due for renewal

You have an existing certificate that has exactly the same domains or certificate name you requested and isn't close to expiry.
(ref: /etc/letsencrypt/renewal/unifi.example.net.conf)

What would you like to do?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: Keep the existing certificate for now
2: Renew & replace the certificate (may be subject to CA rate limits)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Chọn tùy chọn 1.

Tải lại cấu hình cho Nginx.

Mã nguồn [Chọn]
sudo service nginx reload
Chỉnh sửa tập tin cấu hình gia hạn cho chứng chỉ.

Mã nguồn [Chọn]
sudo nano /etc/letsencrypt/renewal/unifi.example.net.conf
Dưới phần [renewalparams], thêm dòng.

Mã nguồn [Chọn]
renew_hook = systemctl reload nginx
và lưu các thay đổi vào tập tin.

Thao tác này cấu hình certbot để tải lại cấu hình Nginx sau khi chứng chỉ đã được gia hạn.