Skip to main content

Как создать свой сервер Counter-Strike Source

Это руководство объясняет, как установить и настроить выделенный сервер Counter-Strike Source (CSS) на вашем VPS или выделенном Linux-сервере.

Заказать сервер​

Для размещения вашего сервера Counter-Strike Source HostMyServers предлагает несколько вариантов, оптимизированных для игр:

Предварительные требования​

Ресурсы

Указанные ниже ресурсы соответствуют потребностям сервера и не учитывают ресурсы, уже используемые операционной системой, установленным программным обеспечением или другими службами на машине. Рассчитывайте примерно на 10 Мбит/с на 30 игроков при tickrate 66 с sv_maxrate 30000 и вдвое больше при tickrate 100.

  • SSH-доступ как root или пользователь с sudo
  • 64-битная система Linux (рекомендуется Debian 12/13 или Ubuntu 22.04/24.04)
  • Активный брандмауэр: nftables (рекомендуется), iptables или ufw (используйте только один инструмент брандмауэра одновременно)
  • Минимум 1 ГБ RAM (рекомендуется 2 ГБ)
  • Около 5 ГБ свободного места на диске
  • Порт 27015 UDP доступен (и порт 27015 TCP для RCON, только с вашего фиксированного IP-адреса)

Требуемая конфигурация​

КомпонентМинимумРекомендуется
RAM1 ГБ2 ГБ
CPU1 ядро2 ядра
Хранилище5 ГБ10 ГБ SSD
Сеть100 Мбит/с1 Гбит/с
Сетевой протокол

Counter-Strike Source использует порт 27015 по UDP для игры и по TCP для доступа RCON (удалённое администрирование), который должен быть доступен только с ваших IP-адресов (требуется фиксированный IP-адрес).

Обновление системы​

sudo apt update && sudo apt upgrade -y

Установка зависимостей​

SteamCMD и сервер CSS — это 32-битные программы: необходимы 32-битные библиотеки. Сначала проверьте, что архитектура i386 включена:

sudo dpkg --print-foreign-architectures

Если результат пустой, выполните:

sudo dpkg --add-architecture i386
sudo apt update

Затем установите необходимые пакеты:

sudo apt install -y wget tar screen lib32gcc-s1 lib32stdc++6

Создание выделенного пользователя​

По соображениям безопасности создайте выделенного пользователя:

sudo adduser --disabled-password --gecos "" css

Настройка брандмауэра​

Откройте порт 27015 по UDP для игроков. Порт 27015 по TCP соответствует RCON: ограничьте его вашим фиксированным IP-адресом (замените ВАШ_IP).

С UFW​

sudo ufw allow 27015/udp
sudo ufw allow from ВАШ_IP to any port 27015 proto tcp
sudo ufw reload

С iptables​

sudo iptables -A INPUT -p udp --dport 27015 -j ACCEPT
sudo iptables -A INPUT -p tcp -s ВАШ_IP --dport 27015 -j ACCEPT
sudo iptables-save | sudo tee /etc/iptables/rules.v4

Сохранение правил после перезагрузки требует пакета iptables-persistent.

С nftables​

Эти команды используют таблицу inet filter и цепочку input, присутствующие по умолчанию в /etc/nftables.conf в Debian.

sudo nft add rule inet filter input udp dport 27015 accept
sudo nft add rule inet filter input ip saddr ВАШ_IP tcp dport 27015 accept
(echo "flush ruleset"; sudo nft list ruleset) | sudo tee /etc/nftables.conf
Безопасность RCON

Никогда не открывайте TCP-порт 27015 для всех: он даёт доступ к RCON. Без фиксированного IP-адреса не открывайте этот порт и используйте SSH-туннель.

Установка SteamCMD​

Войдите под пользователем css:

sudo -u css bash
cd ~

Создайте директории и загрузите SteamCMD:

mkdir -p ~/steamcmd ~/css-server
cd ~/steamcmd
wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz
tar -xzf steamcmd_linux.tar.gz

