NỘI DUNG

Hosting tốc độ cao Vietnix - tốc độ tải trang trung bình dưới 1 giây
VPS siêu tốc Vietnix - trải nghiệm mượt mà, ổn định
08/05/2023
Lượt xem

Hướng dẫn bảo mật HAProxy với Let’s Encrypt trên CentOS 7

08/05/2023
17 phút đọc
Lượt xem

Đánh giá

5/5 - (60 bình chọn)

Let’s Encrypt là một Tổ chức cấp Chứng chỉ (CA) giúp người dùng có thể cài đặt miễn phí chứng chỉ TLS/SSL và từ đó cho phép mã hóa HTTPS trên web server. Với sự hỗ trợ của phần mềm Certbot, quá trình này được đơn giản hóa với khả năng tự động hóa hầu hết các bước cần thiết. Trong bài hướng dẫn bảo mật HAProxy với Let’s Encrypt trên CentOS 7 này, Vietnix sẽ chỉ cho người dùng cách sử dụng Let’s Encrypt để lấy chứng chỉ SSL miễn phí và sử dụng chứng chỉ với HAProxy trên CentOS 7.

Điều kiện cài đặt bảo mật HAProxy với Let’s Encrypt trên CentOS 7

Trước khi làm theo hướng dẫn này, bạn cần chuẩn bị một số điều kiện như sau:

Một server CentOS 7 với user non-root và có khả năng sử dụng lệnh sudo.

Bạn cần sở hữu một tên miền được sử dụng chứng chỉ SSL. Nếu chưa có tên miền, bạn hãy liên hệ với Vietnix để được tư vấn và đăng ký.

Tạo một A Record trên DNS của tên miền và trỏ đến địa chỉ IP Public của server. Điều này là bắt buộc vì cách Let’s Encrypt thực hiện quá trình xác minh rằng người dùng đang sở hữu chính domain đó.

Ví dụ, muốn lấy chứng chỉ bảo mật cho vietnixtest.com, bạn cần tạo A record trên DNS của domain đó và trỏ đến địa chỉ IP Public của server. Cả hai domain vietnixtest.com www.vietnixtest.com đều cần có bản ghi DNS để đảm bảo quá trình xác minh diễn ra thành công.

Cuối cùng, hãy tiến hành cài đặt Certbot. Đây là một phần mềm máy khách của Let’s Encrypt.

Các bước bảo mật HAProxy với Let’s Encrypt trên CentOS 7

Bước 1: Cài đặt Certbot – Phần mềm máy khách của Let’s Encrypt

Đầu tiên, cài đặt phần mềm certbot trên server. Cách thường dùng là thông repository của EPEL.

Truy cập vào repository của EPEL trên server bằng lệnh sau:

sudo yum install epel-release

Sau khi truy cập thành công, hãy gõ lệnh sau để cài đặt cerbot:

sudo yum install certbot

Bây giờ certbot đã được cài đặt trên server và sẵn sàng để sử dụng.

Bước 2: Lấy chứng chỉ  SSL từ Let’s Encrypt

Let’s Encrypt cung cấp nhiều cách để lấy chứng chỉ SSL thông qua các plugin khác nhau. Khác với Apache, hầu hết các plugin này chỉ giúp bạn lấy chứng chỉ và bạn cần cấu hình thủ công trên web server để sử dụng. Các plugin này được gọi là “authenticator”, được sử dụng để xác minh server có nên được cấp chứng chỉ hay không.

Vietnix sẽ hướng dẫn cách sử dụng plugin Standalone để lấy chứng chỉ SSL.

Xác minh Port 80 đang mở

Plugin Standalone cung cấp một cách đơn giản chứng chỉ SSL. Khi sử dụng plugin này để tạo chứng chỉ SSL cho server, plugin sẽ tạm thời chạy một web server nhỏ trên port 80 trên server. Điều này cho phép CA Let’s Encrypt có thể kết nối và xác minh danh tính của server trước khi cấp chứng chỉ SSL.

Do đó, để sử dụng Standalone, hãy đảm bảo rằng port 80 không được sử dụng bởi web server trên server của bạn. Nếu đang sử dụng port 80 (tức là http),hãy tạm thời dừng web server trước khi sử dụng plugin này.

