Hướng Dẫn Bảo Mật Nginx Với Let’s Encrypt Trên Ubuntu 18.04 Chi Tiết

Bảo Mật Nginx Với Let’s Encrypt Trên Ubuntu 18.04

Let’s Encrypt là một nhà cung cấp chứng chỉ (Certificate Authority – CA) cung cấp chứng chỉ TLS/SSL miễn phí, giúp bạn kích hoạt HTTPS với mã hóa trên máy chủ web một cách dễ dàng. Quá trình nhận và cài đặt chứng chỉ được đơn giản hóa nhờ phần mềm khách Certbot, tự động hóa gần như tất cả các bước cần thiết. Hiện nay, việc cài đặt chứng chỉ SSL đã được tự động hóa hoàn toàn trên cả hai máy chủ web Apache và Nginx.

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

Để triển khai Nginx an toàn trên Ubuntu 18.04, việc sử dụng VPS mạnh mẽ là yếu tố then chốt. Với VPS giá rẻ, bạn có thể dễ dàng cài đặt và bảo mật website, đảm bảo hiệu suất cao mà vẫn tiết kiệm chi phí. Khám phá ngay các gói VPS phù hợp!

DataOnline sẽ sử dụng một tệp cấu hình server block riêng biệt thay vì tệp mặc định. Chúng tôi khuyến khích việc tạo tệp server block mới cho từng tên miền, giúp giảm thiểu lỗi phổ biến và giữ các tệp cấu hình mặc định làm cấu hình dự phòng.

Yêu cầu trước khi bắt đầu

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

  • Một máy chủ Ubuntu 18.04 được thiết lập theo hướng dẫn “Cách cài đặt Nginx trên Ubuntu 18.04”, bao gồm một người dùng không phải root có quyền sudo và một Firewall.

  • Một tên miền đã đăng ký đầy đủ. Hướng dẫn này sẽ sử dụng your_domain. Bạn có thể mua tên miền trên Namecheap, nhận miễn phí trên Freenom, hoặc sử dụng nhà đăng ký tên miền mà bạn chọn.

  • Hai bản ghi DNS được cấu hình cho máy chủ của bạn. Bạn có thể tham khảo bài giới thiệu về DNS của DataOnline để biết cách thêm bản ghi:

    • Một bản ghi A với your_domain trỏ đến địa chỉ IP công khai của máy chủ.

    • Một bản ghi A với www.your_domain trỏ đến địa chỉ IP công khai của máy chủ.

  • Cài đặt Nginx theo hướng dẫn “Cách cài đặt Nginx trên Ubuntu 18.04”. Hãy đảm bảo rằng bạn có một server block cho tên miền của mình. Trong hướng dẫn này, ví dụ được sử dụng là /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 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ó trên nhiều bản phân phối Linux:

sudo snap install --classic certbot

Kết quả hiển thị sẽ cho biết phiên bản hiện tại của Certbot và thông báo cài đặt thành công:

Output

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 tệp thực thi /snap/bin/certbot mới cài đặt từ thư mục /usr/bin/. Điều này đảm bảo rằng lệnh certbot có thể chạy đúng trên máy chủ:

sudo ln -s /snap/bin/certbot /usr/bin/certbot

Certbot đã 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ó thể tìm đúng server block trong cấu hình Nginx để tự động cấu hình SSL. Cụ thể, nó sẽ tìm dòng server_name phù hợp với tên miền bạn yêu cầu chứng chỉ.

Nếu bạn đã làm theo bước thiết lập server block được khuyến khích trong hướng dẫn cài đặt Nginx, bạn sẽ có một server block cho tên miền tại /etc/nginx/sites-available/your_domain với chỉ thị server_name được thiết lập chính xác.

Để kiểm tra, mở tệp server block của tên miền bằng nano hoặc trình soạn thảo ưa thích:

sudo nano /etc/nginx/sites-available/your_domain

Tìm dòng server_name hiện có. Nó nên giống như sau:

...
server_name your_domain www.your_domain;
...

Nếu có, thoát khỏi trình soạn thảo và chuyển sang bước tiếp theo.

Nếu không, hãy cập nhật cho khớp, sau đó lưu tệp và thoát khỏi trình soạn thảo. Nếu sử dụng nano, nhấn CTRL + X rồi nhấn YENTER.

Sau đó, xác minh cú pháp các chỉnh sửa trong cấu hình:

sudo nginx -t

Nếu có lỗi, mở lại tệp server block và kiểm tra các lỗi chính tả hoặc ký tự bị thiếu.

