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

Trong thế giới kết nối mạng ngày nay, việc bảo vệ thông tin trên máy chủ web ;là việc rất cần thiết. Let's Encrypt đã một cung cấp chứng chỉ SSL/TLS miễn phí, tạo điều kiện cho việc mã hóa dữ liệu và bảo mật kết nối HTTPS trên các máy chủ. Trong bài viết dưới đây, LANIT sẽ chia sẻ tới các bạn các bước hướng dẫn bảo mật HAProxy với Let’s Encrypt trên CentOS 7một cách chi tiết cùng với việc tự động gia hạn chứng chỉ để duy trì mức bảo mật tốt hơn nhé!

Chuẩn bị

Trước khi bảo mật HAProxy bằng Let’s Encrypt trên CentOS 7, bạn cần chuẩn bị các yêu cầu dưới đây:

  • Máy chủ centOS 7 và người dùng: Bạn cần một máy chủ chạy CentOS 7 và một người dùng không phải là root nhưng có quyền sudo. 
  • Tên miền đã đăng ký: Bạn cần sở hữu  tên miền mà bạn đã đăng ký để sử dụng trong chứng chỉ. 
  • Bản ghi a record: Nếu bạn chưa có thì bạn cần tạo một bản ghi A Record để liên kết tên miền với địa chỉ IP public với máy chủ của ban.. Điều này rất cần thiết, bởi Let’s Encrypt sẽ dùng bản ghi này để xác minh bạn sở hữu tên miền. Ví dụ: Nếu bạn đăng ký chứng chỉ thì tên miền bạn sử dụng phải trỏ đến địa chỉ IP của máy chủ của bạn
  • Cài đặt certbot: Sau khi đã hoàn tất chuẩn bị các yêu cầu trên, bạn cần cài đặt Certbot đây là một phần mềm của Let’s Encrypt  được dùng để lấy và quản lý chứng chỉ bảo mật.

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

Dưới đây là các bước chi tiết hướng dẫn cách  bảo mật HAProxy với Let’s Encrypt trên CentOS 7 bạn có thể tham khảo để áp dụng cài đặt nhé!

Bước 1: Cài đặt cerbot

Bước đầu tiên để sử dụng Let’s Encrypt để thu được chứng chỉ SSL là cài đặt phần mềm certbot trên máy chủ của bạn. Hiện tại, cách tốt nhất để cài đặt này là thông qua kho lưu trữ EPEL.

Bật quyền truy cập vào kho lưu trữ EPEL trên máy chủ của bạn bằng cách sử dụng lệnh sau:

sudo yum install epel-release

Sau khi kho lưu trữ được bật, bạn có thể lấy gói certbot bằng cách sử dụng lệnh sau:

sudo yum install certbot

Ứng dụng khách hàng certbot của Let’s Encrypt bây giờ đã được cài đặt và sẵn sàng sử dụng.

Bước 2: Cài đặt chứng chỉ

Để lấy chứng chỉ SSL từ Let’s Encrypt, chúng ta sẽ làm theo các bước sau:

#1. Xác minh cổng 80 mở

Để xác minh cổng 80 mở bạn cần sử dụng một công cụ gọi là Certbot để lấy chứng chỉ SSL. Tuy nhiên, để làm điều này, cổng 80 trên máy chủ cần phải trống và không được sử dụng bởi các dịch vụ khác. Nếu bạn đã sử dụng cổng 80 để chạy một trang web, bạn cần tạm thời tắt trang web đó.  Nếu bạn Nếu bạn đang sử dụng HAProxy, bạn có thể sử dụng lệnh sau để tắt:

sudo systemctl stop haproxy

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

netstat -na | grep ‘:80.*LISTEN’

#2. Chạy Cerbot

Chúng ta sẽ sử dụng công cụ Certbot với plugin Standalone để lấy chứng chỉ SSL. Plugin này tạm thời chạy một máy chủ web nhỏ trên cổng 80 trên máy chủ của bạn để xác minh và lấy chứng chỉ. Để tiến hành bạn sử dụng lệnh sau:

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

Sau đó, bạn sẽ được hỏi về địa chỉ email và bạn cần đồng ý với điều khoản dịch vụ của Let’s Encrypt.

Nếu như việc chạy Certbot thành công, hệ thống sẽ hiển thị một thông báo xác nhận chứa địa chỉ lưu trữ chứng chỉ và ngày hết hạn của chững chỉ..

