Cách bảo mật Nginx bằng Let's Encrypt trên Ubuntu 18.04

Tác giả NetworkEngineer, T.M.Một 13, 2021, 09:13:07 CHIỀU

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

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

Cách bảo mật Nginx bằng Let's Encrypt trên Ubuntu 18.04


Let's Encrypt là Tổ chức phát hành chứng chỉ (CA) cung cấp cách lấy và cài đặt chứng chỉ TLS/SSL miễn phí, do đó cho phép HTTPS được mã hóa trên máy chủ web. Nó hợp lý hóa quy trình bằng cách cung cấp một ứng dụng khách phần mềm, Certbot, cố gắng tự động hóa hầu hết (nếu không phải tất cả) các bước cần thiết. Hiện tại, toàn bộ quá trình lấy và cài đặt chứng chỉ hoàn toàn tự động trên cả Apache và Nginx.

Trong hướng dẫn này, bạn sẽ sử dụng Certbot để lấy chứng chỉ SSL miễn phí cho Nginx trên Ubuntu 18.04 và thiết lập tự động gia hạn chứng chỉ của bạn.

Hướng dẫn này sẽ sử dụng tập tin khối máy chủ Nginx riêng biệt thay vì tập tin mặc định. Mình khuyên bạn nên tạo các tập tin khối máy chủ Nginx mới cho từng miền vì nó giúp tránh các lỗi thường gặp và duy trì các tập tin mặc định dưới dạng cấu hình dự phòng.

Để làm theo hướng dẫn này, bạn sẽ cần:

  • Một máy chủ Ubuntu 18.04 được thiết lập bằng cách làm theo thiết lập máy chủ ban đầu này cho hướng dẫn Ubuntu 18.04, bao gồm người dùng không phải root nhưng có quyền sudo và tường lửa.
  • Tên miền đã đăng ký đầy đủ. Hướng dẫn này sẽ sử dụng your_domain xuyên suốt. Bạn có thể mua tên miền trên Namecheap, nhận một tên miền miễn phí trên Freenom hoặc sử dụng công ty đăng ký tên miền mà bạn chọn.
  • Cả hai bản ghi DNS sau được thiết lập cho máy chủ của bạn. Bạn có thể theo dõi phần giới thiệu này về DNS để biết chi tiết về cách thêm chúng.
  •    Bản ghi A với việc your_domain trỏ đến địa chỉ IP công cộng của máy chủ của bạn.
  •    Bản ghi A với việc trỏ đến địa chỉ IP công cộng của máy chủ của bạn www.your_domain
  • Đã cài đặt Nginx bằng cách làm theo Cách cài đặt Nginx trên Ubuntu 18.04. Đảm bảo rằng bạn có khối máy chủ cho miền của mình. Một lần nữa, hướng dẫn này sẽ sử dụng làm ví dụ /etc/nginx/sites-available/your_domain

Bước 1: Cài đặt Certbot

Bước đầu tiên để sử dụng Let's Encrypt để lấy chứng chỉ SSL là cài đặt phần mềm Certbot trên máy chủ của bạn.

Dự án Certbot khuyến nghị hầu hết người dùng cài đặt phần mềm thông qua Snap, một trình quản lý gói ban đầu được phát triển bởi Canonical (công ty đứng sau Ubuntu) và hiện có sẵn trên nhiều bản phân phối Linux:

Mã nguồn [Chọn]
$ sudo snap install --classic certbot
Đầu ra của bạn sẽ hiển thị phiên bản Certbot hiện tại và cài đặt thành công:

Mã nguồn [Chọn]
certbot 1.21.0 from Certbot Project (certbot-eff✓) installed
Tiếp theo, tạo một liên kết tượng trưng đến /snap/bin/certbot từ thư mục /usr/bin/. Việc này sẽ đảm bảo Certbot hoạt động chính xác trên máy chủ của bạn.

