Безопасность локального ИИ на VPS: не отдать модель чужим
Подняв LLM на сервере, легко случайно открыть её API всему интернету — и оплачивать чужие запросы своим железом. Разбираем, как закрыть модель, оставив доступ только себе и своему приложению.
Содержание
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Главная угроза — открытый порт
Ollama, llama.cpp и text-generation-webui по умолчанию поднимают HTTP-API. Если запустить их на 0.0.0.0 без фаервола, порт виден всему интернету. Боты сканируют такие порты за часы и начинают гонять запросы за твой счёт.
Проверь, что и на каком интерфейсе у тебя слушает:
ss -tulpn
ss -tulpn | grep -E '8080|11434|8888'
Если видишь 0.0.0.0:11434 — API открыт наружу. Это надо чинить.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.
Арендовать защищённый VPS для ИИСлушать только localhost
Правильный дефолт: LLM слушает 127.0.0.1, а наружу ничего не торчит. Приложение на том же сервере ходит к модели локально, а ты — через SSH-туннель.
# llama.cpp
./llama-server -m model.gguf --host 127.0.0.1 --port 8080
# Ollama — через переменную окружения
export OLLAMA_HOST=127.0.0.1:11434
Для Ollama пропиши это в systemd-юните, чтобы сохранялось после перезагрузки:
systemctl edit ollama
# [Service]
# Environment="OLLAMA_HOST=127.0.0.1:11434"
Нужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.
Фаервол как второй рубеж
Даже если сервис случайно откроется, фаервол не пустит трафик. Настраиваем ufw по принципу «запрещено всё, кроме нужного»:
ufw default deny incoming
ufw default allow outgoing
ufw allow OpenSSH
ufw enable
ufw status verbose
Порт LLM (8080, 11434) сюда сознательно не добавляем — доступ к модели только через SSH-туннель или локальное приложение.
Если API всё-таки нужен наружу
Иногда модель должна быть доступна внешнему приложению. Тогда не открывай голый порт — ставь nginx с авторизацией и HTTPS перед моделью:
apt install -y nginx apache2-utils
htpasswd -c /etc/nginx/.htpasswd apiuser
location /v1/ {
auth_basic "AI API";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_pass http://127.0.0.1:8080/v1/;
}
Плюс сверху — сертификат через certbot и, по возможности, ограничение по IP клиента директивой allow/deny.
Гигиена сервера
- Обновляй систему:
apt update && apt upgradeзакрывает известные дыры. - Заходи по SSH-ключам, отключи вход по паролю и запрети root-логин.
- Не храни API-токены и ключи Hugging Face в открытых файлах и истории bash.
- Поставь fail2ban против перебора SSH.
И держи бэкапы: если сервер скомпрометируют, важно откатиться на чистое состояние. У MAATRIX ежедневные бэкапы идут из коробки, а root-доступ позволяет настроить фаервол и systemd под себя без ограничений панели.
Отдельно про сами веса модели. Если ты дообучал модель на собственных данных, готовый адаптер или merged-модель — это интеллектуальная собственность, которую нельзя отдавать. Храни файлы моделей с правами доступа только для рабочего пользователя, не выкладывай их в публичные пути веб-сервера и не раздавай через открытые эндпоинты скачивания.
chown -R llm:llm /opt/models
chmod -R 750 /opt/models
Частые ошибки
- Запускают Ollama на 0.0.0.0 «чтобы приложение достучалось» — и открывают модель всему миру.
- Полагаются только на фаервол панели хостинга, не настроив ufw на самом сервере.
- Ставят basic-auth без HTTPS — пароль летит открытым текстом.
- Оставляют Jupyter или веб-UI модели без пароля на публичном порту.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.
Арендовать защищённый VPS для ИИОбсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Частые вопросы
Как понять, что моя LLM открыта наружу?
Выполните ss -tulpn и посмотрите на адрес. Если сервис слушает 0.0.0.0, он доступен из интернета. Должно быть 127.0.0.1.
Достаточно ли просто закрыть порт фаерволом?
Фаервол — надёжный рубеж, но лучше сочетать: слушать localhost плюс ufw плюс, если API нужен наружу, nginx с авторизацией и HTTPS.
Чем опасен открытый API модели?
Посторонние гоняют запросы на вашем железе, расходуя ресурсы и деньги, а в худшем случае используют сервер как прокси или площадку для атак.
Как дать доступ к модели своему приложению безопасно?
Если приложение на том же сервере — ходите на 127.0.0.1. Если снаружи — nginx с basic-auth или API-ключом поверх HTTPS и ограничением по IP.
Нужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.