Ví dụ, nếu bạn đang sử dụng HAProxy, hãy dừng dịch vụ bằng cách chạy lệnh sau:

sudo systemctl stop haproxy

Nếu không chắc chắn port 80 có đang được sử dụng hay không, hãy chạy lệnh sau:

netstat -na | grep ':80.*LISTEN'

Nếu không có output hiển thị khi chạy lệnh này, bạn có thể sử dụng plugin Standalone.

Khởi chạy Certbot

Bây giờ hãy chạy plugin Standalone với lệnh sau:

sudo certbot certonly --standalone --preferred-challenges http --http-01-port 80 -d vietnixtest.com -d www.vietnixtest.com

Bạn sẽ được yêu cầu nhập địa chỉ email và đồng ý với các điều khoản dịch vụ của Let’s Encrypt. Sau đó giao thức http sẽ được chạy. Nếu thành công, certbot sẽ hiển thị ra một output như sau:

 - Congratulations! Your certificate and chain have been saved at    /etc/letsencrypt/live/vietnixtest.com/fullchain.pem. Your cert    will expire on 2017-09-06. To obtain a new or tweaked version of    this certificate in the future, simply run certbot again. To    non-interactively renew *all* of your certificates, run "certbot    renew"  - Your account credentials have been saved in your Certbot    configuration directory at /etc/letsencrypt. You should make a    secure backup of this folder now. This configuration directory will    also contain certificates and private keys obtained by Certbot so    making regular backups of this folder is ideal.  - 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

Hãy ghi chú lại đường dẫn và ngày hết hạn chứng chỉ SSL ở output bên trên.

Lưu ý: Nếu domain đang được định tuyến thông qua một dịch vụ DNS như CloudFlare, hãy tạm thời tắt dịch vụ này cho đến khi nhận được chứng chỉ.

Các file chứng chỉ SSL

Sau khi đã nhận được chứng chỉ, bạn sẽ có các file được mã hóa PEM như sau:

  • cert.pem: Chứng chỉ của domain.
  • chain.pem: Chứng chỉ dạng chuỗi của Let’s Encrypt.
  • fullchain.pem: Bao gồm cả cert.pemchain.pem.
  • privkey.pem: Private key của chứng chỉ SSL.

Người dùng cần nhớ vị trí của các file chứng chỉ vừa được tạo ra để có thể sử dụng trong việc cấu hình web server. Các file được đặt trong một thư mục cong với đường dẫn /etc/letsencrypt/archive. Tuy nhiên, certbot đã tạo ra symbolic link đến các file chứng chỉ mới nhất trong thư mục /etc/letsencrypt/live/vietnixtest.

Hãy kiểm tra các file đã được tạo ra bằng cách chạy file sau (hãy thay bằng tên domain của bạn):

sudo ls /etc/letsencrypt/live/vietnixtest

Output sẽ trả về 4 file chứng chỉ đã được đề cập như trên.

Kết hợp fullchain.pem với privkey.pem

Khi cấu hình HAProxy để thực hiện SSL termination để mã hóa lưu lượng truyền tải giữa HAProxy và người dùng cuối, bạn phải kết hợp file fulchain.pemprivkey.pem thành một file duy nhất.

Đầu tiên hãy tạo thư mục mà file kết hợp sẽ được đặt vào, ví dụ /etc/haproxy/certs:

sudo mkdir -p /etc/haproxy/certs

Tiếp theo, tạo một file kết hợp với lệnh cat (thay vietnixtest.com bằng tên domain của bạn):

DOMAIN='vietnixtest.com' sudo -E bash -c 'cat /etc/letsencrypt/live/$DOMAIN/fullchain.pem /etc/letsencrypt/live/$DOMAIN/privkey.pem > /etc/haproxy/certs/$DOMAIN.pem'

Bảo mật quyền truy cập đến file kết hợp chưa private key bằng lệnh sau:

sudo chmod -R go-rwx /etc/haproxy/certs

Bây giờ hãy sử dụng chứng chỉ SSL và private key với HAProxy.

Để thực hiện bảo mật HAProxy với Let’sEncrypt trên CentOS 7, bạn cần có một máy chủ cài đặt hệ điều hành CentOS 7. Nếu chưa có máy chủ hoặc muốn nâng cấp máy chủ, bạn có thể tham khảo các gói VPS tại Vietnix.

