Настройка linux debian под сервер cs 1.6 вручную

Сообщения
75
Реакции
66
Помог
1 раз(а)
Здравствуйте, хотел бы расказать как я настраиваю оперативную систему под свой сервер.
Стоит у меня os Debian 9x64 и, сообственно, рассаматривать настройку будем на ней.
Статья написана, скорее всего, под тех, кто уже немного прошарен. Но и для новичков будет сверхполезной.
Буду работать с текстовым редактором vim, кому удобнее nano - ваш выбор, просто замените слово vim в командах на nano. Момент установки данного редактора я упустил.
Написано очень примитивно, не хотел писать много текста. Если пользователи захотят - напишу еще несколько статтей по каждому пункту.
Пакеты, с которыми мы будем работать:
  1. Iptables - уже предустановлен в debian.
  2. Proftpd - ftp сервер.
  3. Nginx - web.
  4. Mariadb - база данных.
  5. Другие системные пакеты нужные для кс или мониторинга.(tmux, htop, разные библиотеки).
I. Установка пакетов и настройка самой системы:

1) Подключаемся по ssh, вводим свои данные.
2)
Код:
//Для начала обновим пакеты:
apt update
//Установим их:
apt upgrade -y
//Скачаем сразу некоторые необходимые пакеты:
apt install wget htop sudo unzip
// reboot, если нужно
3) Сразу настроим iptables, чтобы потом не возвращатся.
Сохраним наши настройки в файл, чтобы было удобнее работать.
iptables-save > /etc/iptables.rules
Редактируем файл, правя под себя.
vim /etc/iptables.rules
Вписываем туда настройки, привожу свой готовый конфиг.
Код:
# Generated by iptables-save v1.6.0 on Tue May 29 23:49:35 2018
*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp --tcp-flags ALL NONE -j DROP
-A INPUT -p tcp --tcp-flags ALL ALL -j DROP
-A INPUT -p tcp ! --syn -m state --state NEW -j DROP
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 6000:6100 -j ACCEPT
# CS
-A INPUT -p udp --dport 27015 -j ACCEPT
-A INPUT -m string --string "HLBrute" --algo kmp -j DROP
-A INPUT -m string --string "HLXBrute" --algo kmp -j DROP
COMMIT
# Completed on Tue May 29 23:49:35 2018
80 - порт nginx.
22 - ssh port.
21 и 6000:6100 порты для ftp сервера. Данные числа подставляем свои.
27015 - думаю, всем понятно.
Сохраняемся, выходим.
Релоадим настройки в iptables.
iptables-restore < /etc/iptables.rules

4) Добавим sudo пользователя, от которого будем работать все время.
adduser zerg
Вводим пароль, повторяем.
Выдаем sudo для нашего пользователя:
usermod -aG sudo zerg

Дальше логинимся под нашего пользователя и продолжаем.
su - zerg

5) Установим proftpd.
sudo apt install -y proftpd
Редактируем конфиг:
sudo vim /etc/proftpd/proftpd.conf
Раскомментируем только эти строки и изменим последнюю под наши пассивные порты:
DefaultRoot ~
PassivePorts 6000 6100
Минимальная настройка фтп произведена перезапускаем его и движемся дальше.
sudo systemctl restart proftpd
При подключении указываем данные своего пользователя.

6) Установим веб сервер nginx для работы нашего банлиста и fastdl.
sudo apt install -y nginx

