Triển khai Docker với kiến trúc Traefik và CrowdSec (Phần 1)

Bài viết này sẽ hướng dẫn bạn triển khai Docker với kiến trúc Traefik và CrowdSec, bằng cách sử dụng Traefik làm Reverse Proxy và CrowdSec làm hệ thống phòng thủ chủ động.

Kiến trúc tổng thể

Mô hình nên đi theo luồng: Internet Traefik (80/443)web apps nội bộ trong Docker network; CrowdSec đọc log Traefik và có thể bật AppSec lắng nghe trên cổng 7422 trong mạng container để Traefik gửi yêu cầu kiểm tra trước khi vào app. Tài liệu CrowdSec cho Traefik nêu rõ nên dùng Traefik plugin hiện tại, không dùng bouncer cũ đã deprecated, và AppSec trong container phải bind 0.0.0.0:7422 để nhận kết nối từ container khác.

Điều kiện trước

Bạn nên có sẵn 1 domain hoặc wildcard subdomain trỏ về IP máy chủ, ví dụ app1.example.com, portainer.example.com, uptime.example.com, vì Traefik định tuyến chủ yếu theo Host() rule. Bạn cũng nên mở tối thiểu cổng 22, 80, 443 trên máy chủ; riêng CrowdSec, database app, và các dịch vụ backend không cần publish ra ngoài Internet mà chỉ nên chạy trong Docker network nội bộ.

I. Gia cố hệ thống Ubuntu (Host)

Trước khi đụng vào Docker, hãy thực hiện các bước bảo mật cơ bản cho hệ điều hành (host):

1. Cập nhật & Tạo User: Không dùng root.

– Đừng bao giờ sử dụng trực tiếp tài khoản root.

  • Cập nhật: sudo apt update && sudo apt upgrade -y
  • Khởi động lại: sudo reboot
  • Tạo User mới: adduser <username> sau đó cấp quyền sudo usermod -aG sudo <username>.

Sau reboot, kiểm tra phiên bản hệ điều hành:

lsb_release -a
uname -a
INI

Docker Engine hỗ trợ chính thức các bản Ubuntu 22.04 LTS, 24.04 LTS và các bản mới hơn thuộc danh sách hỗ trợ; kiến trúc phổ biến như amd64 và arm64 đều được hỗ trợ.

2. Cấu hình cơ bản

Cài thêm tiện ích về mạng và thay đổi IP nếu cần (Đối với bản cài đặt minimize)

sudo apt-get install iputils-ping nano vim -y
ping -V
Bash
  • Thiết lập IP mới (nếu cần)
ip a
networkctl status
Bash
  • Sửa file cấu hình Netplan: Kể từ Ubuntu 20.04, cấu hình mạng được thiết lập và quản lý bởi công cụ netplan. Để đổi thành IP tĩnh, chúng ta cần chỉnh sửa file 00-installer-config.yaml trong thư mục /etc/netplan. Bạn mở file cấu hình mạng với quyền sudo:
sudo nano /etc/netplan/00-installer-config.yaml
Bash

Trong file này, bạn chỉnh sửa cấu hình theo cú pháp YAML. Ví dụ:

  • Trên Ubuntu 22.04 / 24.04: Đối với version này, bạn sửa nội dung file thành như sau:
network:
  version: 2
  ethernets:
    enp0s3:
      dhcp4: no
      addresses: [192.168.1.100/24]
      routes:
        - to: 0.0.0.0/0
          via: 192.168.1.1
      nameservers:
        addresses: [8.8.8.8, 1.1.1.1]
VimL
  • Trên Ubuntu 20.04: Đối với version này, bạn sửa nội dung file thành như sau:
network:
  version: 2
  ethernets:
    enp0s3:
      dhcp4: no
      addresses: [192.168.1.100/24]
      gateway4: 192.168.1.1
      nameservers:
        addresses: [8.8.8.8, 1.1.1.1]
VimL
  • Áp dụng cấu hình