Khi cú pháp của tệp cấu hình đã đúng, tải lại Nginx để áp dụng cấu hình mới:

sudo systemctl reload nginx

Bây giờ Certbot có thể tìm thấy server block đúng và cập nhật cấu hình.

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

Bước 3 – Cho phép HTTPS qua Firewall

Nếu bạn đã kích hoạt Firewall ufw theo khuyến nghị, bạn cần điều chỉnh cài đặt để cho phép lưu lượng HTTPS. May mắn thay, Nginx đã đăng ký một số profile với ufw khi cài đặt.

Kiểm tra trạng thái hiện tại bằng lệnh:

sudo ufw status

Bạn sẽ nhận được kết quả tương tự như sau, cho thấy chỉ lưu lượng HTTP được phép truy cập máy chủ web:

Output
Status: active

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

Để cho phép lưu lượng HTTPS bổ sung, hãy cho phép profile “Nginx Full” và xóa cấu hình cho phép profile “Nginx HTTP” thừa:

sudo ufw allow 'Nginx Full'
sudo ufw delete allow 'Nginx HTTP'

Khi chạy lại lệnh sudo ufw status, kết quả sẽ được cập nhật như sau:

sudo ufw status
Output
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 để lấy chứng chỉ.

Bước 4 – Nhận chứng chỉ SSL

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

sudo certbot --nginx -d your_domain -d your_domain

Lệnh này chạy Certbot với plugin --nginx, sử dụng -d để chỉ định các tên miền mà bạn muốn chứng chỉ có hiệu lực.

Nếu đây là lần đầu tiên bạn chạy Certbot, bạn sẽ được yêu cầu nhập địa chỉ email và đồng ý với điều khoản dịch vụ. Sau đó, Certbot sẽ liên lạc với máy chủ của Let’s Encrypt để yêu cầu chứng chỉ cho tên miền của bạn. Nếu thành công, bạn sẽ nhận được kết quả sau:

Output

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, cài đặt và kích hoạt. Hãy thử tải lại website của bạn sử dụng https:// và quan sát biểu tượng bảo mật trên trình duyệt. Nó sẽ hiển thị rằng trang web đã được bảo mật đúng cách, thường với một biểu tượng ổ khóa màu xanh. Nếu bạn kiểm tra máy chủ của mình bằng công cụ SSL Labs Server Test, nó sẽ nhận được điểm A.

Bây giờ, sau khi lấy được chứng chỉ SSL, bước cuối cùng là kiểm tra quá trình gia hạn tự động.

Bước 5 – Kiểm tra tự động gia hạn của Certbot

Chứng chỉ của Let’s Encrypt chỉ có hiệu lực trong 90 ngày. Mục đích là để khuyến khích người dùng tự động gia hạn chứng chỉ. Gói Certbot mà bạn đã cài đặt sẽ tự động thực hiện điều này bằng cách thêm một script gia hạn vào /etc/cron.d. Script này chạy hai lần mỗi ngày và sẽ tự động gia hạn bất kỳ chứng chỉ nào còn dưới 30 ngày đến hạn.

Để kiểm tra quá trình gia hạn, bạn có thể thực hiện một lần chạy thử với Certbot:

sudo certbot renew --dry-run

Nếu không có lỗi xuất hiện, mọi thứ đã sẵn sàng. Khi cần, Certbot sẽ gia hạn chứng chỉ và tải lại Nginx để áp dụng thay đổi. Nếu quá trình gia hạn tự động thất bại, Let’s Encrypt sẽ gửi thông báo đến email bạn đã cung cấp, cảnh báo khi chứng chỉ sắp hết hạn.

Kết luận

Trong hướng dẫn này, bạn đã:

  • Cài đặt Certbot để lấy chứng chỉ SSL từ Let’s Encrypt.

  • Cấu hình Nginx để sử dụng các chứng chỉ này.

  • Thiết lập quá trình gia hạn chứng chỉ tự động.

Nếu bạn có thêm bất kỳ câu hỏi nào về việc sử dụng Certbot, tài liệu của Certbot là nơi khởi đầu tốt. Sau khi cấu hình Let’s Encrypt, việc chọn thuê VPS chất lượng sẽ giúp website của bạn vận hành mượt mà và bảo mật. Các dịch vụ VPS uy tín cung cấp tài nguyên dồi dào, hỗ trợ tối ưu cho Nginx, đảm bảo trải nghiệm người dùng tuyệt vời. Tìm hiểu thêm ngay!

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *