Hướng Dẫn Bảo Mật Apache với Let’s Encrypt Trên Ubuntu 22.04: Tăng Cường An Toàn Website

Hướng Dẫn Bảo Mật Apache với Let's Encrypt Trên Ubuntu 22.04

DataOnline sẽ hướng dẫn cách Bảo Mật Apache. Bạn sẽ sử dụng Certbot để lấy chứng chỉ SSL miễn phí cho Apache trên Ubuntu và đảm bảo rằng chứng chỉ này được cấu hình để tự động gia hạn.

Let’s Encrypt là một Certificate Authority (CA) giúp bạn lấy và cài đặt các chứng chỉ TLS/SSL miễn phí, từ đó kích hoạt HTTPS mã hóa trên máy chủ web. Let’s Encrypt đơn giản hóa quy trình bằng cách cung cấp một phần mềm khách hàng, Certbot, cố gắng tự động hóa hầu hết (nếu không muốn nói là 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 hóa hoàn toàn trên cả Apache và Nginx.

Để bảo mật Apache trên Ubuntu 22.04, bạn cần một server ổn định. Khám phá các gói VPS giá rẻ tại DataOnline, cung cấp hiệu suất cao, bảo mật tối ưu, giúp bạn triển khai website an toàn với chi phí tiết kiệm. Tìm hiểu ngay để chọn giải pháp phù hợp!

Hướng dẫn này sử dụng một file Virtual Host riêng thay vì file cấu hình mặc định của Apache để thiết lập website sẽ được bảo mật bởi Let’s Encrypt. Chúng tôi khuyến khích tạo các file Virtual Host mới cho mỗi tên miền host trên server, vì điều này giúp tránh các lỗi phổ biến và giữ lại các file cấu hình mặc định như một phương án dự phòng.

Yêu cầu trước khi cài đặt bảo mật Apache với Let’s Encrypt

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

  • Một server Ubuntu đã được thiết lập với tài khoản non-root có quyền sudo và firewall đã được bật. (Bạn có thể tham khảo hướng dẫn cài đặt ban đầu cho Ubuntu.)
  • Một tên miền đã được đăng ký đầy đủ. Trong hướng dẫn này, tên miền ví dụ sẽ là your_domain. Bạn có thể mua tên miền trên Namecheap, lấy miễn phí trên Freenom, hoặc sử dụng nhà đăng ký tên miền khác theo ý bạn.
  • Cài đặt hai bản ghi DNS cho server của bạn.
    • Một bản ghi A với your_domain trỏ về địa chỉ IP công cộng của server.
    • Một bản ghi A với www.your_domain trỏ về địa chỉ IP công cộng của server.
  • Apache đã được cài đặt theo hướng dẫn Cách Cài Đặt Apache Trên Ubuntu. Hãy chắc chắn rằng bạn có một file Virtual Host cho tên miền của bạn. Trong hướng dẫn này, ví dụ sử dụng file:
    /etc/apache2/sites-available/your_domain.conf.

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

Để lấy chứng chỉ SSL với Let’s Encrypt, bạn cần cài đặt phần mềm Certbot trên server. Bạn sẽ sử dụng các kho gói mặc định của Ubuntu để cài đặt.

Đầu tiên, cập nhật danh sách gói cục bộ:

sudo apt update

Bạn cần cài đặt hai gói: certbot python3-certbot-apache. Gói thứ hai là một plugin tích hợp Certbot với Apache, giúp tự động lấy chứng chỉ và cấu hình HTTPS cho máy chủ web chỉ với một lệnh:

sudo apt install certbot python3-certbot-apache

Khi được nhắc, nhấn YENTER để xác nhận cài đặt.
Giờ Certbot đã được cài đặt trên server của bạn. Trong bước tiếp theo, bạn sẽ kiểm tra cấu hình Apache để đảm bảo Virtual Host của bạn được thiết lập đúng. Điều này giúp Certbot có thể phát hiện tên miền và tự động cấu hình lại máy chủ web để sử dụng chứng chỉ SSL mới tạo.

Bước 2 – Kiểm tra cấu hình Apache Virtual Host

Để tự động lấy và cấu hình SSL cho máy chủ web, Certbot cần tìm được Virtual Host phù hợp trong các file cấu hình của Apache. Tên miền của server sẽ được lấy từ các chỉ thị ServerNameServerAlias được định nghĩa trong khối cấu hình VirtualHost.

Nếu bạn đã làm theo bước thiết lập Virtual Host trong hướng dẫn cài đặt Apache, bạn sẽ có một khối VirtualHost được cấu hình cho tên miền của mình tại /etc/apache2/sites-available/your_domain.conf với các chỉ thị ServerNameServerAlias đã được thiết lập phù hợp.

Để xác nhận việc cấu hình này, hãy mở file Virtual Host của tên miền bằng nano hoặc trình soạn thảo ưa thích của bạn:

sudo nano /etc/apache2/sites-available/your_domain.conf

với các chỉ thị ServerNameServerAlias được thiết lập đúng.

Để xác nhận, hãy mở file Virtual Host của bạn bằng nano (hoặc trình soạn thảo ưa thích):

/etc/apache2/sites-available/your_domain.conf
...
ServerName your_domain
ServerAlias www.your_domain
...

Tìm các dòng có ServerNameServerAlias. Chúng nên được liệt kê như sau:

/etc/apache2/sites-available/your_domain.conf
...
ServerName your_domain
ServerAlias www.your_domain
...

Nếu bạn đã thiết lập ServerNameServerAlias như ví dụ này, bạn có thể thoát khỏi trình soạn thảo và chuyển sang bước tiếp theo. Nếu cấu hình virtual host hiện tại không khớp với ví dụ, hãy cập nhật nó cho phù hợp. Nếu bạn sử dụng nano, hãy thoát bằng cách nhấn CTRL+X, sau đó nhấn YENTER để xác nhận các thay đổi (nếu có).

Tiếp theo, chạy lệnh sau để kiểm tra các thay đổi:

sudo apache2ctl configtest

Bạn sẽ nhận được thông báo Syntax OK. Nếu có lỗi, hãy mở lại file virtual host và kiểm tra các lỗi đánh máy hoặc ký tự thiếu. Khi cú pháp file cấu hình đã đúng, tải lại Apache để các thay đổi có hiệu lực:

sudo systemctl reload apache2

Với các thay đổi này, Certbot sẽ có thể tìm thấy khối VirtualHost chính xác và cập nhật nó.

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

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

Nếu firewall UFW đã được kích hoạt theo hướng dẫn thiết lập ban đầu, bạn cần điều chỉnh cài đặt để cho phép lưu lượng HTTPS. Khi Apache được cài đặt, nó sẽ đăng ký một số profile ứng dụng với UFW. Bạn có thể sử dụng profile Apache Full để cho phép cả lưu lượng HTTP và HTTPS trên server của mình.

Để kiểm tra lưu lượng hiện tại được phép qua firewall, hãy chạy:

sudo ufw status

Nếu bạn đã làm theo một trong các hướng dẫn cài đặt Apache, output có thể như sau (chỉ lưu lượng HTTP trên cổng 80 được cho phép):

Output
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
Apache                     ALLOW       Anywhere             
OpenSSH (v6)               ALLOW       Anywhere (v6)             
Apache (v6)                ALLOW       Anywhere (v6)

Để cho phép lưu lượng HTTPS, hãy cho phép profile “Apache Full”:

sudo ufw allow 'Apache Full'

Sau đó, xóa profile “Apache” thừa:

sudo ufw delete allow 'Apache'

Kiểm tra lại trạng thái firewall:

sudo ufw status
Output
Status: active

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

Giờ bạn đã sẵn sàng chạy Certbot và 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 Apache sẽ tự động cấu hình lại Apache 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 --apache

Lệnh này sẽ đưa ra một loạt các câu hỏi để cấu hình chứng chỉ SSL của bạn. Đầu tiên, nó sẽ yêu cầu bạn nhập một địa chỉ email hợp lệ. Email này sẽ được sử dụng để nhận thông báo gia hạn và thông báo an ninh:

Output
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices)
 (Enter 'c' to cancel): you@your_domain

