Ollama на своём сервере: что нельзя открывать наружу

API Ollama не имеет аутентификации: любой, кто достучится до порта 11434, может запускать модели на вашем оборудовании, скачивать и удалять модели. Ниже как оставить Ollama доступной только тем, кому нужно, и как проверить это снаружи.
Шаг 1. Слушать только localhost
Ollama по умолчанию слушает 127.0.0.1:11434. Опасность возникает, когда её переводят на все интерфейсы ради удалённого доступа:
# ОПАСНО без защиты вокруг
OLLAMA_HOST=0.0.0.0
Проверьте, что слушает сервис на самом деле:
ss -tlnp | grep 11434
systemctl show ollama -p Environment
Должно быть 127.0.0.1:11434. Адрес 0.0.0.0 или * означает, что API доступно всем сетям, куда у сервера есть вход.
Шаг 2. В Docker привязывайте порт к хосту
docker run -d --name ollama \
-p 127.0.0.1:11434:11434 \
-v ollama:/root/.ollama \
ollama/ollama:0.5.0 # укажите нужную версию вместо latest
Запись -p 11434:11434 публикует порт на всех интерфейсах и обходит правила ufw. Подробнее: безопасность Docker.
Шаг 3. Нужен удалённый доступ: ставьте авторизацию перед API
Через reverse proxy с проверкой входа и TLS. Пример для nginx с ключом в заголовке:
server {
listen 443 ssl;
server_name llm.example.com;
# ssl_certificate ... см. статью про TLS
location / {
if ($http_authorization != "Bearer LONG_RANDOM_TOKEN") { return 401; }
proxy_pass http://127.0.0.1:11434;
proxy_read_timeout 300s;
proxy_buffering off;
}
}
Длинный случайный токен храните как секрет, а не в репозитории: секреты в git. Настройка TLS: HTTPS в nginx. Надёжнее вообще не публиковать API в интернете, а подключаться через VPN: WireGuard. Веб-интерфейсы поверх Ollama (Open WebUI и другие) защищайте так же, отключив регистрацию посторонних.
Шаг 4. Firewall
Закройте 11434/tcp на внешнем интерфейсе, разрешите только адреса VPN или прокси: nftables и firewalld.
Шаг 5. Данные и модели
- Скачивайте модели из библиотеки Ollama или из источников, которым доверяете. Файл модели — чужой код и данные, а не ваш.
- Не передавайте модели секреты и персональные данные в промптах без понимания, где хранятся журналы запросов.
- Ограничьте размер диска под каталог моделей и следите за его заполнением.
- Запускайте службу под отдельным пользователем, не под root.
Как проверить
С другой машины, не из той сети, где работает сервер:
curl -m 5 http://SERVER_IP:11434/api/tags # ожидается: нет соединения
nmap -Pn -p 11434 SERVER_IP # ожидается: closed или filtered
curl -s -H "Authorization: Bearer WRONG" https://llm.example.com/api/tags -o /dev/null -w "%{http_code}\n" # 401
Если первый запрос вернул список моделей, API открыт всему миру: закройте порт немедленно. Как читать вывод Nmap: сканирование сети.