Vietnix hiện đang cung cấp nhiều gói dịch vụ máy chủ ảo (VPS) có cấu hình đa dạng, chi phí hợp lý như VPS Giá Rẻ, VPS Phổ Thông, VPS Cao Cấp và VPS NVMe. Một số ưu điểm của VPS Vietnix phải kể đến như:

Đăng ký VPS tốc độ cao ngay. Mua chu kỳ càng dài, giá càng rẻ. Liên hệ Vietnix để được tư vấn chi tiết.

Bước 3: Cài đặt HAProxy

Lưu ý: Nếu đã cài đặt HAProxy, bạn có thể bỏ qua bước này.

Cài đặt HAProxy với yum bằng lệnh sau:

sudo yum install haproxy

HAProxy đã được cài đặt nhưng trước tiên cần phải được cấu hình.

Bước 4: Cấu hình HAProxy

Đây là bước hướng dẫn cách cấu hình cơ bản HAProxy với SSL setup. Bước này bao gồm cả cách cấu hình HAProxy để cho phép người dùng tự động đổi mới chứng chỉ Let’s Encrypt.

Mở file haproxy.cfg trong một text editor mà bạn yêu thích:

sudo vi /etc/haproxy/haproxy.cfg

Tiếp theo là chỉnh sửa các phần trong file này, hãy giữ cho file luôn được mở.

Global Section

Thêm dòng sau vào phần global để cấu hình kích thước tối đa các DHE key được tạo ra:

tune.ssl.default-dh-param 2048

Frontend Sections

Thực hiện cấu hình phần frontend.

Lưu ý: Cấu hình mặc định của HAProxy bao gồm một frontend và một số backend. Hãy xóa các cấu hình này nếu không cần thiết.

Đầu tiên hãy thêm một frontend để xử lý các kết nối HTTP đến và gửi các HTTP này đến backend mặc định. Ở cuối file, hãy thêm một fronted được gọi là www-http. Hãy chắc chắn thay thế haproxy_public_IP bằng địa chỉ IP Pulic của HAProxy server:

frontend www-http    bind haproxy_www_public_IP:80    reqadd X-Forwarded-Proto:\ http    default_backend www-backend

Thêm một frontend để xử lý các kết nối HTTPS đến. Ở cuối file cấu hình, thêm một frontend với tên là www-https. Đảm bảo thay thế haproxy_www_public_IP bằng địa chỉ IP public của HAProxy server. Ngoài ra cần phải thay thế vietnixtest.com bằng tên domain của bạn:

frontend www-https    bind haproxy_www_public_IP:443 ssl crt /etc/haproxy/certs/vietnixtest.com.pem    reqadd X-Forwarded-Proto:\ https    acl letsencrypt-acl path_beg /.well-known/acme-challenge/    use_backend letsencrypt-backend if letsencrypt-acl    default_backend www-backend

Frontend này sử dụng một ACL được gọi là letsencrypt-acl để gửi yêu cầu xác nhận của Let’s Encrypt (cho /.well-known/acme-challenge) đến backend letsencrypt-backend, điều này cho phép người dùng cập nhật chứng chỉ mà không cần ngừng dịch vụ HAProxy. Tất cả các yêu cầu khác sẽ được chuyển tiếp đến backend www-backend, backend này sẽ phục vụ cho web app và website của bạn.

Backend Sections

Sau khi hoàn tất cấu hình phần frontend, hãy thêm backend www-backend bằng cách thêm dòng lệnh sau. Hãy đảm bảo thay thế các dòng được highlight bên dưới bằng địa chỉ IP Private của web server (điều chỉnh số dòng mã tương ứng với số lượng server mà bạn có):

backend www-backend    redirect scheme https if !{ ssl_fc }    server www-1 www_1_private_IP:80 check    server www-2 www_2_private_IP:80 check

Bất kỳ lưu lượng truy cập nào được gửi đến backend này sẽ được cân bằng trên các server đã được liệt kê bên trên, thông qua giao thức HTTP (port 80).

Cuối cùng, hãy thêm backend letsencrypt-backend bằng cách sử dụng dòng sau đây:

haproxy.cfg — 5 of 5 backend letsencrypt-backend server letsencrypt 127.0.0.1:54321

