В Linux файрвол зависит от дистрибутива: ufw в Ubuntu и Debian, firewalld в AlmaLinux и Rocky. Оба делают одно и то же, различаются только команды.
Прежде всего: если вы включаете файрвол впервые, откройте порт 22 (SSH) до того, как его включить. Иначе это самый быстрый и самый глупый способ остаться без доступа к собственному серверу. Если это всё же случилось, войти можно через вкладку VNC в панели.
Ubuntu и Debian (ufw)
# Первым делом, ВСЕГДА
ufw allow 22/tcp
# Ваш порт, для обоих протоколов
ufw allow 30120/tcp
ufw allow 30120/udp
# Диапазон
ufw allow 7777:7778/udp
# Включить (если ещё не включён) и посмотреть результат
ufw enable
ufw status numbered
Чтобы удалить правило, найдите его номер в выводе ufw status numbered и удалите командой ufw delete 3. Подойдёт и ufw delete allow 30120/udp.
AlmaLinux и Rocky (firewalld)
# Первым делом, ВСЕГДА
firewall-cmd --permanent --add-service=ssh
# Ваш порт, для обоих протоколов
firewall-cmd --permanent --add-port=30120/tcp
firewall-cmd --permanent --add-port=30120/udp
# Диапазон
firewall-cmd --permanent --add-port=7777-7778/udp
# Применить и проверить
firewall-cmd --reload
firewall-cmd --list-all
Благодаря --permanent правило сохраняется после перезагрузки; без этого флага оно пропадёт. А --reload применяет правило: пока конфигурация не перезагружена, ничего не происходит. Чтобы удалить правило, выполните ту же команду с --remove-port.
Проверка, что сервер слушает порт
Запустите игровой сервер и выполните:
ss -lntup | grep 30120
Должна появиться строка с LISTEN (для TCP) или UNCONN (для UDP — это нормально). Если ничего не выводится, дело не в файрволе: сервер не запущен или слушает другой порт.
Обратите внимание и на адрес: если указано 127.0.0.1:30120, а не 0.0.0.0:30120, сервер принимает только локальные подключения, и сколько правил ни добавляй, никто не подключится. Это исправляется в настройках игры, а не в файрволе.
Какие порты НЕ стоит открывать
- Порт базы данных (3306 у MySQL, 5432 у PostgreSQL). Если игра и база данных находятся на одной машине, открывать базу в интернет не нужно: они соединяются через
localhost. Сервер MySQL, открытый всему миру, — это приглашение для атак. - Панели администрирования, например txAdmin. Лучше заходите в них через SSH-туннель:
ssh -L 40120:localhost:40120 root@VASH_IP, а затем откройте в браузереlocalhost:40120. - RCON, если только он действительно не нужен вам снаружи. А если открываете его, пусть пароль будет длинным и уникальным.
Если всё равно не работает
- Сервер слушает порт, и именно на
0.0.0.0? Проверьте командойssвыше. - Протокол правильный? Многие игры работают по UDP; откройте оба, и вопрос отпадёт.
- Вы проверяете снаружи? С самого сервера всё всегда работает.
- Проверьте фильтры на вкладке Безопасность вашей услуги в панели: там находится сетевая фильтрация AntiDDoS — это отдельный уровень защиты, не связанный с системным файрволом.