❤️ AZDIGI chính thức cập nhật hệ thống blog mới hoàn chỉnh. Tuy nhiên có thể một số bài viết bị sai lệch hình ảnh, hãy ấn nút Báo cáo bài viết ở cuối bài để AZDIGI cập nhật trong thời gian nhanh nhất. Chân thành cám ơn.
Bạn đã cài xong Ollama, chạy được model, kết nối Open WebUI ngon lành. Giờ muốn truy cập từ bên ngoài, từ laptop, từ điện thoại, hay chia sẻ cho vài người bạn dùng thử. Nhưng khoan, bạn đã nghĩ tới chuyện bảo mật chưa?
Mặc định, Ollama lắng nghe trên port 11434 và không có bất kỳ lớp xác thực nào. Ai biết IP của bạn, người đó dùng được. Bài này mình sẽ đi qua từng bước để khóa chặt server AI của bạn lại, từ firewall, reverse proxy với SSL, cho tới authentication và network isolation.
Tại sao phải bảo mật Ollama?
Ollama API mở toang nghĩa là bất kỳ ai cũng có thể:
- Dùng miễn phí GPU/CPU của bạn để chạy model. Mỗi request tốn tài nguyên thật, và nếu ai đó spam thì server bạn chết.
- Kéo hoặc xóa model thông qua API. Ollama cho phép pull, delete model qua REST API mà không cần xác thực.
- Đọc nội dung trò chuyện nếu traffic không mã hóa. Trên mạng công cộng, dữ liệu đi dạng plaintext hoàn toàn.
- Prompt injection để khai thác model làm những việc không mong muốn, hoặc trích xuất system prompt.
Nghe đáng sợ đúng không? Nhưng fix thì không khó. Mình sẽ đi qua 5 bước, mỗi bước thêm một lớp bảo vệ.

Bước 1: Firewall với UFW
Việc đầu tiên luôn là firewall. UFW (Uncomplicated Firewall) có sẵn trên Ubuntu, dùng vài lệnh là xong.
Ý tưởng rất đơn giản: chỉ mở những port cần thiết, chặn hết phần còn lại. Đặc biệt là chặn port 11434 của Ollama, vì mình sẽ dùng reverse proxy để truy cập thay vì kết nối trực tiếp.
# Cho phép SSH — quan trọng, đừng khóa chính mình ra ngoài
sudo ufw allow 22/tcp
# Cho phép HTTP và HTTPS cho reverse proxy
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# Chặn truy cập trực tiếp vào Ollama từ bên ngoài
sudo ufw deny 11434
# Bật firewall
sudo ufw enable
# Kiểm tra lại
sudo ufw status
Lưu ý: Nếu bạn đang SSH vào server, hãy chắc chắn allow port 22 TRƯỚC khi enable UFW. Không thì bạn sẽ tự khóa mình ra ngoài và phải vào console của VPS provider để fix.
Sau bước này, Ollama vẫn chạy bình thường trên localhost, nhưng không ai từ bên ngoài truy cập trực tiếp port 11434 được nữa.
Bước 2: Reverse proxy với Caddy
Mình chọn Caddy thay vì Nginx vì một lý do chính: auto HTTPS. Caddy tự động lấy certificate từ Let’s Encrypt, tự renew, không cần config thêm gì. Với Nginx bạn phải cài certbot, setup cron renew, rồi config SSL cipher. Caddy làm hết.
Cài Caddy:
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy
Tạo file /etc/caddy/Caddyfile với nội dung:
ai.yourdomain.com {
reverse_proxy localhost:11434
}
Đúng, chỉ 3 dòng. Caddy sẽ tự động:
- Lấy SSL certificate từ Let’s Encrypt
- Redirect HTTP sang HTTPS
- Proxy tất cả request tới Ollama trên localhost
Reload Caddy để áp dụng:
sudo systemctl reload caddy
Nhớ trỏ DNS của ai.yourdomain.com về IP server trước khi reload. Caddy cần verify domain để lấy certificate.
Giờ bạn truy cập https://ai.yourdomain.com là tới được Ollama, có HTTPS đàng hoàng. Nhưng vẫn chưa có xác thực, ai có link vẫn vào được.
Bước 3: Thêm Authentication
Có hai cách tiếp cận tùy vào setup của bạn.
Cách 1: Basic Auth trên Caddy
Nếu bạn expose Ollama API trực tiếp (không qua Open WebUI), thêm basic auth vào Caddy là cách nhanh nhất.
Tạo password hash:
caddy hash-password --plaintext 'mat-khau-cua-ban'
Cập nhật Caddyfile:
ai.yourdomain.com {
basicauth {
admin $2a$14$xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
}
reverse_proxy localhost:11434
}
Thay admin bằng username bạn muốn, và dán hash vừa tạo vào sau username.
Cách 2: Open WebUI built-in auth
Nếu bạn dùng Open WebUI (mà đa số sẽ dùng), thì tin vui là nó đã có sẵn hệ thống đăng nhập. Người dùng đầu tiên đăng ký sẽ trở thành admin, và bạn có thể bật/tắt cho phép đăng ký mới trong Settings.
Trong trường hợp này, Caddy chỉ cần proxy tới Open WebUI (mặc định port 3000 hoặc 8080) thay vì Ollama:
ai.yourdomain.com {
reverse_proxy localhost:3000
}
Gợi ý: Dù dùng Open WebUI, bạn vẫn nên chặn port 11434 bằng firewall. Đừng để Ollama API lộ ra ngoài khi đã có Open WebUI làm lớp trung gian.

