Cách Bảo Mật Nginx Với Let’s Encrypt Trên AlmaLinux 9 Đơn Giản, Hiệu Quả

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

Let’s Encrypt là một Certificate Authority (CA) cung cấp cách tiếp cận dễ dàng để lấy và cài đặt chứng chỉ TLS/SSL miễn phí, từ đó cho phép HTTPS được mã hóa trên các máy chủ web. Nó đơn giản hóa quy trình bằng cách cung cấp một phần mềm khách, 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 nay, toàn bộ quá trình lấy và cài đặt chứng chỉ đã được tự động hoàn toàn trên cả Apache và Nginx.

Để triển khai Nginx và Let’s Encrypt hiệu quả, bạn cần một VPS ổn định. Với VPS giá rẻ từ các nhà cung cấp uy tín, bạn dễ dàng thiết lập máy chủ an toàn, tiết kiệm chi phí mà vẫn đảm bảo hiệu suất cao. Khám phá ngay các gói VPS phù hợp!

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 Rocky Linux 9 và thiết lập để chứng chỉ được tự động gia hạn.

Hướng dẫn này sẽ sử dụng một tệp cấu hình máy chủ Nginx riêng thay vì tệp mặc định. Bạn nên tạo các tệp server block mới cho từng domain vì cách này giúp tránh các sai sót phổ biến và giữ các tệp mặc định làm cấu hình dự phòng.

Yêu cầu tiên quyết

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

● Một máy chủ Rocky Linux 9 được thiết lập theo hướng dẫn “Cài đặt máy chủ ban đầu với Rocky Linux 9”, bao gồm tài khoản người dùng không phải root có quyền sudo và firewall.
● Một tên miền đã được đăng ký. Hướng dẫn này sẽ sử dụng example.com làm ví dụ. 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ý tên miền bạn ưa thích.
● Cần thiết lập cả hai bản ghi DNS 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 DataOnline để biết cách thêm các bản ghi này.
● Một bản ghi A với example.com trỏ đến địa chỉ IP công cộng của máy chủ.
● Một bản ghi A với www.example.com trỏ đến địa chỉ IP công cộng của máy chủ.
● Nginx đã được cài đặt theo hướng dẫn “Cách cài đặt Nginx trên Rocky Linux 9”. Hãy chắc chắn rằng bạn đã có server block cho domain của bạn. Hướng dẫn này sẽ sử dụng /etc/nginx/sites-available/example.com làm ví dụ.

Khi đã sẵn sàng, hãy đăng nhập với tài khoản người dùng không phải root để bắt đầu.

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

Đầu tiên, bạn cần cài đặt gói phần mềm Certbot. Đăng nhập vào máy Rocky Linux 9 với tư cách người dùng không phải root:

ssh sammy@your_server_ip

Gói certbot không có sẵn trong trình quản lý gói mặc định. Bạn cần kích hoạt kho lưu trữ EPEL để cài đặt Certbot.

Để thêm kho EPEL cho Rocky Linux 9, chạy lệnh sau:

sudo dnf install epel-release

Khi được nhắc, nhập y để xác nhận cài đặt.

Bây giờ, bạn đã có quyền truy cập vào kho mở rộng, cài đặt tất cả các gói cần thiết:

sudo dnf install certbot python3-certbot-nginx

Lệnh trên sẽ cài đặt Certbot và plugin Nginx cho Certbot, cần thiết để chạy chương trình. Quá trình cài đặt có thể yêu cầu nhập GPG key, hãy xác nhận để tiếp tục.

Giờ đã cài đặt xong Certbot, chúng ta tiến hành chạy Certbot để lấy chứng chỉ.

Bước 2 – Xác nhận cấu hình Nginx

Certbot cần tìm đúng server block trong cấu hình Nginx để có thể tự động cấu hình SSL. Cụ thể, nó sẽ tìm chỉ thị server_name khớp với domain bạn yêu cầu chứng chỉ.

Nếu bạn đã làm theo bước thiết lập server block trong hướng dẫn cài đặt Nginx, bạn sẽ có server block cho domain tại /etc/nginx/conf.d/example.com với chỉ thị server_name được cấu hình đúng.

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

sudo nano /etc/nginx/conf.d/example.com

Tìm dòng server_name có dạng:

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

Nếu tệp đã có dòng đó, lưu và thoát, rồi kiểm tra cú pháp:

sudo nginx -t

Nếu có lỗi, mở lại tệp server block và sửa lại. Sau khi cú pháp đúng, tải lại Nginx:

sudo systemctl reload nginx

Certbot bây giờ đã có thể tìm thấy server block phù hợp và tự động cập nhật cấu hình.

Tiếp theo, cập nhật firewall để cho phép lưu lượng HTTPS.

Bước 3 – Cập nhật quy tắc firewall

Vì cấu hình ban đầu của bạn đã bật firewalld, bạn cần điều chỉnh cài đặt firewall để cho phép kết nối đến máy chủ Nginx.

Để kiểm tra các dịch vụ đã được bật, chạy lệnh:

sudo firewall-cmd --permanent --list-all

Bạn sẽ nhận được output như sau:

public
  target: default
  icmp-block-inversion: no
  interfaces:
  sources:
  services: cockpit dhcpv6-client http ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

Nếu không thấy dịch vụ http, bật nó bằng:

sudo firewall-cmd --permanent --add-service=http

Để cho phép lưu lượng https, chạy lệnh:

sudo firewall-cmd --permanent --add-service=https