Để làm việc này chúng ta sẽ chạy lệnh sau đây:

Mã nguồn [Chọn]
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
Certbot hiện đã sẵn sàng để sử dụng, nhưng để nó cấu hình SSL cho Nginx, bạn cần xác minh một số cấu hình của Nginx.

Bước 2: Xác nhận cấu hình của Nginx

Certbot cần có khả năng tìm đúng khối server trong cấu hình Nginx của bạn để có thể tự động cấu hình SSL. Cụ thể, nó thực hiện điều này bằng cách tìm kiếm một server_name phù hợp với tên miền mà bạn yêu cầu chứng chỉ.

Nếu bạn đã làm theo bước thiết lập khối máy chủ được đề xuất trong hướng dẫn cài đặt Nginx, bạn sẽ có một khối server cho miền của mình tại /etc/nginx/sites-available/your_domain với lệnh đã được thiết lập thích hợp.

Để kiểm tra, hãy mở tập tin khối máy chủ cho miền của bạn bằng cách sử dụng Nano hoặc trình soạn thảo văn bản yêu thích của bạn:

Mã nguồn [Chọn]
$ sudo nano /etc/nginx/sites-available/your_domain
Tìm dòng server_name. Nó sẽ giống như sau:

Mã nguồn [Chọn]
server_name your_domain www.your_domain;
Nếu có, hãy thoát khỏi trình chỉnh sửa của bạn và chuyển sang bước tiếp theo.

Nếu không, hãy cập nhật nó để phù hợp. Sau đó, lưu tập tin và thoát khỏi trình chỉnh sửa của bạn. Nếu bạn đang sử dụng Nano bạn có thể làm điều này bằng cách nhấn CTRL + X sau đó Y và ENTER.

Bây giờ hãy xác minh cú pháp của các chỉnh sửa cấu hình của bạn:

Mã nguồn [Chọn]
$ sudo nginx -t
Nếu bạn gặp lỗi, hãy mở lại tập tin khối máy chủ và kiểm tra xem có lỗi chính tả hoặc ký tự bị thiếu nào không. Khi cú pháp của tập tin cấu hình của bạn chính xác, hãy tải lại Nginx để tải cấu hình mới:

Mã nguồn [Chọn]
$ sudo systemctl reload nginx
Certbot hiện có thể tìm đúng khối server và cập nhật nó.

Tiếp theo, bạn sẽ cập nhật tường lửa để cho phép lưu lượng HTTPS.

Bước 3: Cho phép HTTPS thông qua tường lửa

Nếu bạn đã bật tường lửa UFW, theo đề xuất của hướng dẫn điều kiện tiên quyết, bạn sẽ cần điều chỉnh cài đặt để cho phép lưu lượng HTTPS đi qua. May mắn thay, Nginx đăng ký một số cấu hình với tường lửa UFW khi cài đặt.

Bạn có thể kiểm tra cài đặt hiện tại bằng cách chạy như sau:

Mã nguồn [Chọn]
$ sudo ufw status
Bạn sẽ nhận được đầu ra như thế này, cho biết rằng chỉ lưu lượng HTTP được phép đến máy chủ web:

Mã nguồn [Chọn]
      Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                 
Nginx HTTP                 ALLOW       Anywhere                 
OpenSSH (v6)               ALLOW       Anywhere (v6)             
Nginx HTTP (v6)            ALLOW       Anywhere (v6)

Để cung cấp thêm lưu lượng truy cập HTTPS, hãy cho phép cấu hình Nginx Full và xóa cấu hình HTTP Nginx dư thừa:

Mã nguồn [Chọn]
$ sudo ufw allow 'Nginx Full'
Mã nguồn [Chọn]
$ sudo ufw delete allow 'Nginx HTTP'
Bây giờ khi bạn chạy lệnh ufw status, nó sẽ phản ánh các quy tắc mới này:

Mã nguồn [Chọn]
$ sudo ufw status
Mã nguồn [Chọn]
        Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
