Настройка сервера
Настройка файрвола на GPU-сервере
На этой странице
Настройка ufw: сначала разрешите SSH
Разрешите SSH до включения файрвола, иначе потеряете доступ к серверу:
sudo apt install -y ufw
sudo ufw allow OpenSSH
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw enable
sudo ufw status verbose
Ответьте yStatus: active, политики по умолчанию и правило, разрешающее 22/tcp (OpenSSH)
Если у вас постоянный адрес офиса или VPN, можно разрешить SSH только с него. Добавьте новое правило, прежде чем удалять старое:
sudo ufw allow from 198.51.100.7 to any port 22 proto tcp
sudo ufw delete allow OpenSSH
Более мягкий вариант — sudo ufw limit OpenSSH: так ufw ограничивает частоту повторных подключений с одного адреса. Но важнее любого из этих вариантов вход только по ключу, описанный в руководстве
Не забудьте про IPv6
grep IPV6 /etc/default/ufw
sudo ss -tulpn
ufw фильтрует IPv6, если в /etc/default/ufw указано IPV6=yes, — это значение по умолчанию в Ubuntu. При IPV6=no ufw оставляет IPv6 без фильтрации, и сервисы, которые слушают [::], остаются доступными через вашу подсеть /64. Задайте yes, выполните sudo ufw disable && sudo ufw enable и добавьте свои правила заново, чтобы у них появились копии для IPv6. ss выводит все прослушивающие сокеты вместе с процессами: всё, что привязано к 0.0.0.0, * или [::], слушает все интерфейсы. Убедитесь, что это действительно нужно и что файрвол такой сервис охватывает, или привяжите его к 127.0.0.1.
Docker обходит ufw для опубликованных портов
Docker управляет собственными правилами iptables. Когда вы публикуете порт с помощью , Docker направляет этот трафик в контейнер по своим правилам, и он вообще не проходит через правила ufw, которые защищают хост. Порт открыт в интернет даже при default deny incoming — на этом попадаются многие конфигурации с vLLM, Jupyter и мониторингом.
Публикуйте порт только на loopback-интерфейсе :или-p 127.0.0.1:8000:8000"127.0.0.1:8000:8000"в Compose.- Проверьте привязку командой
sudo ss. В выводе должно быть-tlnp | grep 8000127.0.0.1:8000. - С вашего ноутбука команда
curl http://203.0.113.10:8000/v1/models(с IP-адресом вашего сервера) не должна устанавливать соединение. - Открывайте доступ к сервису через обратный прокси на хосте — его трафик ufw как раз фильтрует.
Чтобы по умолчанию все опубликованные порты привязывались к loopback, добавьте "ip": "127.0.0.1" в /etc/docker/daemon.json, сохранив существующие записи, например среду выполнения NVIDIA, и перезапустите Docker. Для более тонкой настройки есть цепочка iptables : Docker проверяет её раньше собственных правил.
Обратный прокси с TLS перед сервисом
llm.example.com/v1/.
sudo ufw allow 80,443/tcp
Caddy
Caddy автоматически получает и продлевает сертификаты. Он есть в репозиториях Ubuntu 24.04 (sudo apt install ); в 22.04 установите его из собственного репозитория Caddy. Замените содержимое /etc/caddy/Caddyfile на следующее:
llm.example.com {
handle /v1/* {
reverse_proxy 127.0.0.1:8000
}
handle {
respond 404
}
}
Примените конфигурацию командой sudo systemctl reload caddy. Когда сертификат будет выпущен, https://llm.example.com/v1/models начнёт отвечать по HTTPS.
nginx
sudo apt install -y nginx certbot python3-certbot-nginx
Создайте :
server {
listen 80;
server_name llm.example.com;
location /v1/ {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_buffering off;
proxy_read_timeout 600s;
}
location / {
return 404;
}
}
Включите сайт, затем запросите сертификат. certbot добавит конфигурацию HTTPS и настроит продление:
sudo ln -s /etc/nginx/sites-available/llm /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
sudo certbot --nginx -d llm.example.com
proxy_buffering off
Обязательный API-ключ на OpenAI-совместимых серверах
или задать VLLM_API_KEY:
openssl rand -hex 32 # generate a key
vllm serve Qwen/Qwen2.5-7B-Instruct --host 127.0.0.1 --port 8000 \
--api-key YOUR_KEY
Проверьте со своего ноутбука:
curl https://llm.example.com/v1/models -H "Authorization: Bearer YOUR_KEY"
curl -i https://llm.example.com/v1/models
Первая команда должна вывести модель, а вторая — вернуть статус 401. vLLM применяет ключ к маршрутам /v1, а другие маршруты, например /metrics, могут оставаться открытыми — поэтому прокси больше ничего и не открывает. Лучше используйте переменную окружения, как в настройке systemd из руководства по инференсу LLM (большой языковой модели) на vLLM
Частная сеть между вашими серверами
По запросу мы объединяем ваши серверы частной сетью. Используйте её для трафика между ними: синхронизации данных, NCCL и rendezvous в torchrun, внутренних API и метрик. Разрешите этот трафик в ufw по подсети или по интерфейсу (найти его можно с помощью ip ):
sudo ufw allow from 10.0.0.0/24
# or
sudo ufw allow in on PRIVATE_INTERFACE
Подставьте подсеть или интерфейс своей частной сети. Как её запросить, описано на странице о частной сети.
Защита от DDoS включена
Устранение неполадок
- Нет доступа после включения ufw. Не пытайтесь подключиться снова и снова. Создайте тикет в личном кабинете (для этого SSH не нужен), указав сервер и добавленные правила; см. раздел о работе с тикетами.
- Caddy или certbot не может получить сертификат.
Проверьте, что DNS-имя указывает на сервер, что порты 80 и 443 разрешены в ufw и что их не слушает другой процесс (sudo ss).-tlnp - Порт контейнера доступен, несмотря на ufw. Он опубликован на всех интерфейсах. Пересоздайте контейнер с
.-p 127.0.0.1:PORT:PORT
Не получается?
Создайте тикет в личном кабинете: укажите сервер, что вы запускали, и приложите вывод ошибок, если он есть. Инженеры отвечают круглосуточно.