Sau khi nhập email hợp lệ, nhấn ENTER để tiếp tục. Tiếp theo, bạn sẽ được hỏi xác nhận rằng bạn đồng ý với các điều khoản dịch vụ của Let’s Encrypt. Nhấn Y ENTER để xác nhận:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y

Tiếp theo, bạn sẽ được hỏi liệu bạn có muốn chia sẻ email của mình với Electronic Frontier Foundation để nhận tin tức và thông tin khác không. Nếu không muốn, hãy nhập N. (Nếu có, nhập Y rồi nhấn ENTER.)

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: N

Sau đó, Certbot sẽ yêu cầu bạn chọn tên miền nào bạn muốn kích hoạt HTTPS. Các tên miền được liệt kê tự động lấy từ file Virtual Host của Apache, vì vậy hãy đảm bảo rằng chỉ thị ServerNameServerAlias đã được cấu hình chính xác. Nếu bạn muốn kích hoạt HTTPS cho tất cả các tên miền liệt kê (khuyến nghị), chỉ cần để trống và nhấn ENTER. Nếu không, hãy chọn các tên miền cần kích hoạt bằng cách nhập số tương ứng, cách nhau bằng dấu phẩy và/hoặc khoảng trắng, rồi nhấn ENTER:

Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: your_domain
2: www.your_domain
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel):