Nginx Full                 ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
Nginx Full (v6)            ALLOW       Anywhere (v6)

Tiếp theo, bạn sẽ chạy Certbot và tìm nạp các chứng chỉ của mình.

Bước 4: Lấy chứng chỉ SSL

Certbot cung cấp nhiều cách khác nhau để lấy chứng chỉ SSL thông qua các plugin. Plugin Nginx sẽ đảm nhiệm việc định cấu hình lại Nginx và tải lại cấu hình bất cứ khi nào cần thiết. Để sử dụng plugin này, hãy chạy như sau:

Mã nguồn [Chọn]
$ sudo certbot --nginx -d your_domain -d your_domain
Nếu đây là lần đầu tiên bạn chạy Certbot, bạn sẽ được nhắc nhập địa chỉ email và đồng ý với các điều khoản dịch vụ. Sau khi làm như vậy, Certbot sẽ giao tiếp với máy chủ Let's Encrypt để yêu cầu chứng chỉ cho miền của bạn. Nếu thành công, bạn sẽ nhận được kết quả sau:

Mã nguồn [Chọn]
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/your_domain/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/your_domain/privkey.pem
This certificate expires on 2022-01-27.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.

Deploying certificate
Successfully deployed certificate for your_domain to /etc/nginx/sites-enabled/your_domain
Successfully deployed certificate for www.your_domain to /etc/nginx/sites-enabled/your_domain
Congratulations! You have successfully enabled HTTPS on https://your_domain and https://www.your_domain

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by:
 * Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
 * Donating to EFF:                    https://eff.org/donate-le
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Các chứng chỉ của bạn đã được tải xuống và cài đặt. Hãy thử tải lại trang web của bạn bằng cách sử dụng https:// và để ý chỉ báo bảo mật của trình duyệt. Nó phải cho biết rằng trang web được bảo mật đúng cách, thường có biểu tượng ổ khóa màu xanh lá cây. Nếu bạn kiểm tra máy chủ của bạn bằng cách sử dụng https://www.ssllabs.com/ssltest/ nó sẽ nhận được thông báo thành công.

Bây giờ bạn đã nhận được chứng chỉ SSL của mình, bước cuối cùng là kiểm tra quá trình gia hạn.

Bước 5: Xác minh tự động gia hạn Certbot

Chứng chỉ của Let's Encrypt chỉ có giá trị trong chín mươi ngày. Điều này nhằm khuyến khích người dùng tự động hóa quy trình gia hạn chứng chỉ của họ. Các gói Certbot bạn cài đặt sẽ chăm sóc của điều này bằng cách thêm một kịch bản mới trong /etc/cron.d. Tập lệnh này chạy hai lần một ngày và sẽ tự động gia hạn bất kỳ chứng chỉ nào trong vòng ba mươi ngày kể từ ngày hết hạn.

Để kiểm tra quá trình gia hạn, bạn có thể chạy thử với certbot:

Mã nguồn [Chọn]
$ sudo certbot renew --dry-run
Nếu bạn không nhận được lỗi, bạn đã hoàn tất. Khi cần thiết, Certbot sẽ gia hạn chứng chỉ của bạn và tải lại Nginx để thực hiện các thay đổi. Nếu quá trình gia hạn tự động không thành công, Let's Encrypt sẽ gửi thông báo đến email bạn đã chỉ định, cảnh báo bạn khi chứng chỉ của bạn sắp hết hạn.

Trong hướng dẫn này, bạn đã cài đặt ứng dụng Let's Encrypt với Certbot, tải xuống chứng chỉ SSL cho tên miền của mình, cấu hình Nginx để sử dụng các chứng chỉ này và thiết lập gia hạn chứng chỉ tự động. Nếu bạn có thêm câu hỏi về việc sử dụng Certbot, tài liệu của họ là một nơi tốt để bắt đầu https://certbot.eff.org/docs/