Загрузка сервера CSS​

Запустите установку сервера (идентификатор приложения 232330):

./steamcmd.sh +force_install_dir /home/css/css-server +login anonymous +app_update 232330 validate +quit
Совет

Если установка прерывается с ошибкой, просто запустите ту же команду снова: SteamCMD продолжит с того места, где остановился.

По завершении отобразится сообщение Success! App '232330' fully installed.

Настройка сервера​

Файл server.cfg​

Создайте файл конфигурации:

nano ~/css-server/cstrike/cfg/server.cfg

Базовая конфигурация​

hostname "Мой сервер CSS"
sv_password ""
rcon_password "ChangeMe"
sv_region 3
sv_lan 0
sv_cheats 0
mp_timelimit 30
mp_freezetime 6
mp_friendlyfire 0
mp_autoteambalance 1
mp_limitteams 2
sv_alltalk 0

Расширенная пользовательская конфигурация​

Пример более полной конфигурации, которую следует адаптировать под ваше сообщество:

// Server.cfg создан Let's Go
// Для сообщества Free 4 Funs
// Опубликовано для hostmyservers.fr
// Версия 1.2
// -------------------------------------------------------------------------------------
// НАСТРОЙКИ СЕРВЕРА
// -------------------------------------------------------------------------------------

// -------------------------------------------------------------------------------------
// Безопасность RCON и пароль
// -------------------------------------------------------------------------------------
// Пароль RCON (необходимо изменить)
rcon_password "changeme"

// Пароль для входа на сервер (публичный сервер: оставьте пустым)
sv_password ""

// -------------------------------------------------------------------------------------
// Идентификация сервера
// -------------------------------------------------------------------------------------
// Имя сервера
hostname "Мой сервер CSS"
sv_region 3
sv_lan 0
// Длительность бана (в минутах) после неудачных попыток доступа к RCON
sv_rcon_banpenalty 60
// Максимальное число неудачных попыток доступа к RCON до бана
sv_rcon_maxfailures 10
// Минимальное число неудачных попыток доступа к RCON до бана
sv_rcon_minfailures 5
// Период (в секундах), за который считаются неудачные попытки (см. sv_rcon_minfailures)
sv_rcon_minfailuretime 900

// -------------------------------------------------------------------------------------
// Конфигурация сервера
// -------------------------------------------------------------------------------------

mp_allowspectators 1
mp_autocrosshair 0
mp_autokick 0
mp_autoteambalance 0
mp_buytime 0.5
mp_c4timer 30
mp_chattime 8
mp_fadetoblack 0
mp_flashlight 1
mp_footsteps 1
mp_forcecamera 0
mp_forcerespawn 0
mp_fraglimit 0
mp_freezetime 4
mp_friendlyfire 1
mp_hostagepenalty 0
mp_limitteams 1
mp_maxrounds 0
mp_playerid 0
mp_roundtime 3
mp_spawnprotectiontime 5
mp_startmoney 16000
mp_timelimit 20
mp_tkpunish 0
mp_weaponstay 1
mp_winlimit 0
sv_accelerate 5
sv_gravity 800
sv_maxspeed 320
sv_pausable 0
sv_timeout 40

// -------------------------------------------------------------------------------------
// Безопасность
// -------------------------------------------------------------------------------------
sv_cheats 0
sv_consistency "1"
sv_pure "2"
sv_pure_kick_clients "1"

// -------------------------------------------------------------------------------------
// Логи сервера
// -------------------------------------------------------------------------------------
log on
sv_logbans 1
sv_logecho 1
sv_logfile 1
sv_log_onefile 1
sv_logsdir logs
mp_logdetail 3

// -------------------------------------------------------------------------------------
// Пропускная способность сервера
// -------------------------------------------------------------------------------------

// Быстрая загрузка (FastDL): адрес веб-сервера, на котором размещены файлы
//sv_downloadurl "https://xxxxxxxxxxxxxxxxxxx"
// Разрешить загрузки
sv_allowdownload 1
// Разрешить отправку файлов игроками (спреи и т. д.)
sv_allowupload 1