sudo netplan apply
Bash
  • Kiểm tra lại IP của máy
ip addr show
Bash

3. SSH Hardening – Đổi port mặc định (ví dụ 2222), tắt mật khẩu, dùng SSH Key

Xác thực bằng SSH Key: Tuyệt đối tắt đăng nhập bằng mật khẩu.

  • Copy key: ssh-copy-id user@ip_server
  • Cấu hình trong /etc/ssh/sshd_config:
PasswordAuthentication no
PermitRootLogin no
#Thay đổi cổng mặc định để tránh bot scan
Port 2222
Bash
  • Khởi động lại: sudo systemctl restart ssh

4. UFW Firewall

#Chặn toàn bộ truy cập vào
#Cho phép truy cập ra
sudo ufw default allow outgoing
sudo ufw default deny incoming
sudo ufw allow 2222/tcp # Port SSH mới
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
Bash

5. Cài đặt Fail2Ban – Chống Brute Force

Fail2Ban sẽ theo dõi log và chặn các IP có dấu hiệu dò mật khẩu.

  • Cài đặt: sudo apt install fail2ban -y
  • Cấu hình: Tạo file sudo nano /etc/fail2ban/jail.local với nội dung:
[sshd]
enabled = true
port = 2222
maxretry = 3
bantime = 1h
INI
  • Khởi động: sudo systemctl enable –now fail2ban

6. Tự động cập nhật bảo mật (Unattended Upgrades)

Đảm bảo các bản vá bảo mật được cài đặt ngay khi phát hành.

  • Cài đặt: sudo apt install unattended-upgrades -y
  • Kích hoạt: sudo dpkg-reconfigure -plow unattended-upgrades (Chọn Yes).

7. Cài đặt Auditd & Lynis – Giám sát và Kiểm tra

  • Auditd: Theo dõi các thay đổi hệ thống. sudo apt install auditd -y.
  • Lynis: Công cụ quét bảo mật hệ thống toàn diện.
    • Cài đặt: sudo apt install lynis -y
    • Quét hệ thống: sudo lynis audit system
    • Lynis sẽ liệt kê các điểm yếu và gợi ý cách khắc phục (Suggestion).

8. Cấu hình Shared Memory (Bảo vệ bộ nhớ)

Ngăn chặn một số loại tấn công thực thi mã từ bộ nhớ đệm.

Sửa file /etc/fstab, thêm dòng sau:

tmpfs /run/shm tmpfs defaults,noexec,nosuid 0 0
Bash

Lưu ý:

  • Nếu bạn cài Docker, hãy nhớ tường lửa UFW mặc định sẽ bị Docker bypass (vượt qua). Bạn cần cấu hình thêm để Docker tôn trọng các quy tắc của UFW hoặc sử dụng công cụ như ufw-docker.
  • Nếu bạn map port -p 9000:9000, cổng 9000 sẽ mở toang cho cả thế giới dù UFW có lệnh deny.
  • Giải pháp là chỉ map port cho Traefik/NPM (80, 443), với các service khác hãy bỏ phần map port trong file docker-compose.yml và để chúng giao tiếp nội bộ qua mạng Docker.

II. Thiết lập môi trường Docker

III. Triển khai các dịch vụ (Tách biệt bằng Docker Compose)

IV. Kiểm tra và Vận hành

V. Những lỗi hay gặp

Bằng cách sử dụng Traefik, bạn có một hệ thống tự động hóa cực cao. Kết hợp với CrowdSec, máy chủ của bạn không chỉ đứng vững trước các cuộc tấn công Brute-force mà còn miễn nhiễm với các bot quét lỗi tự động trên internet.

0 Responses

  • Triển khai Docker với kiến trúc Traefik và CrowdSec (Phần 2) ITEK Blog viết:
    Bình luận của bạn đang chờ kiểm duyệt. Đây là bản xem thử, bình luận sẽ chỉ hiển thị nếu được duyệt.

    […] Triển khai Docker với kiến trúc Traefik và CrowdSec (Phần 1) […]

X