
Trả lời nhanh: Ollama không có lớp xác thực: ai chạm được cổng 11434 là gọi được model, xem được danh sách, thậm chí xóa model của bạn. Ba cách mở cho máy khác dùng mà vẫn an toàn: (1) Tailscale, nghe trên IP tailnet, chỉ thiết bị của bạn thấy (khuyên dùng); (2) reverse proxy + API key, khi cần cho dịch vụ ngoài gọi; (3) SSH tunnel, giải pháp một phút cho nhu cầu tạm.
Khoảnh khắc nguy hiểm nhất của người dùng Ollama là lúc muốn gọi API từ máy thứ hai: tra mạng thấy ngay câu trả lời OLLAMA_HOST=0.0.0.0, và một nửa số người dừng ở đó, để nguyên cổng 11434 mở cho toàn internet. Các đợt quét tự động tìm Ollama mở đã thành công nghiệp: chúng dùng chùa model của bạn (đốt CPU/GPU bạn trả tiền), đọc tên model đoán bạn đang làm gì, và xóa nghịch được. Bài này cho ba cách mở đúng, xếp theo mức khuyên dùng.
- Cổng 11434 không có xác thực, 0.0.0.0 trần trụi là mời cả internet dùng chùa
- Cách 1 (khuyên dùng): OLLAMA_HOST=IP tailnet, chỉ thiết bị trong mạng riêng của bạn gọi được
- Cách 2: Caddy/Nginx đứng trước, kiểm API key, khi webhook/dịch vụ ngoài cần gọi
- Cách 3: SSH tunnel, không cấu hình gì trên server, hợp nhu cầu một buổi
- Kiểm chứng sau khi làm: quét từ ngoài phải KHÔNG thấy 11434
Vì sao 0.0.0.0 trần là thảm họa
Đặt OLLAMA_HOST=0.0.0.0 mà không có tường chắn nghĩa là API đầy đủ quyền nằm giữa phố: /api/tags khai model bạn có, /api/generate cho ai cũng sinh văn bản bằng phần cứng bạn trả tiền, /api/delete xóa được model, /api/pull kéo model lạ chiếm đầy đĩa. Bot quét dải IP tìm cổng 11434 hoạt động liên tục, server mở trần thường bị phát hiện trong vài giờ. Hậu quả nhẹ là CPU dựng đứng vì kẻ lạ dùng chùa; nặng là dịch vụ của bạn nghẽn và đĩa đầy. Nguyên tắc như mọi bài series Tailscale đã nói: dịch vụ nội bộ không hiện diện trên internet công cộng.
Cách 1, Tailscale: nghe đúng trên IP tailnet
Máy chạy Ollama đã trong tailnet (cài theo bài cài đặt) thì cho Ollama nghe đúng địa chỉ tailnet:
sudo systemctl edit ollama
# them vao:
[Service]
Environment="OLLAMA_HOST=100.x.y.z:11434" # IP tailnet cua may nay
sudo systemctl daemon-reload && sudo systemctl restart ollamaKết quả: laptop, điện thoại, n8n trong tailnet gọi http://100.x.y.z:11434/v1 ngon lành; internet công cộng không thấy gì kể cả khi firewall hớ. Muốn chặt nữa: thêm luật ufw chỉ cho vào qua tailscale0, và siết ACL tailnet cho đúng nhóm thiết bị được chạm cổng này. Đây là setup khuyên dùng cho mọi trường hợp chỉ mình và đội mình dùng.
Cách 2, reverse proxy + API key: khi dịch vụ ngoài cần gọi
Có webhook/dịch vụ ngoài tailnet cần gọi model? Đặt proxy có khóa đứng trước, Ollama vẫn chỉ nghe localhost:
# Caddyfile
ai.ten-mien.vn {
@noauth not header Authorization "Bearer KHOA-BI-MAT-DAI-NGOANG"
respond @noauth 401
reverse_proxy localhost:11434
}Caddy tự lo HTTPS, mọi yêu cầu thiếu header đúng bị chặn từ cửa. Client chuẩn OpenAI điền luôn khóa này vào api_key là khớp định dạng Bearer. Nâng cấp khi nhiều người dùng: thay khóa tĩnh bằng LiteLLM proxy, phát khóa từng người, đo lượng dùng, giới hạn model. Nhớ kèm ufw đóng 11434 công cộng để không ai đi cửa sau.
Cách 3, SSH tunnel: giải pháp một phút
Chỉ cần dùng từ laptop trong một buổi làm việc, khỏi cấu hình gì trên server:
ssh -L 11434:localhost:11434 user@dia-chi-server -N
# tren laptop: goi http://localhost:11434 nhu the Ollama chay tai choĐường hầm sống theo phiên SSH, đóng terminal là cửa đóng theo, không dấu vết cấu hình. Hợp cho demo, debug, dùng cá nhân tạm thời; thành thói quen hằng ngày thì chuyển sang cách 1 cho bền.
Kiểm chứng: nhìn hệ thống bằng mắt kẻ quét
# tu mot may NGOAI (vd laptop qua 4G):
nc -vz IP-CONG-CONG-SERVER 11434 # phai: connection refused/timeout
curl -m 5 http://IP-CONG-CONG:11434/api/tags # phai: khong ket noi duoc
# tu may TRONG tailnet:
curl http://100.x.y.z:11434/api/tags # phai: tra ve danh sach modelHai phép thử ngoài thất bại + phép thử trong thành công = cấu hình chuẩn. Thêm thói quen tốt: ss -tlnp | grep 11434 trên server xem Ollama đang nghe địa chỉ nào, dòng 0.0.0.0 mà không có firewall chắn là đèn đỏ. Nguyên tắc này áp cho cả hội bạn của Ollama: Open WebUI, Dify, n8n đều nên sống sau tailnet, chỉ dịch vụ cố ý công khai mới mở ra ngoài.
Ba cách mở, kèm cấu hình đầy đủ
Cách 1, nghe trên địa chỉ mạng riêng. An toàn nhất và đơn giản nhất:
tailscale ip -4 # lay dia chi trong mang rieng, dang 100.x.y.z sudo systemctl edit ollama # [Service] # Environment="OLLAMA_HOST=100.x.y.z:11434" sudo systemctl daemon-reload && sudo systemctl restart ollama ss -tlnp | grep 11434 # phai thay dung dia chi do, khong phai 0.0.0.0
Cách 2, đặt máy chủ web phía trước kèm khóa truy cập. Dùng khi dịch vụ bên ngoài cần gọi:
# Caddyfile
ai.congty.vn {
@coKhoa header Authorization "Bearer KHOA-BI-MAT-DAI-VA-NGAU-NHIEN"
handle @coKhoa {
reverse_proxy 127.0.0.1:11434
}
respond 403
}Cách 3, đường hầm qua kết nối bảo mật. Không cấu hình gì trên máy chủ, hợp nhu cầu tạm:
ssh -N -L 11434:127.0.0.1:11434 user@may-chu # Giu cua so nay mo, may cua ban goi http://localhost:11434 nhu binh thuong
Kiểm chứng bằng mắt kẻ quét
# Tu MOT MAY KHAC ngoai mang, thay bang IP cong cong cua may chu nmap -Pn -p 11434 IP-MAY-CHU # phai la closed hoac filtered curl -m 5 http://IP-MAY-CHU:11434/api/tags # phai khong ket noi duoc # Tren chinh may chu ss -tlnp | grep 11434 # dia chi nghe phai la 127.0.0.1 hoac IP mang rieng sudo ufw status numbered # kiem luat tuong lua
Thấy danh sách model trả về từ máy ngoài nghĩa là bạn đang cho cả internet dùng máy chủ của mình. Sửa ngay, đừng để tới ngày mai.
Điều ít ai nói: Docker đi vòng qua tường lửa
Nếu chạy Ollama trong container và khai -p 11434:11434, cổng đó mở ra ngoài kể cả khi tường lửa của hệ điều hành đang chặn, vì Docker tự thêm luật ở tầng thấp hơn. Cách sửa:
# Chi mo cho chinh may docker run -p 127.0.0.1:11434:11434 ... # Hoac trong compose ports: - "127.0.0.1:11434:11434"
Đây là nguyên nhân khiến nhiều người tưởng mình đã đóng cổng nhưng công cụ quét vẫn tìm thấy dịch vụ.
Ba thứ nên bật thêm khi phục vụ cả nhóm
- Giới hạn số yêu cầu đồng thời bằng biến
OLLAMA_NUM_PARALLEL. Không giới hạn thì một người gửi hàng loạt là cả nhóm chờ. - Theo dõi mức dùng. Bật ghi nhật ký ở máy chủ web phía trước, biết ai gọi bao nhiêu. Máy chủ chạy mô hình là tài nguyên đắt, cần biết nó đang phục vụ ai.
- Đặt hạn mức và xoay khóa định kỳ nếu dùng cách máy chủ web kèm khóa. Khóa dán trong tệp cấu hình của nhiều người rồi lọt lên kho mã nguồn là chuyện thường gặp.
Câu hỏi thường gặp
Tôi chỉ dùng Ollama trên chính máy đó, có phải làm gì không?
Không, mặc định Ollama nghe 127.0.0.1, an toàn sẵn. Bài này dành cho lúc bạn muốn máy KHÁC gọi vào; chưa có nhu cầu thì đừng đổi gì.
Đặt OLLAMA_HOST=0.0.0.0 nhưng có ufw chặn 11434 thì sao?
Chấp nhận được về kỹ thuật, firewall là tường chắn thật. Nhưng dễ vỡ: một lần gỡ ufw, đổi luật, hay chuyển máy là cổng phơi ra mà không ai nhớ. Nghe thẳng trên IP tailnet an toàn theo thiết kế, không phụ thuộc trí nhớ.
Open WebUI có thêm được lớp đăng nhập cho Ollama không?
Open WebUI có tài khoản riêng cho giao diện chat, nhưng đó là khóa cửa WebUI, không khóa API Ollama phía sau. API vẫn phải tự bảo vệ bằng một trong ba cách của bài.
Nhiều VPS cùng gọi một máy Ollama trung tâm nên đi đường nào?
Tailnet là đẹp nhất: mọi VPS vào cùng tailnet (auth key gắn tag), Ollama nghe IP tailnet, ACL giới hạn đúng nhóm server được gọi. Không hardcode IP công cộng, không mở port, chuyển máy Ollama cũng không phải sửa client, MagicDNS lo tên.
Bài viết liên quan
- Ollama API: thay OpenAI trong code, n8n và Dify
- Tailscale là gì? Mạng riêng nối mọi thiết bị của bạn
- Tailscale SSH: quản trị server không cần mở port 22
- EmDash là gì? Hướng đi mới của Cloudflare cho một CMS kiểu “hậu WordPress”
- Cảnh báo CVE-2026-42945: Lỗ hổng Nginx mức CRITICAL (CVSS 9.2/10), VPS cần update khẩn cấp
- Setup Uptime Kuma trên VPS: monitor 20 endpoint free đẹp hơn UptimeRobot
- Cline là gì? AI agent miễn phí trong VS Code
- Database MySQL và PostgreSQL chậm: 6 nguyên nhân thường gặp
- CPU xung cao hay nhiều nhân: chọn VPS thế nào cho đúng việc