// Конфигурация, оптимизированная для tickrate 100
// Требуется расширение Tickrate Enabler для CS:Source и параметр запуска -tickrate 100
// Неограниченный FPS на стороне сервера (0 = без ограничений, потребляет больше ресурсов)
fps_max 0

// -------------------------------------------------------------------------------------
// Не изменяйте эти значения, если не знаете, что делаете
// sv_maxrate 0: неограниченная скорость передачи
// sv_maxrate 30000: 30 000 байт/с (около 0,24 Мбит/с) на игрока
// -------------------------------------------------------------------------------------
net_queued_packet_thread 0
sv_mincmdrate 75
sv_maxcmdrate 101
sv_maxrate 0
sv_minrate 20000
sv_maxupdaterate 101
sv_minupdaterate 75

// -------------------------------------------------------------------------------------
// Управление банами
// -------------------------------------------------------------------------------------
// Загружает список игроков, забаненных по SteamID и по IP-адресу
// (файлы нужно поместить в cstrike/cfg)
exec banned_user.cfg
exec banned_ip.cfg

// -------------------------------------------------------------------------------------
// Управление ботами
// -------------------------------------------------------------------------------------
// Чтобы включить ботов, удалите // перед следующей строкой
// (файл bot.cfg должен находиться в cstrike/cfg)
//exec bot.cfg

// -------------------------------------------------------------------------------------
// Статистика сервера
// -------------------------------------------------------------------------------------
sv_stats 1
sv_filterban 1

echo ==============================
echo Server.cfg correctement charge
echo ==============================
echo ===============================
echo Visitez wiki.free4funs.ovh
echo Visitez hostmyservers.fr
echo ===============================
echo ===============================
echo Server.cfg Config By Lets'Go
echo ===============================
Безопасность

Выберите длинный и уникальный пароль rcon_password. Любой, кто его знает, может администрировать ваш сервер.

Основные параметры​

ПараметрОписание
hostnameПубличное имя сервера
sv_passwordПароль для входа (пусто = публичный)
rcon_passwordПароль удалённого администрирования
sv_regionРегион: 3 = Европа, 0 = восток США, 4 = Азия, 255 = весь мир
sv_lan0 = сервер виден в Интернете, 1 = только локальная сеть
mp_timelimitДлительность карты в минутах
mp_freezetimeДлительность заморозки в начале раунда, во время которой игроки покупают снаряжение (секунды)
mp_friendlyfireОгонь по своим (0 = отключено, 1 = включено)
sv_alltalkГолосовой чат между двумя командами (0 или 1)

Токен GSLT (необязательно)​

Токен GSLT

Токен GSLT (Game Server Login Token) не является обязательным, но рекомендуется: он позволяет вашему серверу отображаться в списке публичных серверов Steam.

Чтобы сгенерировать его, войдите в свой аккаунт Steam и перейдите в Управление учётными записями игровых серверов Steam.

Для создания токена необходимо выполнить несколько условий:

  • Ваш аккаунт Steam не должен быть забанен в сообществе или заблокирован
  • Ваш аккаунт Steam не должен быть ограничен
  • К вашему аккаунту Steam должен быть привязан номер телефона
  • Ваш аккаунт Steam должен владеть игрой, для которой вы создаёте учётную запись игрового сервера
  • Ваш аккаунт Steam может создать до 1000 учётных записей игровых серверов

В поле App ID основной игры введите 240. Вы можете добавить заметку, чтобы помнить, для какого сервера создан токен, затем завершите, нажав кнопку Создать.

Чтобы использовать токен, добавьте его в строку запуска:

+sv_setsteamaccount ВАШ_ТОКЕН
Совет

Добавьте параметр во все ваши строки запуска: первый запуск, строку ExecStart сервиса systemd и команду, запускаемую через screen.

Первый запуск​

cd ~/css-server
./srcds_run -game cstrike -console +map de_dust2 +maxplayers 24 -port 27015

После завершения запуска консоль отображает состояние подключения к серверам Steam. Чтобы остановить сервер, введите quit.

Оптимизация запуска​

Параметры запуска​

ПараметрОписание
-game cstrikeИгра для запуска (обязательно)
+mapСтартовая карта
+maxplayersМаксимальное количество игроков (до 64)
-portПорт сервера (по умолчанию 27015)
-ipIP-адрес, который нужно прослушивать
-tickrate 100Частота симуляции (по умолчанию 66). Увеличивает нагрузку на CPU и требует расширения Tickrate Enabler
-norestartНе позволяет скрипту перезапускать сервер в случае остановки (полезно с systemd)
-consoleЗапуск в консольном режиме
-debuglog имя_файлаЗаписывает отладочную информацию в файл
-highМаксимальный приоритет для процесса сервера
-nohltvОтключает SourceTV
-nobotsОтключает ботов
-insecureОтключает защиту VAC (см. предупреждение ниже)
+sv_setsteamaccountТокен GSLT (необязательно, см. соответствующий раздел)
Параметр -insecure

-insecure отключает защиту VAC: используйте этот параметр только для тестов, он открывает дверь для читеров.

Смена порта​

./srcds_run -game cstrike -console +map de_dust2 +maxplayers 24 -port 27016

Не забудьте открыть новый порт в брандмауэре.

Структура файлов​

ПутьОписание
cstrike/cfg/Файлы конфигурации
cstrike/cfg/server.cfgОсновная конфигурация
cstrike/cfg/banned_user.cfgЗабаненные игроки (SteamID)
cstrike/cfg/banned_ip.cfgЗабаненные IP-адреса
cstrike/maps/Установленные карты
cstrike/addons/Расширения (Metamod, SourceMod)
cstrike/logs/Файлы журналов

Настройка как сервис systemd​

Создание файла сервиса​

Выйдите из сессии пользователя css (exit), чтобы вернуться в свою учётную запись администратора, затем создайте файл сервиса:

sudo nano /etc/systemd/system/css.service

Содержимое файла:

[Unit]
Description=Counter-Strike Source Server
After=network.target

[Service]
Type=simple
User=css
Group=css
WorkingDirectory=/home/css/css-server
Environment=TERM=xterm
ExecStart=/home/css/css-server/srcds_run -game cstrike -console -norestart +map de_dust2 +maxplayers 24 -port 27015
Restart=on-failure
RestartSec=20

[Install]
WantedBy=multi-user.target

Активация и запуск сервиса​

sudo systemctl daemon-reload
sudo systemctl enable css.service
sudo systemctl start css.service

Команды управления​

# Проверить статус
sudo systemctl status css.service

# Остановить сервер
sudo systemctl stop css.service

# Перезапустить сервер
sudo systemctl restart css.service

# Просмотр логов
sudo journalctl -u css.service -f
Консоль сервера

При использовании systemd консоль сервера не является интерактивной. Для отправки команд используйте RCON из игры или запустите сервер через screen (см. ниже).

Запуск с screen (альтернатива)​

Только один способ запуска

Если сервис systemd запущен, сначала остановите его (sudo systemctl stop css.service): два сервера не могут использовать один и тот же порт.

sudo -u css bash
cd ~/css-server
screen -S css
./srcds_run -game cstrike -console +map de_dust2 +maxplayers 24 -port 27015

Для отсоединения: Ctrl+A затем D

Для возврата: screen -r css

Запуск в фоновом режиме с журналом​

sudo -u css bash
cd ~/css-server
screen -AdmSL css ./srcds_run -game cstrike -console +map de_dust2 +maxplayers 24 -port 27015
ОпцияОписание
-AПодгоняет окно под размер терминала
-d -mЗапускает сессию в отсоединённом виде, в фоновом режиме
-S cssИмя сессии
-LЗаписывает вывод сервера в файл журнала

Файл screenlog.0 создаётся в каталоге, из которого запущена команда (~/css-server), и содержит весь вывод на стороне сервера. Чтобы следить за ним в реальном времени:

tail -f ~/css-server/screenlog.0

При ошибке при запуске это первый файл, который нужно проверить. Чтобы вернуться к консоли сервера: screen -r css

Совет

Файл screenlog.0 увеличивается при каждом запуске. Не забывайте регулярно очищать или удалять его.

Обновление сервера​

Остановка сервера​

sudo systemctl stop css.service

Загрузка новой версии​

sudo -u css bash
cd ~/steamcmd
./steamcmd.sh +force_install_dir /home/css/css-server +login anonymous +app_update 232330 validate +quit
exit

Перезапуск сервера​

sudo systemctl start css.service

Консольные команды​

Эти команды используются в консоли сервера или через RCON.

КомандаОписание
statusПоказывает подключённых игроков и их идентификаторы
changelevel <map>Сменить карту
kick <игрок>Выгнать игрока
kickid <userid>Выгнать игрока по его идентификатору
banid <minutes> <steamid> kickЗабанить игрока (0 = навсегда)
writeidСохранить список забаненных в banned_user.cfg
say <message>Отправить сообщение всем игрокам
exec server.cfgПерезагрузить конфигурацию
quitОстановить сервер

Использование RCON из игры​

Ваш IP-адрес должен быть разрешён для TCP-порта 27015 в брандмауэре.

В консоли игры (клавиша ² или ~):

rcon_address IP_ВАШЕГО_СЕРВЕРА:27015
rcon_password ВашПароль
rcon status

Автоматическое резервное копирование​

Скрипт резервного копирования​

sudo nano /home/css/backup.sh
#!/bin/bash
BACKUP_DIR="/home/css/backups"
SERVER_DIR="/home/css/css-server"
DATE=$(date +%Y-%m-%d_%H-%M-%S)

mkdir -p $BACKUP_DIR

# Резервная копия конфигурации
tar -czf $BACKUP_DIR/css_$DATE.tar.gz -C $SERVER_DIR cstrike/cfg

# Удаление резервных копий старше 7 дней
find $BACKUP_DIR -name "css_*.tar.gz" -mtime +7 -delete

echo "Резервное копирование завершено: css_$DATE.tar.gz"
sudo chown css:css /home/css/backup.sh
sudo chmod +x /home/css/backup.sh
Совет

Если вы устанавливаете расширения, добавьте cstrike/addons в команду tar.

Планирование резервного копирования​

sudo crontab -u css -e

Добавьте:

# Резервное копирование каждый день в 4:00
0 4 * * * /home/css/backup.sh

Подключение к серверу​

Игроки могут подключиться следующим образом:

  1. Запустить Counter-Strike Source
  2. Открыть консоль игры
  3. Ввести: connect IP_ВАШЕГО_СЕРВЕРА:27015
  4. Если настроен пароль: password ВашПароль перед подключением

Вы также можете добавить сервер в избранное Steam (меню "Вид", "Серверы", вкладка "Избранное").

При возникновении проблем​

Сервер не запускается​

  • Проверьте логи: sudo journalctl -u css.service -n 100
  • Убедитесь, что установка завершена (повторно выполните команду app_update)
  • Найдите недостающую библиотеку: ldd ~/css-server/srcds_linux | grep "not found", затем установите соответствующий 32-битный пакет

Предупреждение libtinfo.so.5 или libncurses.so.5​

Если сообщение WARNING: Failed to load 32-bit libtinfo.so.5 or libncurses.so.5 появляется при запуске, несмотря на установку зависимостей, создайте символические ссылки на версии 6:

sudo ln -sf /usr/lib/i386-linux-gnu/libtinfo.so.6 /usr/lib/i386-linux-gnu/libtinfo.so.5
sudo ln -sf /usr/lib/i386-linux-gnu/libncurses.so.6 /usr/lib/i386-linux-gnu/libncurses.so.5

Если файлы .so.6 отсутствуют, сначала установите пакет libncurses6:i386.

Ошибки steamclient.so и steamerrorreporter​

Войдите под пользователем css, затем создайте ссылки на файлы SteamCMD:

sudo -u css bash
mkdir -p ~/.steam/sdk32
ln -sf ~/steamcmd/linux32/steamclient.so ~/.steam/sdk32/steamclient.so
ln -sf ~/steamcmd/linux32/steamerrorreporter ~/css-server/bin/steamerrorreporter
exit

Игроки не могут подключиться​

  • Проверьте, что порт 27015 открыт по UDP:

    sudo ufw status
    sudo iptables -L INPUT -n --line-numbers | grep 27015
    sudo nft list ruleset | grep 27015
  • Проверьте, что сервер слушает: ss -ulnp | grep 27015

  • Протестируйте с другой машины с помощью nc -zvu IP_ВАШЕГО_СЕРВЕРА 27015

Сервер не появляется в списке​

  • Убедитесь, что в server.cfg действительно задано sv_lan 0
  • Подождите несколько минут после запуска
  • Убедитесь, что у сервера есть доступ в Интернет
  • Добавьте токен GSLT с помощью +sv_setsteamaccount, чтобы сервер отображался в списке публичных серверов

Проблемы с производительностью​

  • Уменьшите +maxplayers, если сервер перегружен
  • Отключите ненужные расширения в cstrike/addons
  • Запланируйте регулярные перезапуски

FAQ​

Какие порты нужно открыть?​

Помимо порта сервера (27015 по UDP), Steam требуются следующие порты. Они позволяют серверу получать ответы от серверов Steam, когда ваш брандмауэр по умолчанию блокирует входящий трафик:

UFW:

sudo ufw allow proto udp from any port 27000:27030 to any port 1025:65535
sudo ufw allow proto udp from any port 4380 to any port 1025:65535
sudo ufw reload

iptables:

sudo iptables -A INPUT -p udp -m udp --sport 27000:27030 --dport 1025:65535 -j ACCEPT
sudo iptables -A INPUT -p udp -m udp --sport 4380 --dport 1025:65535 -j ACCEPT
sudo iptables-save | sudo tee /etc/iptables/rules.v4

nftables:

sudo nft add rule inet filter input udp sport 27000-27030 udp dport 1025-65535 accept
sudo nft add rule inet filter input udp sport 4380 udp dport 1025-65535 accept
(echo "flush ruleset"; sudo nft list ruleset) | sudo tee /etc/nftables.conf

Я получаю "Отказано в доступе" при выполнении ./steamcmd.sh​

Примените chmod:

chmod +x /home/css/steamcmd/linux32/steamcmd && chmod +x /home/css/steamcmd/steamcmd.sh

Мой сервер зависает на "Network: IP, mode MP, dedicated Yes, ports 27015 SV / 27005 CL"​

Убедитесь, что порт не используется другим процессом:

sudo lsof -i :27015

Если порт свободен, убедитесь, что правила Steam из первого вопроса применены правильно.

Я получаю сообщение "WARNING: setlocale('en_US.UTF-8') failed, using locale: 'C'"​

Это не настоящая проблема: могут неправильно отображаться только некоторые международные символы. Чтобы исправить:

sudo locale-gen en_US.UTF-8
sudo update-locale LANG=en_US.UTF-8

Если команда locale-gen не найдена, сначала установите пакет locales командой sudo apt install -y locales.

Я получаю ошибку ulimit (no permission / can not open file)​

Установите лимит открытых файлов равным 2048 — значение, рекомендованное Valve. Для текущей сессии, перед запуском сервера:

ulimit -n 2048

При использовании systemd добавьте эту строку в секцию [Service] файла сервиса, затем перезагрузите конфигурацию и перезапустите:

LimitNOFILE=2048
sudo systemctl daemon-reload
sudo systemctl restart css.service