Để áp dụng thay đổi, tải lại firewall:

sudo firewall-cmd --reload

Giờ máy chủ của bạn đã mở cho lưu lượng https, sẵn sàng 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 thiết. Để sử dụng plugin này, chạy lệnh:

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

Lệnh này chạy Certbot với plugin –nginx, sử dụng tham số -d để chỉ định các domain cần chứng chỉ. Khi chạy lệnh, bạn sẽ được yêu cầu nhập địa chỉ email và chấp nhận các điều khoản dịch vụ. Sau đó, bạn sẽ nhận được thông báo rằng quá trình thành công cùng với vị trí lưu trữ chứng chỉ:

Ouput

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-12-15.
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/conf.d/your_domain.conf
Successfully deployed certificate for www.your_domain to /etc/nginx/conf.d/your_domain.conf
Congratulations! You have successfully enabled HTTPS on https://your_domain and https://www.your_domain
…

Chứng chỉ của bạn đã được tải xuống, cài đặt và nạp, và cấu hình Nginx sẽ tự động chuyển hướng tất cả các yêu cầu web sang https://. Hãy thử tải lại trang web và kiểm tra biểu tượng bảo mật trên trình duyệt (thường là biểu tượng ổ khóa). Nếu bạn kiểm tra máy chủ bằng SSL Labs Server Test, nó sẽ được đánh giá A.

Giờ, hãy 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 có hiệu lực 90 ngày, nhưng khuyến nghị gia hạn sau 60 ngày để có khoảng thời gian dự phòng. Certbot có lệnh renew tự động kiểm tra các chứng chỉ hiện có và gia hạn nếu chứng chỉ sắp hết hạn (trong vòng 30 ngày).

Để thử nghiệm gia hạn tự động, chạy lệnh:

sudo certbot renew --dry-run

Output

Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/your_domain.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cert not due for renewal, but simulating renewal for dry run
Plugins selected: Authenticator nginx, Installer nginx
Renewing an existing certificate
Performing the following challenges:
http-01 challenge for monitoring.pp.ua
Waiting for verification...
Cleaning up challenges

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
new certificate deployed with reload of nginx server; fullchain is
/etc/letsencrypt/live/your_domain/fullchain.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
** DRY RUN: simulating 'certbot renew' close to cert expiry
**          (The test certificates below have not been saved.)

Congratulations, all renewals succeeded. The following certs have been renewed:
  /etc/letsencrypt/live/your_domain/fullchain.pem (success)
...

Nếu bạn tạo chứng chỉ chứa nhiều domain, chỉ tên miền cơ bản sẽ xuất hiện trong output, nhưng quá trình gia hạn sẽ hoạt động cho tất cả các domain trong chứng chỉ.

Để đảm bảo chứng chỉ của bạn luôn được cập nhật, bạn có thể tạo một cron job chạy lệnh gia hạn tự động định kỳ. Vì lệnh renew chỉ thực hiện gia hạn khi chứng chỉ còn dưới 30 ngày đến hạn, bạn có thể tạo cron job chạy hàng tuần hoặc hàng ngày.

Chỉnh sửa crontab cho người dùng root bằng:

sudo crontab -e

Trình soạn thảo sẽ mở tệp crontab mặc định (hiện đang trống). Nhập chế độ chèn bằng cách nhấn i và thêm dòng sau:

0 0,12 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew --quiet

Khi bạn hoàn tất, nhấn ESC để thoát khỏi chế độ chèn, sau đó nhập :wq và nhấn ENTER để lưu và thoát khỏi tệp. Để tìm hiểu thêm về trình soạn thảo văn bản Vi và phiên bản kế nhiệm Vim, hãy xem hướng dẫn của chúng tôi về Cài đặt và sử dụng trình soạn thảo Vim trên máy chủ đám mây.

Lệnh trên sẽ tạo một công việc cron mới, chạy vào trưa và nửa đêm mỗi ngày. Dòng lệnh python -c 'import random; import time; time.sleep(random.random() * 3600)'sẽ chọn một phút ngẫu nhiên trong giờ để thực hiện nhiệm vụ gia hạn.

Lệnh renew của Certbot sẽ kiểm tra tất cả các chứng chỉ SSL đã cài đặt trên hệ thống và cập nhật bất kỳ chứng chỉ nào sắp hết hạn trong vòng 30 ngày. Tùy chọn --quiet giúp Certbot không hiển thị thông tin hoặc yêu cầu nhập liệu từ người dùng.

Bạn có thể tìm hiểu thêm thông tin chi tiết về quá trình gia hạn trong tài liệu chính thức của Certbot.

Kết luận

Trong hướng dẫn này, bạn đã cài đặt Certbot của Let’s Encrypt, tải xuống chứng chỉ SSL cho tên miền của mình và thiết lập tự động gia hạn chứng chỉ. Nếu bạn có bất kỳ câu hỏi nào về việc sử dụng Certbot, hãy tham khảo tài liệu chính thức của Certbot.

Bạn cũng nên thường xuyên kiểm tra blog chính thức của Let’s Encrypt để cập nhật những thông tin quan trọng. Việc cấu hình SSL trên Nginx yêu cầu máy chủ đáng tin cậy. Thuê VPS chất lượng giúp bạn vận hành website mượt mà, hỗ trợ bảo mật tối ưu với Let’s Encrypt. Tìm hiểu các dịch vụ VPS uy tín để nâng cấp hệ thống của bạn ngay hôm nay!

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