Lưu ý: Nếu bạn đang sử dụng một dịch vụ DNS như CloudFlare để quản lý tên miền thì hãy tạm thời tắt dịch vụ này cho đến khi bạn lấy được chứng chỉ.

#3. File chứng chỉ SSL

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

  • cert.pem: Chứng chỉ của tên miền
  • chain.pem: Chuỗi chứng chỉ từ Let’s Encrypt
  • fullchain.pem: Kết hợp của cert.pem và chain.pem
  • privkey.pem: Khóa riêng tư của chứng chỉ

Để sử dụng chứng chỉ này trong cấu hình máy chủ web, bạn cần nhớ vị trí mà bạn đã lưu chúng.

#4. Kết hợp tập tin chứng chỉ fullchain.pem & privkey.pem

Nếu bạn đang sử dụng HAProxy, bạn cần kết hợp tập tin fullchain.pem và privkey.pem thành một tập tin duy nhất. 

Đầu tiên hãy tạo thư mục mà bạn muốn file kết hợp sẽ được đặt vào ví dụ như /etc/haproxy/certs, bạn có thể chạy lệnh sau:

sudo mkdir -p /etc/haproxy/certs

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

DOMAIN='example.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  tới các file kết hợp chứa private key, bạn sử dụng lệnh sau:

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

Bây giờ, hãy sẵn sàng sử dụng chứng chỉ SSL và khóa riêng tư với HAProxy.

Xem thêm >>> Hướng Dẫn Cách Bảo Mật Apache Bằng Let’s Encrypt trên CentOS 7

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

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

Để cài đặt HAProxy với yum bạn có thể sử dụng lệnh sau:

sudo yum install haproxy

Sau khi chạy lệnh xong, HAProxy đã được cài đặt, bước tiếp theo bạn cần cấu hình HAProxy.

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

Trong bước này chúng tôi sẽ hướng dẫn bạ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 gia hạn chứng chỉ Let’s Encrypt.

Đầu tiên, bạn cần mở file haproxy.cfg trong một text editor, hãy sử dụng lệnh sau:

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

#1. Global Section

Bạn hãy thêm dòng sau vào phần global để cấu hình size tối đa các DHE key được tạo ra:

 tune.ssl.default-dh-param 2048

#2. Frontend Sections

Trước hết, chúng ta sẽ cấu hình Frontend Sections  từ người dùng đến máy chủ bên trong thông qua HAProxy. Cấu hình mặc định của HAProxy bao gồm 1 frontend và một số backend. Vậy nên, bạn hãy xóa các cấu hình này nếu không cần thiết.

Thêm Frontend cho Kết Nối HTTP: Để thực hiện thao tác này, bạn hãy thêm một phần frontend mới để xử lý kết nối HTTP. Điều này cho phép HAProxy nhận các yêu cầu  từ HTTP và gửi chúng đến máy chủ bên trong. Bạn có thể chạy lệnh dưới đây:

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

Thêm Frontend cho Kết Nối HTTPS: Tiếp theo, bạn hãy thêm một phần frontend khác để xử lý kết nối HTTPS. Điều này cho phép HAProxy nhận các yêu cầu HTTPS và gửi chúng đến các phần backend khác nhau. Bạn có thể chạy lệnh dưới đây:

frontend www-https
   bind haproxy_www_public_IP:443 ssl crt /etc/haproxy/certs/example.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

Như vậy, frontend sẽ đảm nhiệm việc định tuyến các kết nối từ người dùng và gửi chúng đến các phần backend tương ứng để phục vụ ứng dụng web và trang web của bạn.

#3. Backend Sections

Sau khi bạn đã cấu hình phần frontend, tiếp theo bạn cần thêm phần backend để định tuyến kết nối đến các máy chủ bên trong.

Thêm backend cho www-backend: Bạn cần thêm phần backend để xử lý kết nối đến các máy chủ web. Thay thế các địa chỉ IP private của máy chủ web bằng tên miền hoặc địa chỉ IP tương ứng. Bạn có thể sử dụng lệnh sau:

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

Backend này sẽ chuyển hướng lưu lượng truy cập HTTP đến HTTPS (nếu không phải là kết nối SSL). Các kết nối sẽ được cân bằng tải trên các máy chủ đã liệt kê thông qua giao thức HTTP (port 80).

Thêm backend cho letsencrypt-backend: Bạn cần thêm backend để xử lý 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. Để  thêm backend, bạn có thể sử dụng lệnh sau:

