Защита Terraria-сервера от DDoS-атак
Почему Terraria говорит только по TCP, какие порты серверу нужны на самом деле, как защитить serverconfig.txt, TShock и REST-API на 7878, и с какого объёма атаки помогает только фильтрация в сети перед сервером.
Тот, кто хочет защитить свой Terraria-сервер от DDoS-атак, имеет дело с особым случаем: Terraria говорит исключительно по TCP. Игровой трафик идёт ровно через один порт, 7777 TCP, а UDP-порт игра не открывает вообще. Почти все советы по защите игровых серверов, которые ходят по сети, написаны для UDP-игр и здесь либо уходят в пустоту, либо бьют не туда.
В этой статье сначала разобрано, что вы можете закрыть сами и без дополнительных расходов, затем то, где эти меры технически заканчиваются, и в конце то, что должно после этого происходить в сети перед сервером. Все указания относятся к выделенному серверу Terraria (vanilla, TShock или tModLoader) под Debian 12, Debian 13, Ubuntu 22.04 LTS или Ubuntu 24.04 LTS. Команды написаны для root, если вы работаете под обычным пользователем, добавляйте перед каждой командой sudo. Если атака идёт прямо сейчас, сначала ничего не меняйте в конфигурации и не перезагружайте сервер: сохраните измерения (см. раздел «Протоколирование»), после атаки их уже не будет.
Почему под удар DDoS-атак попадают именно Terraria-серверы
Terraria-серверы — удобная цель, потому что их адрес неизбежно публичен. У vanilla-Terraria нет встроенного браузера серверов: игроки подключаются через «Multiplayer» и «Join via IP», то есть по адресу, который кто-то должен был заранее сделать известным. Тот, кто хочет новых игроков, вносит сервер на сайты-списки вроде terraria-servers.com, tserverweb.com или topg.org либо раздаёт адрес через Discord. Каждый из этих путей отдаёт атакующему ровно то же, что и игроку: IP-адрес и порт в открытом виде.
Если Terraria-сервер постоянно уходит в офлайн, хотя в железе, мире и списке модов ничего не менялось, атака и есть самое вероятное объяснение. К этому добавляется типичная обстановка вокруг проекта: фиксированное время игры, конкурирующие серверы, забаненные игроки и ссоры в сообществе. Атака не стоит заказчику ни навыков, ни заметных денег, а Terraria server booter продаётся как подписка за несколько евро в месяц. Что такое DDoS-атака с технической стороны и как она устроена, объясняет статья Что такое DDoS-атака?.
Terraria работает по TCP, а не по UDP
Это важнейшее отличие практически от любого другого игрового сервера. Выделенный сервер Terraria принимает соединения TCP-слушателем (в движке игры это класс Terraria.Net.Sockets.TcpSocket) и не открывает UDP-сокет. Отсюда четыре следствия, которые определяют всю вашу защиту:
- Полностью установленное TCP-соединение подделать нельзя. Чтобы завершить handshake, атакующему нужно получить SYN-ACK сервера. Значит, тот, кто действительно подключён, приходит с настоящего адреса. Блокировки по IP и пределы числа соединений поэтому работают в Terraria заметно лучше, чем в UDP-игре.
- А вот SYN-флуд подделать вполне можно, потому что он никогда не завершает handshake. Против такого вида блокировка по IP не помогает, помогают только SYN-cookies и фильтрация перед сервером.
- Каждое принятое TCP-соединение к порту 7777 занимает ресурсы в игровом процессе, а не только в ядре. Именно это делает исчерпание слотов самой действенной атакой при наименьшей полосе.
- UDP-флуд всё равно достанет ваш сервер. Чтобы заполнить ваш канал, принимать пакеты не требуется. То, что Terraria не говорит по UDP, канал не защищает, оно лишь не даёт игровому процессу обрабатывать эти пакеты.
Одно исключение есть: если запустить выделенный сервер с -steam и -lobby friends или -lobby private, соединение идёт через сеть Steam и тем самым через UDP-порты в диапазоне от 27000 до 27100. Это другой режим работы, а не классический сервер, доступный по IP-адресу.
Порты, о которых на самом деле идёт речь
Terraria-серверу нужен ровно один порт в открытой сети: 7777 TCP. Всему остальному из этой таблицы место либо вообще не в интернете, либо только на вашем собственном адресе.
| Назначение | Порт | Протокол | Где настраивается | В открытую сеть? |
|---|---|---|---|---|
| Игровой трафик Terraria | 7777 | TCP | serverconfig.txt: port=7777 |
да, единственный |
| Terraria по UDP | нет | нет | игра не открывает UDP-сокет | нет |
| Query-порт или порт статуса | нет | нет | у vanilla-Terraria нет собственного протокола запросов | нет |
| RCON | нет | нет | у Terraria нет RCON, удалённое управление только через TShock | нет |
| REST-API TShock | 7878 | TCP | tshock/config.json: RestApiPort |
нет |
| Сервер tModLoader | 7777 | TCP | тот же serverconfig.txt |
да, единственный |
Режим Steam (-steam -lobby) |
от 27000 до 27100 | UDP | только в режиме работы через Steam | нет |
| Pterodactyl Wings | 8080 | TCP | демон панели | нет, только собственный адрес |
| Pterodactyl SFTP | 2022 | TCP | SFTP панели | нет, только собственный адрес |
| SSH | 22 | TCP | /etc/ssh/sshd_config |
только собственный адрес |
То, что Terraria не знает ни query-порта, ни RCON, для защиты хорошая новость: двух эндпоинтов, которые в Counter-Strike, Rust или ARK регулярно используют для атак типа reflection, здесь просто нет. Зато поверхность атаки тем сильнее сосредоточена на порту 7777, а тот, кто ставит TShock, добавляет к ней вторую поверхность в виде порта 7878.
Что вы можете сделать сами, прежде чем тратить деньги
Этот раздел самый длинный, и так задумано. Аккуратно настроенный Terraria-сервер выдерживает небольшие и средние атаки собственными силами, независимо от того, у какого провайдера он стоит.
1. Инвентаризация: что вообще слушает сеть?
Прежде чем написать хотя бы одно правило, посмотрите, что ваш сервер предлагает наружу. Не гадайте, а смотрите:
ss -lntup
Интерес представляет колонка с локальным адресом. 0.0.0.0:7777 означает «доступен из всего интернета», 127.0.0.1:7878 означает «только локально» и правила файрвола не требует. Если в этом списке появляется UDP-запись для вашего процесса Terraria, сервер работает в режиме Steam. Взгляд атакующего даёт скан портов снаружи:
nmap -Pn -p- --min-rate 1000 ВАШ.IP.АДРЕС.СЕРВЕРА
2. Оставьте открытым только 7777 TCP, остальное закройте
Для Terraria наружу достаточно одного-единственного разрешения. UDP-правило вам не нужно, а UDP-правило для 7777 было бы просто ошибкой: оно пропускает трафик на порт, на котором вообще ничего не слушает. В UFW это выглядит так, причём именно в таком порядке, чтобы не закрыть доступ самому себе:
ufw allow 22/tcp comment 'SSH'
ufw allow 7777/tcp comment 'Terraria'
ufw allow from 203.0.113.10 to any port 7878 proto tcp comment 'TShock REST'
ufw default deny incoming
ufw default allow outgoing
ufw --force enable
ufw status verbose
Замените 203.0.113.10 на свой собственный адрес. Полная инструкция вместе с запасным путём есть в статье Настройка файрвола UFW без потери доступа. Тот, кто держит панель, ограничивает собственным адресом и 8080, и 2022.
3. serverconfig.txt: правильно задать password, maxplayers и secure
Центральный конфигурационный файл сервера Terraria называется serverconfig.txt и передаётся при запуске через -config serverconfig.txt. Для защиты решают четыре директивы:
port=7777
maxplayers=16
password=ДлинныйСлучайныйПароль
secure=1
upnp=0
banlist=banlist.txt
password= — самая действенная бесплатная мера против флуда подключений, который идёт обычным путём. Причина в протоколе: клиент сначала отправляет сообщение 1 со своим идентификатором версии (например, Terraria279), при заданном пароле сервер отвечает сообщением 37, клиент должен правильно ответить сообщением 38, и только после этого сервер сообщением 3 выдаёт допуск вместе со слотом игрока. Без правильного пароля атакующий, таким образом, никогда не доходит до передачи мира, а это и есть дорогая часть подключения.
maxplayers принимает значения от 1 до 255, по умолчанию стоит 16 (до версии 1.4.0.1 было 8). Верхний предел в 255 взят не с потолка: Terraria адресует игроков одним-единственным байтом. Не ставьте maxplayers выше, чем вам действительно нужно, ведь каждый слот — это ресурс, который атакующий может занять. secure=1 включает встроенную проверку на читы (в командной строке -secure), upnp=0 не даёт серверу самовольно открывать порты на роутере.
4. Защита TShock: REST-API на 7878 и флуд авторизаций
TShock — самое распространённое серверное расширение для Terraria, и вместе с REST-API оно приносит вторую полноценную поверхность атаки. По умолчанию она лежит на порту 7878 TCP и настраивается в tshock/config.json, а не в serverconfig.txt. В состоянии поставки она отключена ("RestApiEnabled": false), и именно так ей и стоит оставаться, пока она вам не нужна.
Если она вам нужна, важны эти значения:
"RestApiEnabled": true,
"RestApiPort": 7878,
"EnableTokenEndpointAuthentication": true,
"LogRest": true,
"RESTMaximumRequestsPerInterval": 5,
"RESTRequestBucketDecreaseIntervalMinutes": 1
Два момента здесь важны. Во-первых, эндпоинт /status без токена отдаёт имя сервера, порт, число игроков и имена игроков, пока EnableTokenEndpointAuthentication стоит в false. Это удобно для страниц статуса и Discord-ботов и одновременно бесплатная разведка для любого атакующего, который хочет знать, когда атака окупится. Во-вторых, эндпоинт /v2/token/create создаёт из имени пользователя и пароля токен доступа, и он доступен снаружи, как только открыт порт 7878: это подбор пароля к вашей учётной записи администратора, который заодно стоит процессорного времени. Корзина из RESTMaximumRequestsPerInterval и RESTRequestBucketDecreaseIntervalMinutes это притормаживает, но правило файрвола не заменяет.
Для самого игрового доступа действуют другие значения TShock. MaximumLoginAttempts стоит на 3 и выбрасывает игрока после трёх неудачных попыток. RequireLogin (по умолчанию false) требует учётную запись от каждого игрока. EnableIPBans (по умолчанию true) и KickProxyUsers (по умолчанию true) в TCP-игре особенно действенны, потому что адрес источника установленного соединения как раз подделать нельзя. Против грифинга, о котором часто сообщают как об атаке, работают пороги TileKillThreshold (60), TilePlaceThreshold (20), TileLiquidThreshold (15) и ProjectileThreshold (50), каждый в действиях в секунду.
5. Ограничьте число соединений на один адрес источника и проверьте SYN-cookies
Поскольку Terraria работает по TCP, самое действенное локальное правило — это верхний предел одновременных соединений на один адрес источника. Настоящему игроку нужно ровно одно:
iptables -I INPUT -p tcp --dport 7777 --syn -m connlimit --connlimit-above 3 --connlimit-mask 32 -j DROP
iptables -I INPUT -p tcp --dport 7777 --syn -m hashlimit --hashlimit-name terraria_syn --hashlimit-mode srcip --hashlimit-above 10/min --hashlimit-burst 20 -j DROP
Первое правило отбрасывает новые соединения, как только с одного адреса их одновременно открыто больше трёх. Второе ограничивает частоту попыток подключения из того же источника десятью в минуту с запасом в 20. Обе цифры — стартовые значения, а не истина в последней инстанции: несколько легитимных игроков за общим подключением (совместная квартира, школьная сеть, мобильный оператор) приходят с одного и того же адреса. Сначала померьте неделю в обычном режиме.
Просто добавленные правила iptables после перезагрузки исчезают, в Debian и Ubuntu их сохраняют так:
apt-get install -y iptables-persistent
netfilter-persistent save
При работе с UFW такие правила помещают в /etc/ufw/before.rules, иначе они пропадут при следующем ufw reload. Против поддельных SYN-пакетов, которые никогда не завершают handshake, ни одно из этих правил не помогает, помогает само ядро. Проверьте три значения:
sysctl net.ipv4.tcp_syncookies net.ipv4.tcp_max_syn_backlog net.core.somaxconn
net.ipv4.tcp_syncookies должен стоять в 1, в Debian и Ubuntu это, как правило, уже так. SYN-cookies обходятся без очереди полуоткрытых соединений и восстанавливают состояние из ответа клиента, так что SYN-флуд уходит в пустоту, пока канал не заполнен. net.core.somaxconn с Linux 5.4 стоит на 4096, а до того стоял на 128: при маленьком значении ядро отбрасывает уже установленные соединения раньше, чем игровой процесс успевает их принять.
6. Не дать исчерпать слоты: почему скан портов заполняет ваш сервер
Исчерпание слотов — самая дешёвая действенная атака на Terraria-сервер: атакующий открывает к порту 7777 столько TCP-соединений, сколько у сервера слотов для игроков, и держит их открытыми. Полосы это ему почти не стоит, а сервер заполняет. Настоящие игроки видят «Server is full» и внутрь больше не попадают, хотя на вашем канале ничего подозрительного не происходит. Именно поэтому владельцы Terraria-серверов часто не замечают, что их атакуют.
Причина в способе подсчёта: соединение принимается раньше, чем клиент вообще отправил свой идентификатор версии. Исторически такие соединения-призраки держали слот занятым, пока не истекала TCP-сессия. Серия 1.4.5 это смягчила: там для клиентов, которые сразу же отключаются, слоты больше не резервируются. Правда, в первых выпусках 1.4.5.7 и 1.4.5.8 выделенный сервер падал с необработанным ObjectDisposedException, как только TCP-соединение открывалось, а handshake не завершался. Хватало nc -z или проверки доступности из системы мониторинга. Ошибку тихо исправили за несколько недель, но в старых образах контейнеров она местами ещё сидит. Поэтому держите версию сервера актуальной: здесь это не общее место, а конкретный вопрос доступности.
Дополнительно помогают две настройки. Тот, кто пользуется TShock, ставит MaxSlots на желаемое число игроков, а maxplayers в serverconfig.txt на два места выше: тогда TShock отклоняет лишние соединения аккуратным сообщением вместо того, чтобы игровой процесс пропускал их в последнюю щель. А предел числа соединений из предыдущего раздела — это ровно то правило, которое мешает одному адресу занять все слоты разом.
7. Отключите UPnP и не публикуйте адрес сами
Сервер Terraria по умолчанию пытается открыть свой порт на роутере через UPnP. На арендованном сервере это бесполезно, а в домашней сети открывает порты, о которых вы потом уже не помните. Отключите это через upnp=0 в serverconfig.txt или через -noupnp в командной строке.
Здесь к тому же честность полезнее, чем выдавать желаемое за действительное: сохранить IP-адрес в тайне не получится. Его знает каждый игрок, который хоть раз подключался, да и запись на сайте-списке публикует его в любом случае. Работают две привычки. Нигде не публикуйте сырой IP-адрес сами, а подключайте игроков через имя хоста: клиент Terraria имя хоста разрешает, значит, в критической ситуации вы можете сменить адрес, не ломая все ссылки. И убирайте старые DNS-записи, ведь забытая A-запись на прежний адрес обесценивает любую смену.
8. Кэшируйте запросы статуса вместо того, чтобы пропускать их насквозь
Поскольку у Terraria нет протокола запросов, страницы статуса, Discord-боты и сайты-списки определяют состояние вашего сервера одним из двух способов: они устанавливают настоящее TCP-соединение с 7777 и выдают себя за клиента либо опрашивают REST-API TShock. И то и другое стоит вашему серверу работы, и то и другое растёт вместе с числом опрашивающих.
Контрмера не стоит ничего: никогда не опрашивайте из браузера посетителя. Пусть одна-единственная служба забирает статус через фиксированные промежутки (хватает 30 или 60 секунд), кэширует результат и отдаёт всем посетителям сохранённое состояние. Тогда популярная страница статуса создаёт один запрос на интервал вместо одного на посетителя. Тот, кто использует для этого REST-API, ограничивает порт 7878 адресом этой одной службы.
9. Протоколирование: чтобы в нужный момент были данные
Самый важный шаг — тот, который почти никто не делает заранее: собрать базу для сравнения, пока всё работает нормально. Без нормального значения вы после инцидента не скажете, много ли это, 40 000 пакетов в секунду, или это просто субботний вечер. С apt-get install -y vnstat sysstat измерение идёт постоянно в фоне. Во время инцидента хватает пяти команд:
sar -n DEV 1 10
ss -s
ss -tn state syn-recv | wc -l
ip -s link show eth0
tcpdump -ni eth0 tcp port 7777 -c 200 -q
Третья команда и есть специфичная для Terraria: она считает полуоткрытые соединения. Двузначное значение нормально, четырёх- или пятизначное — это SYN-флуд. Рядом ss -s показывает общее число TCP-соединений, и если это число примерно совпадает с вашим maxplayers, тогда как в игре никого нет, вы видите исчерпание слотов. Для tcpdump правило одно: всегда ограничивайте объём через -c, ведь захват трафика под полной нагрузкой дополнительно нагружает и без того перегруженный сервер. Как разобрать полученные значения, описано в статье Как определить DDoS-атаку на сервере.
Где эти меры заканчиваются
Теперь та часть, которую не решит ни один конфигурационный файл. Все описанные выше меры работают на вашем сервере, то есть в конце канала. Правило файрвола принимает решение о пакете, который уже прошёл по кабелю. Вы можете его отбросить, но не можете сделать неотправленным.
Давайте посчитаем. Типовой игровой сервер подключён на 1 Гбит/с, это 125 мегабайт в секунду, и канал заполнен, как только кто-то отправит больше. Атаки на игровые проекты такого размера обычно лежат в диапазоне от 5 до 50 Гбит/с, то есть от пятикратного до пятидесятикратного объёма вашего канала. Насколько хорошо написано ваше правило connlimit за этим каналом, роли уже не играет: пакеты ваших игроков не доходят ещё раньше. Ровно так и возникают лаг-спайки на Terraria-сервере, при которых загрузка CPU выглядит нормальной.
Вторая величина — интенсивность пакетов, и упирается в неё обычно раньше, чем в полосу. При маленьких пакетах по 64 байта в канал на 1 Гбит/с помещается около 1,49 миллиона пакетов в секунду. Обычное серверное ядро в зависимости от CPU и сетевой карты обрабатывает несколько сотен тысяч из них, а дальше начинает отбрасывать. При SYN-флуде граница лежит ещё ниже, потому что каждый SYN-пакет запускает решение о состоянии: уже нескольких десятков тысяч SYN-пакетов в секунду хватает, чтобы парализовать приём соединений на стандартном Linux, задолго до того как заполнится канал. Владельцы серверов описывают это словами «загрузка ведь была совсем не высокой, а всё равно всё легло».
И третий пункт, который в Terraria упускают чаще всего: атакующий не подстраивается под ваш протокол. Он шлёт UDP-флуды и трафик типа reflection на ваш адрес, хотя ни на одном UDP-порту ничего не слушает. Ваш сервер эти пакеты корректно отбрасывает, но ваш канал они уже заняли, и ваш Terraria-сервер уходит в офлайн, хотя игрового процесса не достиг ни один пакет. Чтобы понимать, какие порядки величин встречаются на практике: на серверах KernelHost были отфильтрованы, среди прочего, атака мощностью более 473,4 Гбит/с при более чем 41,5 миллиона пакетов в секунду и UDP-flood мощностью более 112,2 Гбит/с на игровой сервер. Локальной настройки против такого не существует. Объёмные атаки должны заканчиваться в сети перед сервером.
Что KernelHost этому противопоставляет
Постоянная защита, которая включена в каждый сервер
Защита от DDoS в KernelHost построена в два уровня и активна постоянно, вам не нужно ничего включать, заказывать или настраивать:
- Уровень 1: 17 Тбит/с ёмкости mitigation в глобальной scrubbing-сети. Объёмные атаки вычищаются близко к источнику, ещё до того как они дойдут до дата-центра.
- Уровень 2: фильтрация Arbor в реальном времени на 3,2 Тбит/с во Франкфурте-на-Майне. Непосредственно перед сервером распознаются и отбрасываются схемы, характерные для конкретных протоколов, пакет за пакетом. Для Terraria это конкретно означает: SYN-флуды и флуды соединений против 7777 TCP заканчиваются здесь, а не на вашей сетевой карте.
Решают два свойства. Защита работает постоянно и не должна сначала отреагировать на атаку, поэтому нет тех первых минут, когда сервера нет в сети. И null-routing не применяется: ваш IP-адрес остаётся в сети, отбрасываются только вредоносные пакеты. Тот, кто убирает IP-адрес из сети, добивается для вас того же результата, что и атакующий. Местоположение — Франкфурт-на-Майне. Какие игры и протоколы покрыты, перечисляет статья Защита игровых серверов от DDoS в реальном времени.
Advanced DDoS Protection для проектов под постоянным обстрелом
Некоторые проекты атакуют не время от времени, а прицельно и неделями. Для них есть Advanced DDoS Protection от 50,00 € в месяц, по модели PrePaid, без минимального срока и без платы за подключение. Разница не в большей ёмкости, а в контроле:
- Выделенный защищённый IP-адрес из франкфуртского ядра сети, на который ваш сервер переводится внутри нашей сети. С вашей стороны ничего перестраивать не нужно.
- Самостоятельно управляемые правила защиты по портам и протоколам в личном кабинете: вы задаёте, что разрешено на 7777 TCP, и можете закрыть всё остальное, не написав ни одного тикета.
- Изменения вступают в силу в реальном времени, поэтому подстраивать их можно прямо во время идущей атаки, например сузить допустимую частоту соединений на один адрес источника.
- Профиль защиты под конкретное приложение. Для TCP-игр вроде Terraria и для собственных или модифицированных приложений на любых портах TCP или UDP есть подходящие профили.
Сравнение двух уровней
| Характеристика | Включённая постоянная защита от DDoS | Advanced DDoS Protection |
|---|---|---|
| Цена | входит в каждый серверный тариф без доплаты | от 50,00 € в месяц, PrePaid |
| Ёмкость фильтрации | 17 Тбит/с глобального scrubbing плюс фильтрация Arbor в реальном времени на 3,2 Тбит/с во Франкфурте-на-Майне | та же двухуровневая фильтрация |
| IP-адрес | IP-адрес вашего сервера | дополнительный выделенный защищённый IP |
| Набор правил | автоматические профили, настраивать ничего не нужно | собственные правила по портам и протоколам в личном кабинете |
| Изменения | применяются автоматически | вступают в силу в реальном времени, в том числе во время атаки |
| Профиль для Terraria | автоматический профиль для TCP-игровых серверов | собственный набор правил для 7777 TCP, в том числе для tModLoader и TShock |
| Null-routing | нет | нет |
| Срок | привязан к серверному тарифу | PrePaid, без минимального срока, без срока расторжения, без платы за подключение |
Большинству Terraria-проектов хватает включённой постоянной защиты вместе с аккуратной настройкой сервера. Advanced DDoS Protection — это ответ на ситуацию, когда кто-то воспринимает происходящее лично. Тот, кто сейчас держит сервер где-то ещё, защиту не доустановит, он получает её через переезд в KernelHost: фильтрация — это часть сети, а не надстройка на сервере.
Частые ошибки и решения
«Сервер полон, но внутри никого нет»: это исчерпание слотов. Проверьте командой ss -tn dst :7777 | wc -l, сколько соединений действительно открыто, и сравните это со списком игроков (в консоли сервера: playing). Если цифры не совпадают, слоты заняты посторонними соединениями. Средства против этого: предел числа соединений на один адрес источника, пароль сервера и актуальная версия сервера.
«Я открыл 7777 UDP, и ничего не изменилось»: правильно, потому что на 7777 UDP ничего не слушает. Terraria использует исключительно TCP. Прямого вреда UDP-разрешение не наносит, но это лишнее открытие и верный признак того, что инструкция была скопирована для другой игры.
«Мои правила iptables не срабатывают»: частых причин три. Правила стоят позади цепочек UFW, и дело до них не доходит. Либо они пропали после последней перезагрузки (тогда помогут netfilter-persistent save или запись в /etc/ufw/before.rules). Либо атака объёмная, и правило работает корректно, только канал уже забит. Проверьте командой iptables -L INPUT -n -v, растут ли счётчики совпадений. Если они остаются на нуле, трафик до правила не доходит.
«Игроков выбрасывает, хотя атаки нет»: если вы затянете предел connlimit слишком туго, под него попадают игроки за общими подключениями. В TCP это происходит быстрее, чем в UDP-играх, потому что повторное подключение после обрыва сразу создаёт новое соединение, пока старое ещё висит в TIME_WAIT. Повышайте значение постепенно и следите за счётчиками совпадений.
«Сервер подтормаживает, а канал спокоен»: чаще это мод или плагин, а не атака. Под tModLoader каждый дополнительный мод стоит процессорного времени в том же процессе, а мир с большим количеством сущностей полностью загружает одно ядро, и при этом не приходит ни одного лишнего пакета. Если sar -n DEV 1 10 не показывает ничего необычного, DDoS-атаки не было.
«Мой прежний провайдер заблокировал мой IP-адрес»: это и есть null-routing. Так провайдер защищает собственную сеть, а для вас результат ничем не отличается от успешной атаки, обычно ещё на несколько часов после неё. Если сомневаетесь, спросите напрямую: трафик фильтруют или адрес уводят в null-routing. Ответ определяет вашу доступность сильнее, чем любые характеристики железа.
«В tcpdump я не вижу ничего подозрительного»: если трафик отфильтрован ещё в сети перед сервером, то до самого сервера, как и ожидается, ничего не доходит. При работающей фильтрации это нормальная картина. Верно и обратное: при насыщенном канале до вас может не дойти даже та SSH-сессия, из которой вы собирались снимать измерения. Тогда используйте VNC-консоль в личном кабинете, она работает независимо от сети гостевой системы.
Коротко о главном
- Terraria-серверу нужен ровно один открытый порт: 7777 TCP. Игра не открывает UDP-сокет, не имеет протокола запросов и не имеет RCON.
- REST-API TShock на порту 7878 TCP — вторая поверхность атаки. Оставьте
RestApiEnabledвfalseили ограничьте порт своим собственным адресом. - Пароль сервера в
serverconfig.txt— самая действенная бесплатная мера, потому что без правильного ответа на сообщение 37 атакующий никогда не доходит до передачи мира. - Исчерпание слотов — самая дешёвая атака на Terraria: каждое принятое TCP-соединение к 7777 занимает место, и заметной полосы для этого не нужно. Против этого работают предел на один адрес источника, пароль и актуальная версия сервера.
- Поскольку Terraria использует TCP, адрес источника установленного соединения подделать нельзя: блокировки по IP здесь работают лучше, чем в UDP-играх. Против поддельных SYN-флудов помогают только SYN-cookies и фильтрация перед сервером.
- UDP-флуд кладёт ваш Terraria-сервер, хотя тот не говорит по UDP, ведь он заполняет канал раньше, чем игровой процесс что-либо увидит.
- Примерно с объёма вашей полосы uplink решает исключительно сеть перед сервером. В KernelHost эта фильтрация двухуровневая, работает постоянно и входит в каждый серверный тариф без доплаты.
Если ваш проект уже работает в KernelHost, фильтрация активна, и делать для этого ничего не нужно. Если вы всё же замечаете странности, откройте тикет в поддержку, чтобы правила фильтрации подстроили под ваш IP-адрес. Во время идущей атаки с нами дополнительно можно связаться через экстренный чат WhatsApp по номеру +43 650 8209883.
Частые вопросы
Какой порт и какой протокол нужен Terraria-серверу?
Почему важно, что Terraria использует TCP, а не UDP?
Мой Terraria-сервер пишет Server is full, хотя никто не играет. Что это?
Помогает ли пароль сервера против атак?
Как защитить REST-API TShock на порту 7878?
Сколько игроков указывать в maxplayers?
Можно ли отбиться от DDoS-атаки средствами iptables или UFW?
С какого объёма атаки Terraria-сервер уже не справится сам?
Почему UDP-атака достаёт меня, хотя Terraria вообще не использует UDP?
Уйдёт ли мой сервер в KernelHost в офлайн во время атаки?
Стоит ли защита от DDoS в KernelHost отдельных денег?
Когда дополнительно нужна Advanced DDoS Protection?
2026 KernelHost GmbH. Все права защищены. Эта инструкция охраняется авторским правом. Публикация на других сайтах, в том числе частично или в изменённом виде, без нашего письменного согласия не разрешается. Цитирование с указанием источника и активной ссылкой мы приветствуем.

