Cách Bảo Mật Nginx Với Let’s Encrypt Trên Ubuntu | Nginx Let’s Encrypt Ubuntu

Nginx Let's Encrypt

Let’s Encrypt là một Tổ chức cấp phát chứng chỉ (CA – Certificate Authority) cung cấp giải pháp đơn giản và miễn phí để cài đặt các chứng chỉ TLS/SSL, giúp website của bạn an toàn với giao thức HTTPS được mã hóa. Họ cũng cung cấp một công cụ mạnh mẽ – Certbot – giúp tự động hóa toàn bộ quá trình từ cài đặt đến cấu hình chứng chỉ. Hiện nay, việc lấy và cài chứng chỉ SSL hoàn toàn có thể tự động trên cả Apache và Nginx.

Trong hướng dẫn này, bạn sẽ học cách dùng Certbot để nhận chứng chỉ SSL miễn phí cho Nginx trên Ubuntu, đồng thời thiết lập để chứng chỉ tự động gia hạn.

Trong hướng dẫn này, chúng ta sẽ sử dụng một tệp cấu hình riêng biệt cho Nginx thay vì chỉnh sửa trực tiếp tệp cấu hình mặc định. Việc tạo một server block mới cho từng domain riêng biệt được khuyến nghị vì nó giúp tránh các lỗi cấu hình phổ biến và đồng thời giữ nguyên tệp mặc định như một bản dự phòng an toàn khi cần thiết.

💡 Chúng ta sẽ sử dụng một tệp cấu hình riêng cho từng domain thay vì sửa đổi cấu hình mặc định của Nginx – điều này giúp bạn tránh sai sót và dễ dàng kiểm soát.

Mục Lục

  1. Cài đặt Certbot
  2. Xác nhận cấu hình của Nginx
  3. Mở cổng HTTPS trên tường lửa
  4. Lấy chứng chỉ SSL
  5. Kiểm tra quá trình tự động gia hạn của Certbot

Yêu Cầu Chuẩn Bị

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

  • Một máy chủ Ubuntu được thiết lập theo hướng dẫn “Thiết Lập Máy Chủ Ban Đầu với Ubuntu 22.04”, bao gồm một user không phải root có quyền sudo và tường lửa hoạt động.
  • Một tên miền đã đăng ký. Trong hướng dẫn này, chúng tôi sử dụng example.com. Bạn có thể mua tên miền từ Namecheap, lấy miễn phí với Freenom hoặc sử dụng nhà đăng ký mà bạn ưa thích.
  • Hai bản ghi DNS được thiết lập cho máy chủ của bạn. Nếu bạn sử dụng DataOnline, hãy xem tài liệu DNS của chúng tôi để biết cách thêm các bản ghi.
    • Một bản ghi A cho example.com trỏ tới địa chỉ IP công khai của máy chủ.
    • Một bản ghi A cho www.example.com trỏ tới địa chỉ IP công khai của máy chủ.
  • Nginx được cài đặt theo hướng dẫn “Cách Cài Đặt Nginx trên Ubuntu 22.04”. Đảm bảo rằng bạn đã tạo một server block cho domain của mình (hướng dẫn này sử dụng ví dụ tại /etc/nginx/sites-available/example.com).

Bước 1 – Cài Đặt Certbot

Certbot khuyến nghị cài đặt bằng snap package. Các gói snap hoạt động trên hầu hết các bản phân phối Linux, nhưng bạn cần cài đặt trước snapd để quản lý các gói snap. Ubuntu đã hỗ trợ snap ngay từ đầu, vì vậy bạn có thể bắt đầu bằng cách cập nhật snap core:

sudo snap install core; sudo snap refresh core

Nếu bạn đang làm việc trên một máy chủ trước đó đã cài phiên bản certbot cũ, hãy gỡ bỏ nó trước:

sudo apt remove certbot

Sau đó, cài đặt gói certbot:

sudo snap install --classic certbot

Cuối cùng, tạo liên kết từ lệnh certbot trong thư mục cài snap vào đường dẫn hệ thống, để bạn có thể chạy certbot chỉ bằng cách gõ tên lệnh:

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

Giờ đây, sau khi đã cài đặt Certbot, hãy chạy nó để lấy chứng chỉ.

Nginx Let's Encrypt ubuntu

Bước 2 – Xác Nhận Cấu Hình của Nginx

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

Nếu bạn đã thực hiện bước tạo server block trong hướng dẫn cài đặt Nginx, bạn sẽ có một server block cho tên miền của mình với chỉ thị server_name đã được thiết lập chính xác.