Backend này chỉ xử lý các giao thức ACME của Let’s Encrypt, được sử dụng để yêu cầu và gia hạn chứng chỉ SSL của Let’s Encrypt. Tất cả các lưu lượng truy cập đến backend này sẽ được gửi đến địa chỉ localhost trên port 54321. Hãy sử dụng port này thay vì port 80433 khi gia hạn chứng chỉ SSL của Let’s Encrypt.

Bây giờ hãy khởi động HAProxy bằng lệnh sau:

sudo systemctl start haproxy

Chứng chỉ TLS/SSL của Let’s Encrypt hiện đã được cài đặt cho website. Sau khi hoàn tất cài đặt, người dùng cần kiểm tra xem chứng chỉ đã hoạt động tốt hay chưa bằng cách truy cập vào domain trong trình duyệt web.

Bước 5: Thiết lập tự động gia hạn chứng chỉ SSL

Chứng chỉ Let’s Encrypt có thời hạn trong 90 ngày, vì vậy việc thiết lập tự động gia hạn chứng chỉ SSL là cần thiết và rất quan trọng.

Một cách thực tế để đảm bảo chứng chỉ luôn được tự động hóa và không bị lỗi thời, hãy tạo một cronjob tự động xử lý quá trình gia hạn cho bạn.

Cronjob sẽ chạy certbot hàng ngày và tự động gia hạn nếu chứng chỉ còn 30 ngày trước khi hết hạn. certbot cũng sẽ chạy một tập lệnh đặc biệt renew-hook sau mỗi lần gia hạn thành công. Người dùng sẽ cần sử dụng lệnh này để cập nhật file kết hợp .pem và tải lại haproxy.

Bây giờ hãy tạo và chạy thử tập lệnh này.

Tạo đoạn mã gia hạn chứng chỉ SSL

Mở một file mới trong /usr/local/bin với quyền root:

sudo vi /usr/local/bin/renew.sh

Đây sẽ là một file văn bản trống. Dán đoạn mã ngắn sau đây vào file này và thay thế vietnixtest.com bằng tên domain của bạn:

#!/bin/sh  SITE=vietnixtest.com  # move to the correct let's encrypt directory cd /etc/letsencrypt/live/$SITE  # cat files to make combined .pem for haproxy cat fullchain.pem privkey.pem > /etc/haproxy/certs/$SITE.pem  # reload haproxy systemctl reload haproxy

Lưu và đóng file . Đoạn mã sẽ được chuyển đến thư mục chưa chứng chỉ SSL của Let’s Encrypt. Sau đó hãy chạy lệnh cat để ghép hai file .pem thành một file duy nhất, cuối cùng là tải lại haproxy.

Tiếp theo người dùng cần làm cho file chứa đoạn mã này có thể thực thi bằng cách sử dụng lệnh chmod:

sudo chmod u+x /usr/local/bin/renew.sh

Sau đó hãy chạy lệnh sau:

sudo /usr/local/bin/renew.sh

Nếu như không có lỗi xảy ra, bước tiếp theo là tiến hành cập nhật và cấu hình Certbot để chạy đoạn mã vừa tạo bên trên.

Cập nhật cấu hình Certbot

Khi dùng lệnh certbot renew để cập nhật chứng chỉ, cerbot sẽ sử dụng một file cấu hình để đọc cài đặt ban đầu. Hãy mở file cấu hình này và chỉnh sửa port mà certbot sử dụng để chạy HTTP server. Điều này là cần thiết để tránh sự trùng lặp port với Haproxy (port 80 và 433). Mở file cấu hình trong text editor bạn yêu thích:

sudo vi /etc/letsencrypt/renewal/vietnixtest.com.conf

Sau đó bạn cần tìm dòng http01_port và sửa giá trị thành 54321:

vietnixtest.com.conf http01_port = 54321

Lưu và đóng file. Tiếp theo để kiểm tra quá trình đổi mới chứng chỉ bằng cách sử dụng --dry-run:

sudo certbot renew --dry-run

Certbot sẽ đợi tín hiệu trên port 54321 để thực hiện quá trình gia hạn chứng chỉ, và haproxy sẽ chuyển tiếp yêu cầu từ port 80 đến 54321.

Tạo một Cron Job

Tiếp theo là chỉnh sửa file crontab để certbot tự động chạy lệnh certbot renew mỗi ngày. Để chỉnh sửa crontab cho người dùng root, chạy lệnh sau:

sudo crontab -e

Thêm nội dung sau vào cuối file:

crontab entry 30 2 * * * /usr/bin/certbot renew --renew-hook "/usr/local/bin/renew.sh" >> /var/log/le-renewal.log

Sau khi đã thêm nội dung được chỉ định vào file crontab, lưu và thoát khỏi text editor. Điều này sẽ tạo ra một cron job mới giúp thực thi lệnh certbot renew hàng ngày lúc 2:30 sáng. Output hiển thị của lệnh này sẽ được chuyển đến một file nhật ký tại /var/log/le-renewal.log. Nếu chứng chỉ được gia hạn thành công, lệnh –-renew-hook sẽ được thực thi để tạo file kết hợp .PEM và tải lại haproxy.

Vietnix là nhà cung cấp VPS tốc độ cao uy tín tại Việt Nam. Nếu bạn cần thuê VPS để triển khai các dự án, Vietnix hoàn toàn là nơi mà bạn có thể yên tâm lựa chọn. Trong suốt 10 năm hoạt động, Vietnix đã đồng hành cùng hơn 50.000 khách hàng trong và ngoài nước, trong đó có những đơn vị nổi tiếng như iVIVU.com, Vietnamwork, KINGFOOD, UBGroup, GTV,…

Nhờ không ngừng nâng cao chất lượng dịch vụ, mang đến sự hài lòng cho tất cả khách hàng, Vietnix đã vinh dự nhận được giải thưởng Thương hiệu Việt Nam xuất sắc năm 2022.

Đội ngũ Vietnix làm việc xuyên suốt 24/7, sẵn sàng hỗ trợ bạn mọi lúc mọi nơi. Liên hệ ngay theo những thông tin sau đây:

  • Địa chỉ: 265 Hồng Lạc, Phường 10, Quận Tân Bình, Thành Phố Hồ Chí Minh
  • Hotline: 1800 1093 – 07 088 44444
  • Email: sales@vietnix.com.vn

Lời kết

Trên đây là hướng dẫn cách bảo mật HAProxy với Let’s Encrypt trên CentOS 7. Cảm ơn bạn đã đọc bài hướng dẫn của Vietnix. Nếu có góp ý hay bất kỳ thắc mắc nào, bạn có thể để lại bình luận bên dưới để Vietnix luôn hỗ trợ bạn.

THEO DÕI VÀ CẬP NHẬT CHỦ ĐỀ BẠN QUAN TÂM

Đăng ký ngay để nhận những thông tin mới nhất từ blog của chúng tôi. Đừng bỏ lỡ cơ hội truy cập kiến thức và tin tức hàng ngày

Chọn chủ đề :

Hưng Nguyễn

Co-Founder
tại

Kết nối với mình qua

Kết nối với mình qua

Theo dõi
Thông báo của
guest
0 Comments
Phản hồi nội tuyến
Xem tất cả bình luận

Tăng tốc độ website - Nâng tầm giá trị thương hiệu

Tăng tốc tải trang

95 điểm

Nâng cao trải nghiệm người dùng

Tăng 8% tỷ lệ chuyển đổi

Thúc đẩy SEO, Google Ads hiệu quả

Tăng tốc ngay

SẢN PHẨM NỔI BẬT

7 NGÀY DÙNG THỬ HOSTING

NẮM BẮT CƠ HỘI, THÀNH CÔNG DẪN LỐI

Cùng trải nghiệm dịch vụ hosting tốc độ cao được hơn 100,000 khách hàng sử dụng

ĐĂNG KÝ NHẬN TÀI LIỆU THÀNH CÔNG
Cảm ơn bạn đã đăng ký nhận tài liệu mới nhất từ Vietnix!
ĐÓNG

ĐĂNG KÝ DÙNG THỬ HOSTING

7 NGÀY MIỄN PHÍ

ĐĂNG KÝ DÙNG THỬ HOSTING

7 NGÀY MIỄN PHÍ

XÁC NHẬN ĐĂNG KÝ DÙNG THỬ THÀNH CÔNG
Cảm ơn bạn đã đăng ký thông tin thành công. Đội ngũ CSKH sẽ liên hệ trực tiếp để kích hoạt dịch vụ cho bạn nhanh nhất!
ĐÓNG