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

0
14
Обложка статьи: 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: сканирование сети.

Оставьте свой ответ