Sau khi bước này hoàn tất, cấu hình Certbot đã xong và bạn sẽ nhận được các thông báo cuối cùng về chứng chỉ mới cùng vị trí lưu các file được tạo:

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-07-10.
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/apache2/sites-available/your_domain-le-ssl.conf
Successfully deployed certificate for www.your_domain.com to /etc/apache2/sites-available/your_domain-le-ssl.conf
Congratulations! You have successfully enabled HTTPS on https:/your_domain and https://www.your_domain.com

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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 giờ đã được cài đặt và nạp vào cấu hình của Apache. Hãy thử tải lại website sử dụng giao thức https:// và kiểm tra biểu tượng bảo mật trong trình duyệt (thông thường là hình ổ khóa trên thanh địa chỉ). Bạn có thể dùng công cụ SSL Labs Server Test để kiểm tra điểm số của chứng chỉ và lấy thông tin chi tiết từ góc nhìn của một dịch vụ bên ngoài.

Trong bước cuối cùng, bạn sẽ kiểm tra tính năng gia hạn tự động của Certbot, đảm bảo rằng chứng chỉ sẽ được tự động gia hạn trước khi hết hạn.

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

Chứng chỉ của Let’s Encrypt chỉ có hiệu lực 90 ngày. Điều này nhằm khuyến khích người dùng tự động gia hạn chứng chỉ, cũng như đảm bảo rằng các chứng chỉ bị lạm dụng hoặc các Key bị đánh cắp sẽ hết hạn nhanh chóng.

Gói certbot bạn đã cài đặt tự động xử lý việc gia hạn thông qua một script gia hạn được đặt tại /etc/cron.d, được quản lý bởi dịch vụ systemctl có tên certbot.timer. Script 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 còn trong vòng 30 ngày trước khi hết hạn.

Để kiểm tra trạng thái của dịch vụ này và đảm bảo nó đang hoạt động, hãy chạy:

sudo systemctl status certbot.timer
Kết quả của bạn sẽ tương tự như sau:
Output
● certbot.timer - Run certbot twice daily
     Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset:>
     Active: active (waiting) since Mon 2022-04-11 20:52:46 UTC; 4min 3s ago
    Trigger: Tue 2022-04-12 00:56:55 UTC; 4h 0min left
   Triggers: ● certbot.service

Apr 11 20:52:46 jammy-encrypt systemd[1]: Started Run certbot twice daily.

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

sudo certbot renew --dry-run
Output
Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/your_domain.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Account registered.
Simulating renewal of an existing certificate for your_domain and www.your_domain.com

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations, all simulated renewals succeeded:
  /etc/letsencrypt/live/your_domain/fullchain.pem (success)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Nếu không có lỗi nào xuất hiện, mọi thứ đã sẵn sàng. Khi cần thiết, Certbot sẽ tự động gia hạn chứng chỉ và tải lại Apache để áp dụng các thay đổi. Nếu quy trình gia hạn tự động gặp sự cố, 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

Với việc hoàn tất cài đặt và cấu hình Certbot cùng chứng chỉ SSL cho tên miền của bạn, máy chủ của bạn giờ đây đã sẵn sàng phục vụ các kết nối an toàn qua HTTPS. Việc kích hoạt dịch vụ gia hạn tự động của Certbot đảm bảo rằng chứng chỉ SSL của bạn luôn được cập nhật mà không cần sự can thiệp thủ công.

Khi cấu hình Apache, việc chọn máy chủ đáng tin cậy là yếu tố quan trọng. Với dịch vụ thuê VPS từ DataOnline, bạn được hỗ trợ kỹ thuật 24/7, đảm bảo website vận hành mượt mà. Khám phá ngay để thuê VPS chất lượng, nâng cao bảo mật cho dự án của bạn!

Nếu bạn muốn tìm hiểu thêm hoặc gặp phải bất kỳ vấn đề nào trong quá trình sử dụng Certbot, tài liệu chính thức của Let’s Encrypt là một nguồn tài nguyên hữu ích và dễ tiếp cận để giải quyết các thắc mắc. Việc bảo mật trang web của bạn bằng chứng chỉ SSL không chỉ nâng cao sự tin cậy của người dùng mà còn giúp cải thiện xếp hạng SEO trên các công cụ tìm kiếm như Google, mang lại lợi ích lâu dài cho website của 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 *