Bước 4: Docker network isolation
Nếu bạn chạy Ollama và Open WebUI bằng Docker (theo bài trước trong series), thì có thêm một lớp bảo mật nữa: network isolation.
Mặc định, Docker container dùng bridge network và có thể truy cập lẫn nhau cũng như ra ngoài internet. Mình sẽ tạo một internal network riêng, để Ollama chỉ nói chuyện được với Open WebUI thôi.
Cập nhật docker-compose.yml:
services:
ollama:
image: ollama/ollama
networks:
- ai-internal
# KHÔNG publish port 11434 ra ngoài
# ports:
# - "11434:11434"
volumes:
- ollama-data:/root/.ollama
deploy:
resources:
reservations:
devices:
- capabilities: [gpu]
open-webui:
image: ghcr.io/open-webui/open-webui:main
ports:
- "3000:8080"
networks:
- ai-internal
environment:
- OLLAMA_BASE_URL=http://ollama:11434
volumes:
- open-webui-data:/app/backend/data
networks:
ai-internal:
internal: true
volumes:
ollama-data:
open-webui-data:
Điểm quan trọng ở đây:
internal: truenghĩa là network này không có đường ra internet. Container trong network chỉ nói chuyện được với nhau.- Ollama không publish port nào ra host. Chỉ Open WebUI kết nối được tới Ollama qua Docker DNS (
http://ollama:11434). - Open WebUI vẫn publish port 3000 ra host để Caddy proxy tới.
Lưu ý: Với internal: true, Ollama sẽ không thể pull model từ internet. Bạn cần tạm bỏ flag này khi muốn tải model mới, hoặc thêm một network thứ hai có internet access riêng cho việc pull model.
Bước 5: Rate limiting
Dù đã có auth, vẫn nên giới hạn số request để tránh bị abuse hoặc brute-force password. Caddy có module rate_limit để làm việc này.
Cài thêm module rate_limit cho Caddy:
sudo caddy add-package github.com/mholt/caddy-ratelimit
Cập nhật Caddyfile:
ai.yourdomain.com {
rate_limit {
zone dynamic_zone {
key {remote_host}
events 30
window 1m
}
}
reverse_proxy localhost:3000
}
Config trên giới hạn mỗi IP tối đa 30 request trong 1 phút. Bạn điều chỉnh con số tùy theo mức dùng thực tế. Nếu chỉ có 2-3 người dùng thì 20-30 request/phút là hợp lý. Nếu dùng nhiều hơn thì tăng lên.

Checklist bảo mật tổng hợp
Tổng hợp lại những gì cần kiểm tra sau khi setup xong:
| Hạng mục | Kiểm tra |
|---|---|
| Firewall | UFW enabled, chỉ mở port 22, 80, 443. Port 11434 bị deny. |
| SSL/HTTPS | Truy cập qua HTTPS, certificate valid, HTTP tự redirect sang HTTPS. |
| Authentication | Không truy cập được API/WebUI mà không đăng nhập. |
| Network isolation | Ollama không expose port ra host. Chỉ Open WebUI kết nối được. |
| Rate limiting | Spam request bị chặn sau ngưỡng cho phép. |
| SSH | Dùng key-based auth, tắt password login nếu được. |
| Updates | OS, Docker, Caddy, Ollama đều ở phiên bản mới nhất. |
Ngoài ra, một vài điểm nâng cao nếu bạn muốn đi xa hơn:
- Fail2ban để tự động ban IP sau nhiều lần login sai.
- Tailscale/WireGuard để tạo VPN riêng, không cần expose ra public internet.
- Log monitoring với Caddy access log để theo dõi ai đang truy cập.
- Backup định kỳ cho model data và conversation history.
Tổng kết
5 bước ở trên không mất quá 30 phút để setup, nhưng sẽ khác biệt rất lớn so với việc để Ollama mở toang ra internet. Tóm lại:
- UFW chặn mọi truy cập trực tiếp vào Ollama
- Caddy làm reverse proxy với auto SSL
- Authentication qua Caddy basic auth hoặc Open WebUI
- Docker network cô lập Ollama khỏi thế giới bên ngoài
- Rate limiting chống spam và brute-force
Bảo mật không phải làm một lần rồi quên. Nhớ cập nhật software thường xuyên, kiểm tra log, và review lại config khi thêm service mới.
Bài tiếp theo trong series, mình sẽ nói về cách tối ưu hiệu năng Ollama, chọn model phù hợp với phần cứng, và các mẹo để chạy mượt hơn trên VPS.
Có thể bạn cần xem thêm
- Reverse Proxy Ollama với Nginx - Truy cập AI qua domain riêng với HTTPS
- Cài đặt Ollama trên VPS Ubuntu - Chạy AI riêng trong 15 phút
- Ollama API - Tích hợp AI self-hosted vào ứng dụng web
- Cài Open WebUI + Ollama bằng Docker Compose - Tạo ChatGPT riêng trên VPS
- Bảo mật Docker trên Linux VPS - Từ image đến runtime
- Bảo mật Docker trên VPS
Về tác giả
Trần Thắng
Chuyên gia tại AZDIGI với nhiều năm kinh nghiệm trong lĩnh vực web hosting và quản trị hệ thống.