Bảo mật web services với Traefik reverse proxy

Traefik là một reverse proxy load balancer hiện đại được thiết kế đặc biệt cho microservices và các môi trường container. Đây là một công cụ mã nguồn mở rất phổ biến trong cộng đồng DevOps và được sử dụng rộng rãi với Docker và Kubernetes.

Một số tính năng và điểm nổi bật của Traefik:

  • Tự động phát hiện dịch vụ: Traefik có khả năng tự động phát hiện các dịch vụ mới khi chúng được triển khai, nhờ tích hợp sâu với Docker, Kubernetes và các hệ thống khác.
  • Hỗ trợ HTTP/2 và gRPC: Traefik hỗ trợ cả HTTP/1.1, HTTP/2, và gRPC, giúp tối ưu hóa hiệu suất truyền tải dữ liệu giữa các dịch vụ.
  • Chứng chỉ SSL/TLS tự động: Traefik tích hợp với Let’s Encrypt để tự động cấp và gia hạn chứng chỉ SSL/TLS, đảm bảo an toàn cho các kết nối HTTP.
  • Tích hợp với các hệ thống giám sát: Traefik có thể tích hợp với Prometheus, Datadog, và các hệ thống giám sát khác để theo dõi hiệu suất và sức khỏe của các dịch vụ.
  • Quản lý API và giao diện người dùng: Traefik cung cấp một giao diện người dùng đơn giản và trực quan để quản lý và giám sát các dịch vụ và đường dẫn mạng.
  • Khả năng mở rộng: Với kiến trúc plug-in linh hoạt, Traefik có thể mở rộng để hỗ trợ nhiều tính năng và tích hợp khác nhau theo nhu cầu của người dùng.

1. Yêu cầu chuẩn bị

Để thực hiện anh em chuẩn bị cho mình một con máy ảo hoặc VPS hệ điều hành Ubuntu 18.04 LTS, Ubuntu 20.04 LTS hoặc Ubuntu 22.04 LTS.

Anh em nào mới bắt đầu thì có thể đăng kí một tài khoản trên DigitalOcean. Hiện tại có chương trình khuyến mãi tặng $200 dùng trong 60 ngày cho khách mới lần đầu đăng kí(lần trước là tặng $100). Mình có video hướng dẫn chi tiết quá trình đăng kí tại đây.

2. Cài đặt Traefik

Trước khi cài đặt Traefik. Anh em cài docker và docker compose theo scripts.

Tạo thư mục chứa cấu hình cài đặt Traefik.

Tạo file cấu hình docker-compose.yml

Trong đó:

  • Ports: khai báo các cổng triển khai HTTP (80), HTTPS (443), và Traefik Dashboard (8080).
  • Volumes: khai báo volumes lưu trữ traefik.ymlacme.json
  • Networks: khai báo network.

Tạo file cấu hình traefik.yml

  • ACME Configuration: Dùng cấu hình tự động HTTPS. Traefik sẽ giao tiếp với Let’s Encrypt để tạo và cấp mới chứng chỉ bảo mật SSL.
  • email: email cấu hình Let’s Encrypt để gửi thông báo.
  • storage: nơi lưu trữ chi file acme.json khi tạo và cấp mới chứng chỉ bảo mật SSL.

Tạo file cấu hình acme.json

Tạo network traefik

Cuối cùng, trong thư mục triển khai Traefik có các file sau

Khởi tạo và chạy traefik

docker-compose up -d

Kiểm tra container đã khởi tạo thành công hay chưa

3. Bảo mật web services HTTPS với traefik reverse proxy

Triển khai một ví dụ Nginx service, dùng Traefik và bật nhãn truy cập bằng HTTPS.

Tạo thư mục nginx

Tạo file cấu hình docker compose triển khai

Ở đây, anh em chú ý trong phần labels mình có khai báo Host là: nginx.kienletv.com. Điều này có nghĩa ứng dụng Nginx service sẽ chạy bằng domain này. Và domain này anh em có thể mua trên Mắt Bão, Nhân Hoà, Inet… và trỏ IP về server VPS đang cài traefik này.

Khởi tạo và chạy Nginx service

Kiểm tra ứng dụng đã khởi tạo

Anh em thấy ứng dụng Nginx service đã được khởi tạo với cổng 80. Cổng này hoàn toàn không được expose ra bên ngoài mà chỉ dùng local trong network docker. Và traefik lúc này đóng vai trò là một  reverse proxy.

Truy cập domain và kiểm tra

nginx.kienletv.com

Mình đã vào được trang mặc định của Nginx service

Kiểm tra SSL của domain

Anh em thấy lúc này Traefik kết hợp Let’s Encrypt để tạo và cấp một chứng chỉ bảo mật SSL cho domain nginx.kienletv.com

Một ví dụ triển khai khác với WordPress service dùng Traefik và bật nhãn truy cập bằng HTTPS

Tạo thư mục wordpress

Tạo file cấu hình docker compose triển khai

Khởi tạo và chạy WordPress service

Kiểm tra ứng dụng đã khởi tạo

wordpress-service

Truy cập domain và kiểm tra

Lúc này, mình đã vào được domain và giao diện wordpress quen thuộc và bắt đầu thiết lập website mới.

Kiểm tra SSL của domain và thấy một chứng chỉ SSL được cấp bởi Let’s Encrypt tương tự như với domain nginx.kienletv.com

4. Lời kết

Qua bài viết này mình đã chia sẻ với anh em một giải pháp bảo mật web services với Traefik reverse proxy. Ngoài ra cũng còn nhiều giải pháp khác như dùng nginx reverse proxy hay NPM…Chúc anh em thành công!

5. Nguồn tham khảo

Một số nguồn tham khảo mình để bên dưới anh em đọc thêm

  • https://doc.traefik.io/traefik/getting-started/quick-start/
  • https://hub.docker.com/_/traefik
  • https://github.com/korridor/reverse-proxy-docker-traefik
Subscribe
Notify of
guest
1 Bình luận
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
minh
minh
3 months ago

Cảm ơn tác giả

1
0
Would love your thoughts, please comment.x
()
x