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 - современный дизайн, доступны эмодзи.

Про установку клиента мануал тут.