Некую информацию по настройке я уже выкладывал здесь: Настройка виртуальных хостов nginx(Инструкция)
Настройка в debian почти ничем не отличается. Стоит только заметить, что вместо sites-available и sites-enabled используется одна директория conf.d.
Если не разобрались - задаем вопросы, либо пишем мне в личку.
Чтобы установить последнюю версию nginx`a - читайте инфу на офф.сайте.
Конфиг fastdl, спасибо serfreeman1337
Код:
server {
    listen 80;
    server_name fdl.domain.ru www.fdl.domain.ru;
    location / {
        alias   /home/ваш пользователь/servers/27015/cstrike/;
        autoindex on;
        location ~* (\.wad$|(maps|sprites|models|gfx|sound|media|overviews)/.*(bsp|mdl|spr|wav|mp3|bmp|tga|txt|res)$) {
            allow all;
        }
        deny all;
    }
}


7) Установим нашу бд.
sudo apt install -y mariadb-server

Выполняем инсталляцию отвечая на каждый вопрос. Обязательно вводим новый пароль для mysql root юзера:
sudo mysql_secure_installation

Подключимся к нашему мускл и сразу создадим нужную бд вместе с пользователем. dbname и username, userpassword меняем на свои данные:
mysql -u root -p
"mysql>" Копировать не нужно
mysql> CREATE DATABASE dbname;
mysql>GRANT ALL PRIVILEGES ON dbname.* TO username@localhost IDENTIFIED BY 'userpassword';
В данном случае мы создаем бд с именем dbname, пользователя username с паролем userpassword и разрешаем ему коннект через локальный хост.
Перезагрузим привилегии и можем выходить.
flush privileges

II. Приступим к установке самого сервера:
1) Установим нужные пакеты:
sudo apt-get install -y lib32gcc1 tmux


2) Добавим пользователя нашего сервера. sudo выдавать ему нет смысла.
sudo adduser serv
Вводим пароли и логинимся
su - serv

3) Создадим нужные папки и скачаем steamcmd(Без него будет сыпать ошибки в консоль).
Код:
mkdir servers run steamcmd
Переходим в папку steamcmd и скачаем его.
Код:
cd ~/steamcmd
wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz
tar -xvzf steamcmd_linux.tar.gz
./steamcmd.sh
// Пакеты обновлятся и можем выходить
exit
4) Перейдем к скачиванию самого сервера:

Код:
cd ~/servers/
wget http://www.dedicated-server.ru/hlds_linux_6153_beta.zip
// Разархивируем
unzip hlds_linux_6153_beta.zip
// Переименуем для удобства
mv hlds 27015
5) Создадим некий скрипт для запуска сервера в tmux.
Код:
cd ~/run
touch run_27015.sh
// выдаем права
chmod +x run_27015.sh
Вот мой скрипт запуска. Скрипт был переделан под себя, но спасибо не помню какому ресурсу. Либо, можете запускать через другие скрипты. Ищите на форуме.

Код:
#!/bin/bash
#. /lib/lsb/init-functions

#####################################################
server_name="cs_27015"
screen_name="cs_27015"
use_user="serv"
path="/home/serv/servers/27015"
hlds_ip="ваш ип"
hlds_port="27015"
hlds_players="32"
hlds_map="de_dust2_2x2"
hlds_options="-norestart +sys_ticrate 1200 -pingboost 2 -condebug -debug"
usecore="0"
hlds_pid="${screen_name}.pid"
clear_logs="1"
checker_cmd="/usr/bin/quakestat"
#####################################################

if [ ! -x $path/hlds_run ]; then
    printf "${title} Выставление ${BGreen}chmod +x ${NC}для ${BRed}hlds_run${NC}!\n"
    chmod -R 777 $path
fi

NC='\e[0m'
BRed='\e[1;31m'
BGreen='\e[1;32m'
BYellow='\e[1;33m'
BPurple='\e[1;35m'
Cyan='\e[0;36m'

title="[${Cyan}${hlds_ip}${NC}:${Cyan}${hlds_port}${NC}]"

#####################################################

start() {
    if [ "`ps -ef | grep ${screen_name} | grep hlds_linux | grep -v grep | wc -l`" -gt 0 ]; then
        printf "${title} Сервер ${BYellow}${server_name} ${NC}уже запущен!\n"
        exit 1
    fi
    cd ${path}
    if [ ${clear_logs} == 1 ]; then
        rm -f ${path}/debug.log
        rm -f ${path}/checker.log
        rm -f ${path}/cstrike/qconsole.log
        rm -rf ${path}/cstrike/logs/*.log
        #${start1} rm -fr ${path}/cstrike/addons/amxmodx/logs/*.log
        printf "${title} Серверные логи успешно удалены!\n"
    fi
    printf "${title} Запуск ${BYellow}${server_name}${NC}!\n"
    tmux new -d -s ${screen_name} ./hlds_run -game cstrike +ip ${hlds_ip} +port ${hlds_port} +map ${hlds_map} +maxplayers ${hlds_players} ${hlds_options} -pidfile ${hlds_pid}
    sleep 1
    if [ "`ps -ef | grep ${screen_name} | grep hlds_linux | grep -v grep | wc -l`" -gt 0 ]; then
        if [ "`ps -ef | grep ${screen_name}| grep hlds_linux | grep -v grep | awk '{print $2}'`" = "`cat $path/$hlds_pid`" ]; then
            printf "${title} Сервер успешно запущен! ${BPurple}:)${NC}\n"
            sleep 1
            taskset -pc ${usecore} `cat ${path}/${hlds_pid}` > /dev/null
        fi
    else
        printf "${title} Произошла ошибка при старте сервера! ${BPurple}:(${NC}\n"
    fi
}

kill_process() {
    if [ "`ps -ef | grep ${screen_name} | grep hlds_linux | grep -v grep | wc -l`" -gt 0 ]; then
        printf "${title} Kill: `ps -ef | grep ${screen_name} | grep hlds_linux | grep -v grep`\n"
        tmux kill-session -t ${screen_name}
        rm -f ${path}/${hlds_pid}
    else
        printf "${title} Не удается завершить ${BYellow}${server_name}${NC}!\n"
    fi
}

stop() {
    if [ "`ps -ef | grep ${screen_name} | grep hlds_linux | grep -v grep | wc -l`" -eq 1 ]; then
        tmux  send-keys -t ${screen_name} 'quit' Enter
        sleep 1
        rm -rf ${path}/${hlds_pid}

        if [ "`ps -ef | grep ${screen_name} | grep hlds_linux | grep -v grep | wc -l`" -gt 0 ]; then
            printf "${title} Сервер ${BRed}не остановлен${NC}!\n"
            kill_process
        else
            printf "${title} Сервер ${BGreen}успешно остановлен${NC}!\n"
        fi
    else
        printf "${title} Произошла ошибка при остановке ${BYellow}${server_name}${NC}, отутствует активная сессия!\n"
    fi
}

status() {
    printf "${title} Статус ${server_name}\n"
    ${checker_cmd} -retry 3 -interval 2 -a2s ${hlds_ip}:${hlds_port} | grep ${hlds_ip}
    exit 1
}

console() {
    if [ "`ps -ef | grep ${screen_name} | grep hlds_linux | grep -v grep | wc -l`" -gt 0 ] && [ "`ps -ef | grep ${screen_name} | grep hlds_linux | grep -v grep | awk '{print $2}'`" = "`cat ${path}/${hlds_pid}`" ]; then
        printf "${title} Подключение к консоли ${BYellow}${server_name}${NC}!\n"
        printf "${title} Для выхода используйте ${BGreen}Ctrl+B D${NC}!\n"
        printf "${title} Не используйте ${BRed}Ctrl+C${NC}!\n"
        sleep 3
        tmux attach -t ${screen_name}
    else
        printf "${title} Произошла ошибка при подключении к ${BYellow}${server_name}${NC}, сервер не запущен!\n"
    fi
}

checker() {
    time=`date +%X`
    date=`date +%D`

    if [ -f ${checker_cmd} ]; then
        if [ ! -x ${checker_cmd} ]; then
            printf "${title} Проверка привилегий ${BYellow}${checker_cmd}${NC}\n"
            exit 1
        fi
    else
        printf "${title} Проверка qstat/quakestat\n"
    fi

    checknoresp=`${checker_cmd} -retry 5 -interval 2 -a2s ${hlds_ip}:${hlds_port} | grep response`
    if [ -n "${checknoresp}" ]; then
        printf "${title} Статус ${BYellow}${server_name}${NC}: [${BPurple}НЕ ОТВЕЧАЕТ${NC}]\n"
        printf "[${date} - ${time}] *[НЕ ОТВЕЧАЕТ]* ${checknoresp}\n" >> $path/checker.log
        kill_process
        sleep 1
        start
        sleep 1
        printf "Запуск ${title}:" >> ${path}/checker.log
        if [ "`ps -ef | grep ${screen_name} | grep hlds_linux | grep -v grep | awk '{print $2}'`" = "`cat $path/$hlds_pid`" ]; then
            printf " *[УСПЕШНО]* \n" >> ${path}/checker.log
        else
            printf " *[НЕУДАЧА]* \n" >> ${path}/checker.log
        fi
        exit 1
    fi

    checkdown=`${checker_cmd} -retry 5 -interval 2 -a2s ${hlds_ip}:${hlds_port} | grep DOWN`
    if [ -n "${checkdown}" ]; then
        printf "${title} Статус ${BYellow}${server_name}${NC}: [${BRed}НЕ РАБОТАЕТ${NC}]\n"
        printf "[${date} - ${time}] *[НЕ РАБОТАЕТ$]* ${checkdown}\n" >> ${path}/checker.log
        start
        sleep 1
        printf "Запуск ${title}:" >> ${path}/checker.log
        if [ "`ps -ef | grep ${screen_name} | grep hlds_linux | grep -v grep | awk '{print $2}'`" = "`cat $path/$hlds_pid`" ]; then
            printf " *[УСПЕШНО]* \n" >> ${path}/checker.log
        else
            printf " *[НЕУДАЧА]* \n" >> ${path}/checker.log
        fi
        exit 1
    fi

    checkup=`${checker_cmd} -retry 5 -interval 2 -a2s ${hlds_ip}:${hlds_port} | grep cstrike`
    if [ -n "${checkup}" ]; then
        printf "${title} Статус ${BYellow}${server_name}${NC}: [${BGreen}ЗАПУЩЕН${NC}]\n"
        printf "[${date} - ${time}] *[ЗАПУЩЕН]* ${checkup}\n" >> ${path}/checker.log
    fi
}

case "$1" in
    start)
        start
    ;;
    stop)
        stop
    ;;
    restart)
        stop
        sleep 2
        start
    ;;
    status)
        status
    ;;
    console)
        console
    ;;
    checker)
        checker
    ;;
    *)
    printf "${title} Доступные команды: {${BGreen}start${NC}|${BGreen}stop${NC}|${BGreen}restart${NC}|${BGreen}status${NC}|${BGreen}console${NC}|${BGreen}checker${NC}}\n"
    exit 1
esac
Сохраняем.
Из папки run вы можете:
./run_27015.sh start - Запустить.
./run_27015.sh stop - Остановить.
./run_27015.sh restart - Перезапустить.
./run_27015.sh console - Перейти в консоль. Внимание, отключение от консоли через ctrl+b+d. Если используете ctrl+c - выйдете полностью.
./run_27015.sh checker - Проверить работает ли сервер. Можно добавить в crontab для автоподнятия.

Вот и все, можно приступать к настройке самого сервера по ftp.
Спасибо за внимание.
 
Последнее редактирование модератором:
Сообщения
227
Реакции
3
Предупреждения
12
Сделай пожалуйста гайд по настройке ядра для cs
и почему для сервера своего юзера создавать надо , я к примеру на одном всё делал ?
 
Сообщения
75
Реакции
66
Помог
1 раз(а)
1337322228, вопрос безопасности. Серверу нет смысла использовать пользователя sudo.
Сделаю, если кто то обьяснит какие из параметров повлияют на кс. Самому разбираться пока не хватит времени.
 
Сообщения
227
Реакции
3
Предупреждения
12
zerg, Я как то находил старый мануал где надо было накотить рт патч на ядро потом отключать экономичный режим питания и 1000hz выставлять на ядро из 250 как по дефолту
но говорят это ещё малая доля была там можно ещё больше отключить и добиться ещё больше снижения нагрузки
Было бы круто про каждую команду и раздел узнать чтобы каждый мог собирать под себя и конкретную нагрузку к примеру машина просто для сервера или ещё банлистов и тд
 
Сообщения
75
Реакции
66
Помог
1 раз(а)
1337322228, сверхпроизводительносты и нереально крутой стрельбы вы и так не увидите. Если сильно болит, то ставьте centos, там таймер 1000. Любой нормальный процессор(не на впсах) легко вытаскивает сервер кс и дефолтного ядра тут хватает с головой. -1-2% нагрузки не стоят потраченого времени.
Про параметры - более интересно для ознакомительных и образовательных целей.
 
Сообщения
227
Реакции
3
Предупреждения
12
zerg, Да ты прав но суть в том что я заметил изменение в half-life 1
на дефолт ядре стрельба с автомата была с пропуском анимации и патронов а именно зажал и не всегда видишь отрисовку патронов и анимация как залипла
а с тем ядром что собрал по тому гайду автомат стрелял как по локальной сети а конкретно это плавная анимация без каких либо залепаний и отрисовка всех патронов и восполнение хп каждую секунду а не по 2 или 3 за раз кто играл на серверах с пингой поймет
 

ssx

Сообщения
272
Реакции
71
Реально это через Docker Compose сделать ?
 
Сообщения
2,491
Реакции
2,790
Помог
61 раз(а)
Реально это через Docker Compose сделать
конкретно что? Поднять HLDS внутри? Да реально. Nginx и php давно существуют докер образы официальные. HLDS образы также есть, но лично я их не запускал.
17 Мар 2019
zerg, все же я бы рекомендовал использовать SFTP вместо FTP. Незачем поднимать дополнительный сервис. Также считаю, что выносить mysql наружу, при условии что у нас все на одной VPS/дедике, не имеет смысла. Плюс безопасность выше. А если нужен доступ, то нам поможет снова SSH с его возможностью пробрасывать порты. Еще для автозапуска отлично подходит система инициализации systemd которая установлена по умолчанию в debian. И наконец все же статья нацелена на новичков, которые зачастую проще освоят nano чем vim (привет поиск как выйти из него). А так в целом статья неплохая, и побольше бы таких мануалов.
 
Сообщения
75
Реакции
66
Помог
1 раз(а)
fantom, ой. Да, конечно. Открывать порт 3306 нет смысла. Смотрел по конфигах и чет пропустил, ибо у меня коннект снаружи.
Лично мне удобнее vim, думаю, пользователь сможет заменить vim на nano. Учту это в след. статьях.
То же касается bash скрипта, запускал systemd после выхода статьи на данном форуме, что то не зашел он мне :)
Скриптов есть очень много, каждый может выбрать под себя.
Жду вопросов, по которым бы хотелись новые мануалы. Как будет свободное время - напишу.
ftp потому, что в будущем можно хранить аккаунты в мускл, да и более гибкий в настройке.
 
Последнее редактирование:
Сообщения
2,491
Реакции
2,790
Помог
61 раз(а)
ftp потому, что в будущем можно хранить аккаунты в мускл, да и более гибкий в настройке.
в свое время я дико намахался настраивая fstpd на виртуального юзера через mysql и возможностью указать root директорию за которой не выпускать данного пользователя. Правда было это еще за времен ubuntu 12.04. После этого я стал дико ненавидеть FTP в целом.
Также уточню что порты 6000-6100 нужно открывать при пассивном соединение. При активном этого делать не нужно.
17 Мар 2019
сможет заменить vim на nano
Я не имел ввиду что нано лучше вима или наоборот. Я отдаю должное вам, за то, что вы его освоили. Я вот честно питался, потом положил на это болт и пользуюсь нано. Но это личное предпочтение вы правы. Все что я хотел донести, так это то, что статья нацелена на новичка в первую очередь. И уж поверьте на слово, вимом они точно не будут пользоваться. Я понимаю что это какой то холивар выглядит со стороны. Но я прекрасно знаю аудиторию котоарая будет читать данный мануал. Посему такие суждение.
 
Сообщения
75
Реакции
66
Помог
1 раз(а)
fantom, Учту все пожелания :good2:
Сам помню как впервые было не вылезти с vim.
 
Сообщения
51
Реакции
3
Код:
# Generated by iptables-save v1.6.0 on Tue May 29 23:49:35 2018
*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp --tcp-flags ALL NONE -j DROP
-A INPUT -p tcp --tcp-flags ALL ALL -j DROP
-A INPUT -p tcp ! --syn -m state --state NEW -j DROP
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 6000:6100 -j ACCEPT
# CS
-A INPUT -p udp --dport 27015 -j ACCEPT
-A INPUT -m string --string "HLBrute" --algo kmp -j DROP
-A INPUT -m string --string "HLXBrute" --algo kmp -j DROP
COMMIT
# Completed on Tue May 29 23:49:35 2018
Хотел бы дополнить. Для тех кто используется Webmin. Если внести в iptables.rules топикстартера данные, вы моментально потеряете доступ к Webmin после релоадим. Поэтому вот вам мои настройки:

Bash:
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -f -j DROP
-A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -s 127.0.0.1/32 -j ACCEPT
-A INPUT -s 192.168.1.35/32 -j ACCEPT
-A INPUT -s 192.168.28.110/32 -j ACCEPT
-A INPUT -p tcp -m tcp -s 192.168.28.110 --dport 3306 -j ACCEPT
-A INPUT -p icmp -m limit --limit 50/second -j ACCEPT
-A INPUT -p tcp -m tcp --dport 10000 -j DROP
-A INPUT -p tcp -m tcp --dport 22 -j DROP
-A INPUT -p tcp -m tcp --dport 3306 -j DROP
А там уже смотрите сами, что добавить от топикстартера. Не забудьте сменить ипы на свои.
 
Последнее редактирование модератором:
Сообщения
20
Реакции
7
Помог
2 раз(а)
Скрипт не хочет запускать через tmux :dntknw:
usage: new-session [-AdDP] [-c start-directory] [-F format] [-n window-name] [-s session-name] [-t target-session] [-x width] [-y height] [command]
 
Сообщения
75
Реакции
66
Помог
1 раз(а)
XaosEnd, установили все нужные пакеты?
os? tmux -V?
 
Сообщения
20
Реакции
7
Помог
2 раз(а)
zerg, да, Debian GNU/Linux 8 (jessie), tmux 1.9
 
Сообщения
75
Реакции
66
Помог
1 раз(а)
XaosEnd, в коде скрипта tmux new -d -s ${screen_name} ./hlds_run -game cstrike +ip ${hlds_ip} +port ${hlds_port} +map ${hlds_map} +maxplayers ${hlds_players} ${hlds_options} -pidfile ${hlds_pid}
-->
tmux new -d -s ${screen_name} "./hlds_run -game cstrike +ip ${hlds_ip} +port ${hlds_port} +map ${hlds_map} +maxplayers ${hlds_players} ${hlds_options} -pidfile ${hlds_pid}"
Cтарый тмукс не может прочитать. Еще как вариант - обновить до последней версии
 
Последнее редактирование:
Сообщения
20
Реакции
7
Помог
2 раз(а)
zerg, аах, ок, завтра испробую, спасибо :thank_you:
 
Сообщения
75
Реакции
66
Помог
1 раз(а)
N3UR0, Если с vi, vim - жмем esc, редактор переходит в нормальный режим, далее нужно нажать shift+; - в нижней части экрана появится двоеточие - вводим wq и тыкаем ентер.
Если nano - ctrl+x и жмем y
Но это все есть в гугле :crazy:
 
Последнее редактирование:

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу