TeamSpeak 3 Server на Debian — пошаговый гайд
Гайд основан на фактическом поведении сервера, а не на теории.
Что важно знать заранее
- TeamSpeak 3 НЕ использует HTTPS и TLS как веб
- Сертификаты Let’s Encrypt НЕ нужны
- Шифрование голоса — встроенное
- Администрирование на 90% через клиент
- ServerQuery и веб-интерфейсы — дополнительно
Создание пользователя и каталога
sudo adduser --disabled-login --no-create-home ts3
sudo mkdir -p /opt/teamspeak/server/
sudo chown ts3:ts3 /opt/teamspeak/server/
cd /opt/teamspeak/server/
Почему так:
/opt— место для стороннего ПО- отдельный пользователь = безопасность
- без home — меньше мусора
Загрузка и распаковка сервера (64-bit)
sudo wget -O - https://files.teamspeak-services.com/releases/server/3.13.7/teamspeak3-server_linux_amd64-3.13.7.tar.bz2 | sudo tar xjf -
Переименовываем каталог:
sudo mv teamspeak3-server_linux_amd64 server
sudo chown -R ts3:ts3 server
Принятие лицензии (ОБЯЗАТЕЛЬНО)
Без этого сервер не запустится.
sudo -u ts3 touch /opt/teamspeak/server/.ts3server_license_accepted
Первый запуск (ТОЛЬКО ОДИН РАЗ)
⚠️ Важно: этот шаг нужен только для генерации ключей.
cd /opt/teamspeak/server
sudo -u ts3 ./ts3server_minimal_runscript.sh
В этот момент сервер делает следующее:
- создаёт ServerAdmin token
- создаёт ServerQuery admin
- генерирует ключи
- создаёт базу данных
- поднимает порты
Ты увидишь примерно это:
ServerAdmin privilege key created
token=XXXXXXXXXXXXXXXXXXXXXXXX
И отдельно:
Server Query Admin Account created
loginname=...
password=...
apikey=...
📌 ВСЁ ЭТО СОХРАНИТЬ
Сообщение про лицензию — это нормально
Unable to open licensekey.dat
type : No License
max slots : 32
✔ Это НЕ ошибка ✔ Это бесплатная лицензия ✔ Работает до 2027 года ✔ 1 сервер / 32 слота
Ничего делать не нужно.
Остановить сервер
После первого запуска:
👉 Ctrl + C
Почему:
- дальше сервер должен работать через systemd
minimal_runscriptбольше не нужен
Настройка автозапуска (systemd)
Создаём сервис:
sudo nano /etc/systemd/system/ts3server.service
Содержимое:
[Unit]
Description=TeamSpeak 3 Server
After=network.target
[Service]
User=ts3
Group=ts3
WorkingDirectory=/opt/teamspeak/server
Type=forking
ExecStart=/opt/teamspeak/server/ts3server_startscript.sh start
ExecStop=/opt/teamspeak/server/ts3server_startscript.sh stop
ExecReload=/opt/teamspeak/server/ts3server_startscript.sh restart
PIDFile=/opt/teamspeak/server/ts3server.pid
Restart=on-failure
[Install]
WantedBy=multi-user.target
Сохранить файл Ctrl+O Enter, закрыть Ctrl+X
Активируем:
sudo systemctl daemon-reload
sudo systemctl enable ts3server
sudo systemctl start ts3server
sudo systemctl status ts3server
Ожидаемо:
Active: active (running)
Безопасность
🔹 TCP 10011 — ServerQuery (RAW)
-
Классический текстовый интерфейс управления сервером
-
Используется:
- скриптами
- ботами
- веб-панелями
-
Работает как telnet-подобный протокол
👉 Опасен, если открыт наружу 👉 В клиенте TeamSpeak не нужен
🔹 TCP 10022 — ServerQuery по SSH
-
То же самое, что 10011
-
Но:
- через SSH
- с шифрованием
-
Используется редко
👉 Наружу не нужен 👉 Локально — можно
🔹 TCP 10080 — ServerQuery по HTTP
-
HTTP API для:
- веб-интерфейсов
- мониторинга
-
НЕ веб-сайт
-
Просто API endpoint
👉 Наружу открывать — плохая идея 👉 Локально — нормально
Итоговая логика безопасности (правильная)
| Порт | Назначение | Доступ |
|---|---|---|
| 9987/udp | Голос | 🌍 Весь интернет |
| 30033/tcp | Файлы | 🌍 Весь интернет (опц.) |
| 10011/tcp | ServerQuery | 🏠 Только локалка |
| 10022/tcp | Query SSH | 🏠 Только локалка |
| 10080/tcp | Query HTTP | 🏠 Только локалка |
Обновляем UFW-профиль (добавляем админку)
Открываем файл:
sudo nano /etc/ufw/applications.d/ufw-teamspeak3
Полный вариант
[ts3-voice]
title=TeamSpeak 3 Voice
description=TeamSpeak 3 voice traffic (required)
ports=9987/udp
[ts3-file]
title=TeamSpeak 3 File Transfer
description=TeamSpeak 3 file transfer (optional)
ports=30033/tcp
[ts3-query]
title=TeamSpeak 3 ServerQuery (local only)
description=TeamSpeak 3 admin/query interfaces (RAW, SSH, HTTP)
ports=10011,10022,10080/tcp
Сохранить файл Ctrl+O Enter, закрыть Ctrl+X
Обновляем UFW
sudo ufw reload
Проверяем:
sudo ufw app list | grep ts3
Ожидаемо:
ts3-voice
ts3-file
ts3-query
Открываем ТОЛЬКО голос наружу
sudo ufw allow ts3-voice
(и при необходимости)
sudo ufw allow ts3-file
Разрешаем ServerQuery ТОЛЬКО из локальной сети
❗ Важно: профиль используется вместе с from.
Пример для локальной сети 192.168.0.0/24
sudo ufw allow from 192.168.0.0/24 to any app ts3-query
Если сервер сам подключается к себе:
sudo ufw allow from 127.0.0.1 to any app ts3-query
(обычно loopback уже разрешён, но это безопасно)
Проверка правил
sudo ufw status verbose
Пример правильного вывода:
ts3-voice ALLOW Anywhere
ts3-file ALLOW Anywhere
ts3-query ALLOW 192.168.0.0/24
👉 Наружу ServerQuery не торчит 👉 Локальные скрипты и веб-панели работают
Подробнее про UFW
Fail2ban
🎯 Что будем ловить
TeamSpeak пишет в лог события вида:
- слишком частые подключения
- flood
- временные баны сервера
- превышение лимита попыток
Примеры строк (упрощённо):
flood ban detected
client connected too often
excessive connections
Мы будем:
- считать 5 срабатываний
- за 10 минут
- → бан на 24 часа
Фильтр fail2ban
Создаём фильтр:
sudo nano /etc/fail2ban/filter.d/teamspeak-voice.conf
[Definition]
failregex =
^.*client connected too often.*clientip=<HOST>.*$
^.*flood ban detected.*clientip=<HOST>.*$
^.*excessive connections.*clientip=<HOST>.*$
^.*connection rejected.*clientip=<HOST>.*$
ignoreregex =
Сохранить файл Ctrl+O Enter, закрыть Ctrl+X
📌 <HOST> — обязательно, иначе fail2ban не поймёт кого банить.
Jail (правило бана)
Создаём jail:
sudo nano /etc/fail2ban/jail.d/teamspeak-voice.local
[teamspeak-voice]
enabled = true
filter = teamspeak-voice
logpath = /opt/teamspeak/server/logs/ts3server_*.log
maxretry = 5
findtime = 600
bantime = 86400
port = 9987
protocol = udp
action = ufw
Сохранить файл Ctrl+O Enter, закрыть Ctrl+X
Что это значит (по-человечески):
| Параметр | Значение |
|---|---|
maxretry |
5 попыток |
findtime |
за 10 минут |
bantime |
24 часа |
protocol |
UDP |
action |
бан через UFW |
Проверка логов (важно!)
Убедись, что логи реально есть:
ls /opt/teamspeak/server/logs/
Если путь другой — исправь logpath, иначе fail2ban будет смотреть в пустоту 👻
Перезапуск и проверка
sudo systemctl restart fail2ban
sudo fail2ban-client status
Проверяем именно наш jail:
sudo fail2ban-client status teamspeak-voice
Тест (быстрый и безопасный)
Открой лог:
tail -f /opt/teamspeak/server/logs/ts3server_*.log
Проброс порта на роутере
Для доступа из интернета к серверу и полноценной его работе зайти управление роутером и пробросить необходимые порты:
| Порт | Назначение | Доступ |
|---|---|---|
| 9987/udp | Голос | 🌍 Весь интернет |
| 30033/tcp | Файлы | 🌍 Весь интернет (опц.) |
9987 - для того чтобы общаться голосом (собственно для чего и поднят сервер)
30033 - что бы была возможность передавать файлы. В настройках так же можно сделать квоту на upload и download.
Администрирование сервера
Через клиент — ДА, полностью
Только в TS3 Client можно администрировать. Так же можно установить для управления TS3 Manager
- В TS3-клиенте указываешь IP или домен сервера
- Используешь ServerAdmin token, чтобы создать администратора
- Все права можно управлять прямо в клиенте
- ServerQuery и веб-админка — не обязательны для обычного управления
📌 Даже если ты подключён по домену — ты админ, если у тебя есть права.
Назначить пользователя админом, если утерян доступ к администрированию можно через ServerQuery отдельно допишу как. Такая ситуация возможна после удаления или переустановки клиента TS3 Client, старый токен уже не работает.
Файловый обмен (File Transfer)
Файлы хранятся тут:
/opt/teamspeak/server/files_transfer/
Чтобы диск не превратился в помойку
Добавляем автоочистку файлов старше 30 дней:
sudo crontab -e
Добавь:
0 3 * * * find /opt/teamspeak/server/files_transfer/ -type f -mtime +30 -delete
✔ Работает безопасно ✔ Каналы и сервер не трогает ✔ Только старые файлы
Клиент TeamSpeak
Скачать необходимый клиент с https://www.teamspeak.com/en/downloads/
TS3 Client - более архаичный, но с возможностью администрирования
TS6 Client - современный дизайн, доступны эмодзи.
Про установку клиента мануал тут.
Комментарии