📑 Mục Lục
- 👉 Tại Sao Cần Cloudflare Zero Trust?
- 👉 Kiến Trúc Tổng Quan & So Sánh Với VPN
- 👉 Bước 1: Tạo Cloudflare Tunnel Trên Server
- 👉 Bước 2: Gán Private IP Cho VPS
- 👉 Bước 3: Cấu Hình CIDR Routes
- 👉 Bước 4: Thiết Lập Device Enrollment
- 👉 Bước 5: Cài WARP Client Trên PC
- 👉 Bước 6: Cấu Hình Split Tunnel
- 👉 Bước 7: Bật Proxy ICMP/TCP/UDP
- 👉 Bước 8: Kiểm Tra & Xác Nhận Kết Nối
- 👉 Bảo Mật Nâng Cao
- 👉 Xử Lý Sự Cố Thường Gặp
🔐 Tại Sao Cần Cloudflare Zero Trust?
Hầu hết các developer và sysadmin đều truy cập server bằng cách mở port SSH (22) ra internet. Đây là cách đơn giản nhất — nhưng cũng là nguy hiểm nhất.
Mô hình bảo mật truyền thống hoạt động theo nguyên tắc “tin tưởng mạng nội bộ” — nếu bạn ở trong VPN, bạn được tin tưởng. Nhưng mô hình này có nhiều lỗ hổng:
- VPN credentials bị lộ → kẻ tấn công có full access vào mạng nội bộ
- Lateral movement → từ một máy bị compromise, di chuyển sang các máy khác
- VPN server là single point of failure → nếu VPN down, mọi người mất access
- Performance kém → tất cả traffic phải đi qua VPN server trung tâm
Zero Trust đảo ngược hoàn toàn nguyên tắc này: “Không tin tưởng ai, xác thực mọi thứ”. Mỗi kết nối được xác thực riêng biệt, không phụ thuộc vào vị trí mạng.
🏗️ Kiến Trúc Tổng Quan
Trước: Kiến Trúc Truyền Thống (VPN / Port Mở)
Internet ──→ [Port 22 MỞ] ──→ Server
⚠️ Bị quét port ⚠️ Brute force
⚠️ IP bị lộ ⚠️ DDoS trực tiếp
Hoặc:
Internet ──→ [VPN Server] ──→ Mạng nội bộ ──→ Server
⚠️ Single point ⚠️ Lateral movement
⚠️ Performance kém ⚠️ Credential leak
Sau: Kiến Trúc Zero Trust (Cloudflare Tunnel)
PC (WARP) ──→ Cloudflare Edge ──→ Encrypted Tunnel ──→ Server 🔒 Mã hóa 🛡️ WAF/DDoS 🔒 Outbound only 🔒 Không port mở ✅ Xác thực ✅ Global CDN ✅ IP ẩn ✅ Private IP
So Sánh Chi Tiết: VPN vs Cloudflare Zero Trust
| Tiêu chí | VPN Truyền Thống | Cloudflare Zero Trust |
|---|---|---|
| Port mở | ❌ Cần mở port VPN (1194, 443) | ✅ Không cần mở port nào |
| IP server | ❌ Bị lộ (public IP) | ✅ Ẩn hoàn toàn |
| Quản lý server | ❌ Cần maintain VPN server | ✅ Không cần (Cloudflare quản lý) |
| Performance | ❌ Bottleneck tại VPN server | ✅ Traffic qua CDN toàn cầu |
| Bảo mật | ❌ Trust entire network | ✅ Verify every request |
| Chi phí | 💰 Server VPN + license | ✅ Miễn phí (≤50 users) |
| Setup | ⏱️ Phức tạp (cert, routing) | ✅ ~30 phút |
| DDoS Protection | ❌ Không | ✅ Tích hợp sẵn |
📋 Yêu Cầu Trước Khi Bắt Đầu
- ✅ Tài khoản Cloudflare (đăng ký miễn phí tại
dash.cloudflare.com) - ✅ Kích hoạt Cloudflare One (Zero Trust) — free plan với 50 seats
- ✅ Ít nhất một domain đã trỏ DNS về Cloudflare
- ✅ Server Linux (Ubuntu 20.04+, Debian 11+) cần truy cập từ xa
- ✅ PC Windows 10+ hoặc macOS 11+ để truy cập
1 Tạo Cloudflare Tunnel Trên Server
Cloudflare Tunnel là “cầu nối” mã hóa giữa server của bạn và mạng lưới Cloudflare. Nó chạy dưới dạng một daemon (cloudflared) trên server, tạo kết nối outbound — không cần mở port inbound.
Tạo Tunnel Trên Dashboard
- Đăng nhập Cloudflare Zero Trust Dashboard tại
https://one.dash.cloudflare.com - Vào Networks → Connectors (hoặc Tunnels)
- Click + Create a tunnel
- Chọn connector type: Cloudflared
- Đặt tên tunnel mô tả (ví dụ:
prod-server,dev-server) - Dashboard sẽ cung cấp token và lệnh cài đặt
Cài Đặt Bằng Docker (Khuyến Nghị)
Nếu server của bạn đã chạy Docker, đây là cách đơn giản nhất:
services:
cloudflared:
image: cloudflare/cloudflared:latest
container_name: cloudflared-tunnel
restart: unless-stopped
command: tunnel run --token YOUR_TUNNEL_TOKEN
network_mode: host
network_mode: host? Vì cloudflared cần truy cập các service chạy trên localhost của server (như SSH port 22, web server port 8080, v.v.). Nếu dùng Docker bridge network, cloudflared sẽ không thể kết nối đến các service này.
Chạy:
docker compose up -d docker logs cloudflared-tunnel # Output: INF Connection established connIndex=0
Cài Đặt Native (Systemd) — Cho Server Không Có Docker
# Tải và cài đặt cloudflared curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb \ -o cloudflared.deb sudo dpkg -i cloudflared.deb # Cài đặt service với token từ dashboard sudo cloudflared service install YOUR_TUNNEL_TOKEN # Kiểm tra service sudo systemctl status cloudflared # Output: Active: active (running)
Windows (Cho PC/Homelab)
# Tải cloudflared từ GitHub releases # Hoặc dùng lệnh cài đặt service từ dashboard: cloudflared.exe service install YOUR_TUNNEL_TOKEN
2 Gán Private IP Cho VPS
Đây là bước quan trọng mà nhiều hướng dẫn bỏ qua. VPS trên cloud (DigitalOcean, Vultr, Linode, v.v.) thường chỉ có public IP — không có private network interface.
Để routing qua Cloudflare Tunnel hoạt động, ta cần tạo virtual private IP trên mỗi server:
# Gán private IP cho server (chọn dải 10.100.0.x) sudo ip addr add 10.100.0.1/32 dev lo # Kiểm tra ip addr show lo | grep 10.100 # Output: inet 10.100.0.1/32 scope global lo
ip addr add chỉ tồn tại trong phiên hiện tại. Khi server reboot, IP sẽ mất. Bạn phải cấu hình persistent.
Cấu Hình Persistent (Tồn Tại Sau Reboot)
Trên Ubuntu/Debian sử dụng Netplan:
network:
version: 2
ethernets:
lo:
addresses:
- 10.100.0.1/32
sudo netplan apply # Verify ip addr show lo | grep 10.100
Quy Hoạch IP Đề Xuất
Lập kế hoạch IP từ đầu giúp bạn mở rộng dễ dàng sau này:
| Server | Private IP | Mục đích | Tunnel Name |
|---|---|---|---|
| Production | 10.100.0.1 |
Web server chính | prod-server |
| Development | 10.100.0.2 |
Server phát triển/staging | dev-server |
| Database | 10.100.0.3 |
PostgreSQL / MySQL | db-server |
| Monitoring | 10.100.0.4 |
Grafana, Prometheus | monitoring |
| CI/CD Runner | 10.100.0.5 |
GitHub Actions runner | ci-runner |
10.100.0.x? Đây là dải IP private (RFC 1918) không xung đột với Docker bridge (172.17.x.x) hay mạng LAN nhà bạn (192.168.x.x). Dùng /32 vì mỗi server chỉ cần đúng 1 IP.
3 Cấu Hình CIDR Routes Trên Dashboard
Bước này cho Cloudflare biết: “Khi ai đó truy cập IP 10.100.0.1, hãy gửi traffic đến tunnel prod-server”.
- Vào Networks → Tunnels trên Cloudflare dashboard
- Click vào tunnel cần cấu hình (ví dụ:
prod-server) - Chọn tab CIDR routes
- Click + Add CIDR route
- Nhập CIDR:
10.100.0.1/32 - Save
Lặp lại cho mỗi server:
| Tunnel | CIDR Route |
|---|---|
| prod-server | 10.100.0.1/32 |
| dev-server | 10.100.0.2/32 |
4 Thiết Lập Device Enrollment
Mặc định, Cloudflare Zero Trust chặn tất cả device enrollment. Bạn cần tạo policy cho phép device của mình đăng ký vào hệ thống.
Tạo Device Enrollment Policy
- Vào Team & Resources → Devices
- Click tab Management
- Tìm section Device enrollment permissions
- Click Manage hoặc Add a rule
- Click + Create new policy
- Cấu hình:
- Policy name:
Allow my devices - Action: Allow
- Selector: Emails
- Value:
[email protected]
- Policy name:
- Save
@tonytechlab.com).
5 Cài Đặt WARP Client Trên PC
WARP client biến PC của bạn thành một phần của mạng Zero Trust. Nó tạo một encrypted tunnel từ PC đến Cloudflare, cho phép bạn truy cập private IP của các server.
Phân Biệt: cloudflared vs WARP Client
| Component | Chức năng | Ví dụ |
|---|---|---|
| cloudflared | Tạo tunnel từ server đến Cloudflare | Server expose service qua tunnel |
| WARP Client | Kết nối PC đến Cloudflare để truy cập private network | PC truy cập server qua private IP |
Cả hai có thể chạy song song trên cùng một máy mà không xung đột.
Cài Đặt Trên Windows
- Tải Cloudflare WARP từ
https://1.1.1.1/ - Cài đặt và mở ứng dụng
- Click vào icon WARP ở system tray → Settings (⚙️)
- Vào tab Account
- Click Login to Cloudflare Zero Trust
- Nhập Team name (tên tổ chức bạn đã tạo, ví dụ:
tonytechlab) - Xác thực qua email OTP hoặc SSO
- WARP sẽ hiển thị: “Zero Trust — Connected”
- Connection: WARP+
- Account Type: Zero Trust
- Team Name: tonytechlab
6 Cấu Hình Split Tunnel
Split Tunnel quyết định traffic nào đi qua Cloudflare và traffic nào đi trực tiếp ra internet. Đây là cấu hình then chốt để private IP routing hoạt động.
Cấu Hình Trên Dashboard
- Vào Team & Resources → Devices → Device profiles
- Click vào profile Default → Configure
- Cuộn xuống tìm section Split Tunnels
- Chọn mode: Include IPs and domains
- Click Manage
- Thêm entry:
- Selector: IP Address
- Value:
10.100.0.0/24 - Description: Internal Tunnel Subnet
- Save destination
10.100.0.0/24, bạn bao phủ toàn bộ 254 IP (10.100.0.1 → 10.100.0.254). Khi thêm server mới trong tương lai, bạn không cần chỉnh lại Split Tunnel.
7 Bật Proxy Cho ICMP/TCP/UDP
Mặc định, Cloudflare Gateway chỉ proxy TCP. Để ping và các diagnostic tools hoạt động, cần bật thêm ICMP và UDP.
- Vào Traffic policies → Traffic settings
- Chọn tab Proxy and inspection
- Bật “Allow Secure Web Gateway to proxy traffic”
- Đảm bảo check:
- ☑️ TCP (required — luôn bật)
- ☑️ UDP (recommended — cho DNS, VoIP)
- ☑️ ICMP (recommended — cho ping, traceroute)
8 Kiểm Tra & Xác Nhận Kết Nối
Sau khi hoàn thành tất cả các bước trên, toggle WARP off rồi on trên PC để reload cấu hình mới.
Test Ping
C:\> ping 10.100.0.1
Pinging 10.100.0.1 with 32 bytes of data:
Reply from 10.100.0.1: bytes=32 time=33ms TTL=253
Reply from 10.100.0.1: bytes=32 time=34ms TTL=253
Reply from 10.100.0.1: bytes=32 time=33ms TTL=253
Ping statistics for 10.100.0.1:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss)
Average = 33ms
Test SSH
# SSH đến Production server ssh [email protected] # SSH đến Development server ssh [email protected] # Test HTTP service (nếu có) curl http://10.100.0.1:8088
🛡️ Bảo Mật Nâng Cao
Sau khi xác nhận mọi thứ hoạt động ổn định qua tunnel, hãy tăng cường bảo mật:
Đóng Port SSH Trên Firewall
Vì SSH đã hoạt động qua private IP (tunnel), bạn không cần mở port 22 ra internet nữa:
# Chỉ cho phép SSH từ tunnel subnet sudo ufw default deny incoming sudo ufw allow from 10.100.0.0/24 to any port 22 sudo ufw allow 80/tcp # Nếu cần web traffic sudo ufw allow 443/tcp # Nếu cần HTTPS sudo ufw enable
ssh [email protected]) hoạt động ổn định ít nhất 2-3 lần trước khi đóng port 22. Nếu tunnel gặp sự cố và bạn đã đóng port, bạn sẽ bị lock out khỏi server. Giữ một console session mở từ cloud provider (VNC/KVM) như phương án backup.
Sơ Đồ Mạng Hoàn Chỉnh
┌──── Public Internet ────┐
│ tonytechlab.com │
│ (chỉ web traffic) │
└──────────────────────────┘
│
Cloudflare CDN/WAF
(DDoS Protection)
│
┌─────────── Cloudflare Tunnel Network (Encrypted) ──────────────┐
│ │
│ 🖥️ PC (WARP) 🖧 Prod Server 🖧 Dev Server │
│ 10.100.0.x ←→ 10.100.0.1 ←→ 10.100.0.2 │
│ │
│ SSH ✅ HTTP ✅ Ping ✅ — tất cả qua encrypted tunnel │
│ Port 22 đóng │ Port 22 đóng │ Không port nào mở ra internet│
└─────────────────────────────────────────────────────────────────┘
🔧 Xử Lý Sự Cố Thường Gặp
| Vấn đề | Nguyên nhân | Giải pháp |
|---|---|---|
| “Enrollment request is invalid” | Chưa tạo Device Enrollment policy | Tạo policy ở Bước 4 — đây là lỗi phổ biến nhất |
| Ping: “Request timed out” | ICMP proxy chưa bật | Bật ICMP ở Bước 7 |
| Ping: “TTL expired in transit” | Split Tunnel chưa cấu hình hoặc Proxy chưa bật | Kiểm tra Bước 6 và Bước 7 |
| Ping: “could not find host” | Split Tunnel chưa include dải IP | Thêm 10.100.0.0/24 vào Split Tunnel Include list |
| SSH: “Connection refused” | SSH không listen trên loopback interface | Kiểm tra /etc/ssh/sshd_config — đảm bảo ListenAddress bao gồm 0.0.0.0 hoặc 10.100.0.x |
| Tunnel status: DOWN | cloudflared service không chạy | systemctl restart cloudflared hoặc docker restart cloudflared-tunnel |
| WARP: không kết nối | Firewall trên PC chặn WARP | Cho phép Cloudflare WARP trong Windows Firewall |
| Private IP mất sau reboot | Chưa cấu hình netplan persistent | Tạo file /etc/netplan/99-tunnel-private.yaml theo Bước 2 |
Kết Luận
Cloudflare Zero Trust biến mọi server của bạn thành “invisible servers” — không thể tìm thấy trên internet, nhưng bạn vẫn truy cập được từ bất kỳ đâu trên thế giới.
- ✅ Zero open ports — server không lắng nghe bất kỳ kết nối inbound nào
- ✅ End-to-end encryption — traffic mã hóa từ PC đến server
- ✅ Centralized management — quản lý access qua dashboard trực quan
- ✅ Full protocol support — SSH, HTTP, ping, TCP/UDP đều hoạt động
- ✅ Free for small teams — miễn phí cho team dưới 50 người
- ✅ Setup 30 phút — không cần kiến thức networking chuyên sâu
Hãy bắt đầu bảo vệ infrastructure của bạn ngay hôm nay! 🚀
Zero Trust
Network Security
DevOps
VPN Alternative
Cloudflare Tunnel
WARP
Infrastructure