Để kiểm tra, mở tệp cấu hình của domain bằng nano (hoặc trình soạn thảo ưa thích của bạn):

sudo nano /etc/nginx/sites-available/example.com

Tìm dòng có chỉ thị server_name. Nó nên trông như sau:

...
server_name example.com www.example.com;
...

Nếu đã đúng, thoát khỏi trình soạn thảo và chuyển sang bước tiếp theo. Nếu chưa, hãy cập nhật cho khớp, sau đó lưu tệp, thoát trình soạn thảo và kiểm tra cú pháp của các chỉnh sửa:

sudo nginx -t

Nếu có lỗi, hãy mở lại file server block và kiểm tra lại các ký tự bị thiếu hoặc sai. Khi cú pháp file 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à tự động cập nhật cấu hình.

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

Bước 3 – Cho Phép Lưu Lượng HTTPS Qua Tường Lửa

Nếu bạn đang sử dụng tường lửa ufw theo khuyến nghị trong phần chuẩn bị, bạn cần điều chỉnh cài đặt để cho phép lưu lượng HTTPS. May mắn thay, khi cài Nginx, nó đã đăng ký một vài profile với ufw.

Để xem trạng thái hiện tại của tường lửa, gõ:

sudo ufw status

Có thể bạn sẽ thấy trạng thái như sau (chỉ cho phép HTTP):

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 thêm lưu lượng HTTPS, hãy cho phép profile Nginx Full và xóa profile Nginx HTTP không cần thiết:

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

Kiểm tra lại trạng thái tường lửa:

sudo ufw status

Kết quả mong đợi:

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, hãy chạy Certbot để lấy chứng chỉ.

Bước 4 – Lấy 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. Để sử dụng plugin này, hãy gõ:

sudo certbot --nginx -d example.com -d www.example.com

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

Khi chạy lệnh, 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 khi hoàn tất, bạn sẽ nhận được thông báo cho biết quá trình thành công và vị trí lưu trữ chứng chỉ:

IMPORTANT NOTES:
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-06-01.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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

Chứng chỉ của bạn đã được tải xuống, cài đặt và kích hoạt, và cấu hình Nginx của bạn giờ sẽ tự động chuyển hướng tất cả các yêu cầu web sang giao thức https://. Hãy thử tải lại trang web của bạn và chú ý vào biểu tượng bảo mật trên trình duyệt; biểu tượng này nên cho thấy rằng trang web đã được bảo mật hoàn chỉnh, thường là bằng một biểu tượng ổ khóa. 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 xếp hạng A.

Hãy kết thúc bằng việc kiểm tra quá trình gia hạn.

Bước 5 – Kiểm Tra Tự Động Gia Hạn Certbot

Chứng chỉ của Let’s Encrypt chỉ có hiệu lực trong 90 ngày. Điều này nhằm khuyến khích người dùng tự động hóa quá trình gia hạn chứng chỉ. Gói certbot mà chúng ta đã cài đặt sẽ xử lý việc này bằng cách thêm một systemd timer chạy hai lần mỗi ngày để tự động gia hạn bất kỳ chứng chỉ nào còn dưới 30 ngày trước khi hết hạn.

Để kiểm tra trạng thái của timer, gõ:

sudo systemctl status snap.certbot.renew.service

Kết quả hiển thị sẽ như sau:

○ snap.certbot.renew.service - Service for snap application certbot.renew
     Loaded: loaded (/etc/systemd/system/snap.certbot.renew.service; static)
     Active: inactive (dead)
TriggeredBy: ● snap.certbot.renew.timer

Để kiểm tra quá trình gia hạn, bạn có thể chạy thử (dry run):

sudo certbot renew --dry-run

Nếu không có lỗi nào được hiển thị, bạn đã thiết lập xong. Khi cần, Certbot sẽ tự động gia hạn chứng chỉ và tải lại Nginx để áp dụng các thay đổi. Nếu quá trình gia hạn tự động gặp vấn đề, Let’s Encrypt sẽ gửi thông báo qua email mà bạn đã đăng ký, 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 đã hoàn thành toàn bộ quy trình: cài đặt công cụ Certbot của Let’s Encrypt, tải xuống chứng chỉ SSL miễn phí cho tên miền của bạn, cấu hình Nginx để sử dụng các chứng chỉ này, và thiết lập hệ thống tự động gia hạn chứng chỉ.

Nếu bạn còn bất kỳ thắc mắc nào về cách sử dụng Certbot, hãy bắt đầu khám phá thêm tại tài liệu chính thức của Certbot – đó sẽ là nguồn tham khảo tuyệt vời dành cho bạn.

Để 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 *