backend letsencrypt-backend
server letsencrypt 127.0.0.1:54321

Backend này sẽ xử lý yêu cầu từ Let’s Encrypt và được định tuyến đến địa chỉ localhost trên cổng 54321. Sau khi bạn đã hoàn thành phần cấu hình backend và frontend, hãy khởi động lại HAProxy bằng lệnh sau đây:

sudo systemctl start haproxy

Sau khi hoàn thành tất cả các bước trên, Chứng chỉ TLS/SSL của Let’s Encrypt đã được cài đặt cho trang web thành công. Để kiểm tra chứng chỉ hoạt động hay chưa, bạn có thể truy cập vào trang web qua trình duyệt xem biểu tượng khóa an toàn bảo mật.

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

Chứng chỉ Let’s Encrypt chỉ có giá trị trong 90 ngày, nên bạn cần tự động gia hạn. Để chứng chỉ hoạt động một cách hiệu quả không bị hết hạn bạn cần tạo một cron job tự động xử lý gia hạn. Công việc cron này sẽ chạy certbot hàng ngày và gia hạn chứng chỉ nếu còn 30 ngày trước khi hết hạn. Cerbot cũng sẽ chạy một script đặc biệt sau khi gia hạn thành công. Và bạn sẽ sử dụng script này để cập nhật tệp .pem kết hợp và tải lại haproxy.

#1. Tạo Script Gia Hạn

Để mở một tệp mới trong /usr/local/bin với quyền root, bạn sử dụng lệnh sau:

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

Tiếp theo, bạn dán đoạn script sau, lệnh sẽ có dạng như sau:

#!/bin/sh

SITE=example.com

cd /etc/letsencrypt/live/$SITE
cat fullchain.pem privkey.pem > /etc/haproxy/certs/$SITE.pem
systemctl reload haproxy

Sau đó, bạn hãy lưu và đóng tệp. Làm cho script có thể chạy:

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

Để chạy script, bạn chạy lệnh sau đây:

sudo /usr/local/bin/renew.sh

#2. Cập nhật cấu hình certbot

Lệnh certbot renew đọc tệp cấu hình đã tạo lúc chạy certbot lần đầu. Vậy nên, bạn hãy mở tệp cấu hình này và cập nhật cổng cho certbot chạy máy chủ http độc lập để không xung đột với haproxy ( trên cổng 80 và 443):

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

Để thay đổi dòng http01_port, bạn có thể sử dụng lệnh sau:

http01_port = 54321

Sau đó, bạn hãy lưu và thoát khỏi màn hình. Tiếp tục kiểm tra quá trình gia hạn, bằng cách chỉ định –dry-run để kiểm tra bằng lệnh sau đây:

sudo certbot renew --dry-run

#3. Tạo một Cron Job

Tiếp theo, bạn hãy chỉnh sửa crontab cho người dùng root bằng lệnh sau đây:

sudo crontab -e

Để thêm đoạn sau vào cuối tệp bạn sử dụng lệnh:

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, bạn hãy lưu và thoát khỏi text editor. Cron Jobsẽ chạy lệnh certbot renew hàng ngày lúc 2:30 sáng và cập nhật haproxy nếu cần.

Bạn đang cần mua SSL thì LANIT chính là một lựa chọn àn toàn và chất lượng dành cho bạn. Để được tư vẫn chi tiết, vui lòng liên hệ theo địa chỉ sau đây:

  • Trụ sở tại: Toà Báo Công An Nhân Dân, 23 Nghiêm Xuân Yêm, Thanh Liệt, Thanh Trì, Hà Nội.
  • Hotline: 0945.96.95.94
  • Email[email protected]
  • Website: https://lanit.com.vn/

Lời kết

Trên đây là toàn bộ các bước hướng dẫn bảo mật HAProxy với Let’s Encrypt trên CentOS 7 mà bạn có thể tham khảo. Nếu có bất kỳ thắc mắc nào hãy dể lại bình luận hoặc liên hệ chúng tôi ngay để được giải đáp ngay lập tức nhé!

avata Hải

Triệu Huyền Trang

Triệu Huyền Trang chuyên gia 3 năm kinh nghiệm trong ngành Công Nghệ, Phần Mềm. Chuyên chia sẻ các kiến thức phần mềm mã nguồn, ứng dụng và thông tin về công nghệ hữu ích.

Chat với chúng tôi qua Zalo!
Chat với chúng tôi qua Zalo!