Triển khai Docker với kiến trúc Traefik và CrowdSec (Phần 1)
Khi vừa cài đặt một máy chủ Ubuntu mới, việc đầu tiên không phải là cài ứng dụng ngay, mà là gia cố hệ thống. Bài viết này sẽ hướng dẫn bạn xây dựng một pháo đài cho Docker 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ể
- Hệ điều hành: Ubuntu Server (đã hardened SSH & Firewall).
- Giao thức: Toàn bộ traffic đi qua cổng 80/443.
- Reverse Proxy: Traefik (Tự động cấp SSL, cân bằng tải).
- Security: CrowdSec (Chặn IP xấu từ lớp Layer 7).
- Network: Sử dụng proxy_network nội bộ để cô lập Database và App.

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
- Tạo User mới: adduser <username> sau đó cấp quyền sudo usermod -aG sudo <username>.
– 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.
- Kích hoạt: sudo dpkg-reconfigure -plow unattended-upgrades (Chọn Yes).
- Cài đặt: sudo apt install unattended-upgrades -y
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 -VBash- Thiết lập IP mới (nếu cần)
ip a
networkctl statusBash
- 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.yamlBashTrong 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 applyBash- Kiểm tra lại IP của máy
ip addr showBash3. 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 2222Bash- 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 enableBash5. Cài đặt CrowdSec
#Thêm kho lưu trữ CrowdSec
curl -s https://install.crowdsec.net | sudo sh
#(Nếu lệnh trên báo lỗi do chuyển hướng, hãy dùng: curl -sL https://install.crowdsec.net | sudo sh).
sudo apt update
sudo apt install crowdsec -y
# Kiểm tra trạng thái dịch vụ
sudo systemctl status crowdsec
# Cài đặt Bouncer cho CrowdSec. Cho Ubuntu 22.04 trở lên (sử dụng nftables)
sudo apt install crowdsec-firewall-bouncer-nftablesBashMột số lệnh quản lý cơ bản (cscli) trong CrowdSec:
- Xem danh sách IP đang bị chặn: sudo cscli decisions list.
- Xóa chặn cho một IP cụ thể: sudo cscli decisions delete –ip <địa_chỉ_IP>.
- Kiểm tra các dịch vụ đang được bảo vệ: sudo cscli collections list.
Lưu ý: Bạn nên thêm IP cá nhân của mình vào Whitelist tại /etc/crowdsec/parsers/s02-enrich/whitelists.yaml để tránh trường hợp vô tình bị hệ thống tự chặn chính mình.
Sau khi cài xong, bạn hãy kiểm tra xem Bouncer đã kết nối thành công với CrowdSec Agent chưa:
sudo cscli bouncers listBashNếu thấy trạng thái có dấu tích xanh hoặc hiện tên bouncer kèm địa chỉ IP 127.0.0.1 là đã OK.
Lưu ý: UFW và CrowdSec Bouncer sẽ hoạt động song song. UFW quản lý các cổng (như mở 80, 443, 22), còn CrowdSec Bouncer sẽ ưu tiên chặn các IP “vết đen” trước khi chúng kịp chạm đến các quy tắc của UFW.
6. 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).
7. 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 0BashLư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ụ (Docker-Compose)
IV. Kiểm tra và Vận hành
(Còn tiếp)






