Настройка VPS/VDS сервера на CentOS
11:28, 17.01.2022
CentOS – гибкая операционная система, разработанная на основе коммерческого дистрибутива Red Hat Enterprise Linux. Главными преимуществами CentOS для VPS/VDS считают простоту, изящность и удобство на всех уровнях взаимодействия, начиная с установки и заканчивая настройкой межсетевых фильтров. Кроме того, эту операционку регулярно снабжают обновлениями и нововведениями, особенно в сфере защиты. По части защищенности и безопасности VPS/VDS с CentOS превосходит практически все аналогичные бесплатные ОС.
Обновление ОС CentOS
Загрузка и установка обновлений в этой операционной системе происходит через встроенную программу Yum, который загружает необходимые данные напрямую из репозитория CentOS Mirror Network. Чтобы получить все актуальные обновления сразу после установки, вам нужно открыть ПУ сервером, перейти во вкладку «Консоль», пройти авторизацию и выполнить одну единственную команду:
yum update
Помните, что пакетный менеджер yum используется во всех версиях кроме CentOS 8, которая перешла на dnf. Если у вас CentOS 8 или новее, воспользуйтесь именно этим ПО. Команда похожая:
dnf update
У этой утилиты тоже весьма простой и интуитивно понятный синтаксис, который имеет стандартную структуру:
# dnf [параметры] [команда] имена-пакетов-или-групп
По желанию вы можете также пользоваться пакетным менеджером yum, так как поддержка никуда не делась.
Автоматическое обновление на CentOS: правильная настройка
Обновлять ядро и системные утилиты в ручном режиме – задача неблагодарная, пусть и отнимает совсем немного времени. Чтобы ваш VPS/VDS с CentOS на HostZealot всегда был надежно защищен и быстро получал все актуальные обновления, рекомендуется настроить автоматическое обновление системы. Например, в CentOS 7 для этого используют утилиту yum-cron. Установить её можно из стандартного репозитория:
yum install yum-cron
По завершению установки утилита создаст задания на выполнения в /etc/cron.daily и /etc/cron.hourly. То есть она по умолчанию будет загружать последние актуальные обновления по указанному пути, однако устанавливать их всё еще должен администратор.
Настроить работу yum-cron можно с помощью конфигурационных файлов, расположенных по пути /etc/yum/yum-cron.conf и /etc/yum/yum-cron-hourly.conf. Здесь вы можете описать параметры для отправки сообщений, настроить применение сторонних почтовых серверов и т.д.
Для CentOS 8 ситуация чуть иная. В этом случае для автоматизации обновлений используют программу dnf-automatic, которую можно загрузить простой командой:
yum install dnf-automatic
После установки вам нужно сперва просмотреть таймеры автоматического запуска проверки обновлений для утилиты systemd:
systemctl list-timers *dnf-*
Если задания не поставились автоматически, их нужно добавить вручную:
systemctl enable --now dnf-automatic.timer
По умолчанию система будет проверять наличие обновлений раз в день, спустя час после загрузки VPS. При необходимости эти значения можно изменить в конфигурационном файле /etc/systemd/system/multi-user.target.wants/dnf-automatic.timer.
С помощью конфигурационного файла dnf-automatic, который расположен по пути /etc/dnf/automatic.conf, вы сможете наладить автоматическое скачивание и применение пакетов обновлений. По умолчанию они будут лишь скачиваться, но устанавливать их нужно будет в ручном режиме. В файле можно прописать всё так, чтобы система выполняла эти задачи без участия пользователя.
Правильная настройка времени
Для начала нужно посмотреть время по умолчанию с помощью стандартной команды:
date
При необходимости вы можете поменять часовой пояс, для этого потребуется воспользоваться утилитой в составе system:
timedatectl set-timezone Europe/Moscow // Указываем Московский часовой пояс
Далее проверяем статус служб обновления времени командой:
timedatectl
На операционной системе CentOS синхронизация времени через Интернет происходит посредством службы chrony, которая имеется в системе сразу и не требует установки. Исключение составляют облегченные конфигурации CentOS, в которых вырезано практически всё лишнее. В этом случае установить chrony можно через репозиторий:
yum install chrony
После этого вам нужно утилиту запустить и добавить в автозагрузку. Поочередно вводим две команды:
systemctl start chronyd systemctl enable chronyd
Проверить статус программного обеспечения можно командой:
systemctl status chronyd
Прежде всего нам будут интересны строки System clock и NTP service. У первой строчки значение должно быть «yes», а у второй — «active». Теперь, при каждом запуске этой утилиты ваш VPS автоматически синхронизирует время через Интернет.
Правильная настройка файрвола
Обеспечить защиту VPS/VDS от большинства видов опасностей можно с помощью контроля входящего и исходящего трафика. Делается это через межсетевой фильтр iptables – эта утилита имеется в CentOS по умолчанию. Актуальные правила, по которым работает инструмент, можно проверить через команду:
iptables -L -v -n
На CentOS 7 и 8 функцию межсетевого экрана выполняет утилита firewall-cmd, которая, по сути, представляет собой изящную надстройку над iptables. Управление группами правил осуществляется через элементы, именуемые зонами. Каждая зона – это набор правил, определяющий разрешения для трафика по уровням доверия в сети. FirewallD имеет 9 зон:
- drop: зона с наиболее низким уровнем доверия. Такие подключения сбрасываются файрволом VPS без всяких ответов, однако исходящее соединение разрешается.
- block: все входящие этой зоны будут отклоняться с выдачей сообщения icmp-host-prohibited или icmp6-adm-prohibited.
- public: публичные сети с низким уровнем доверия. При необходимости отдельные входящие подключения можно разрешать в виде исключения.
- external: внешние сети для тех случаев, когда файрвол используется в качестве шлюза.
- internal: для компьютеров во внутренней части шлюза, которые в большинстве своем заслуживают доверия.
- dmz: зона для изолированных ПК в сегменте DMZ без доступа к остальным частям вашей сети. Этой зоне разрешаются отдельные входящие.
- work: оптимальная зона для размещения рабочих компьютеров. Допускаются разрешения для некоторых дополнительных служб.
- home: домашняя среда.
- trusted: исключительно для доверенных компьютеров. Это самая открытая зона из всех, её нужно использовать осторожно.
Вы можете посмотреть, какая зона выбрана сейчас, с помощью команды:
firewall-cmd --get-default-zone
iptables работает похожим образом, только для работы с ней вам нужно сперва выключить надстройку firewalld:
systemctl stop firewalld systemctl disable firewalld
А затем установить необходимые для межсетевого фильтра утилиты:
yum install iptables-services
И включить автозагрузку:
systemctl enable iptables
Теперь остается создать файл /etc/iptables.sh и отредактировать его, добавив такие правила:
#!/bin/bash # export IPT="iptables" export WAN=eth0 export WAN_IP=147.15.218.72 $IPT -F $IPT -F -t nat $IPT -F -t mangle $IPT -X $IPT -t nat -X $IPT -t mangle -X $IPT -P INPUT DROP $IPT -P OUTPUT DROP $IPT -P FORWARD DROP $IPT -A INPUT -i lo -j ACCEPT $IPT -A OUTPUT -o lo -j ACCEPT $IPT -A OUTPUT -o $WAN -j ACCEPT $IPT -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT $IPT -A OUTPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT $IPT -A FORWARD -p all -m state --state ESTABLISHED,RELATED -j ACCEPT $IPT -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu $IPT -A INPUT -m state --state INVALID -j DROP $IPT -A FORWARD -m state --state INVALID -j DROP $IPT -A INPUT -p tcp ! --syn -m state --state NEW -j DROP $IPT -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP $IPT -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT $IPT -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT $IPT -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT $IPT -A INPUT -p icmp --icmp-type echo-request -j ACCEPT $IPT -A INPUT -i $WAN -p tcp --dport 22 -j ACCEPT $IPT -A INPUT -i $WAN -p tcp --dport 80 -j ACCEPT $IPT -A INPUT -i $WAN -p tcp --dport 443 -j ACCEPT $IPT -N undef_in $IPT -N undef_out $IPT -N undef_fw $IPT -A INPUT -j undef_in $IPT -A OUTPUT -j undef_out $IPT -A FORWARD -j undef_fw $IPT -A undef_in -j LOG --log-level info --log-prefix "-- IN -- DROP " $IPT -A undef_in -j DROP $IPT -A undef_out -j LOG --log-level info --log-prefix "-- OUT -- DROP " $IPT -A undef_out -j DROP $IPT -A undef_fw -j LOG --log-level info --log-prefix "-- FW -- DROP " $IPT -A undef_fw -j DROP /sbin/iptables-save > /etc/sysconfig/iptables
Этот самописный скрипт можно при желании модифицировать и оптимизировать под свои задачи. Также его можно использовать в неизменном виде – он в любом случае сделает использование VPS более безопасным.
Превратить файл с этим скриптом в исполняемый можно с помощью команды:
chmod 0740 /etc/iptables.sh /etc/iptables.sh
Перед завершением осуществите проверку и удостоверьтесь, что правила применились, воспользовавшись той же командой, которую мы упоминали в начале этого раздела.
Добавление репозиториев в CentOS
Рассмотрим на примере CentOS 7, как добавить в систему репозиторий для скачивания программного обеспечения. Файлы репозиториев хранятся в каталоге /etc/yum.repos.d/, просмотреть этот каталог вы можете командой:
ls /etc/yum.repos.d/
Под каждый репозиторий, как правило, создают отдельный файл с таким синтаксисом:
[название_репозитория] name=описание_репозитория mirrorlist=ссылка_на_список зеркал baseurl=ссылка_на_зеркало с пакетами enabled=1 gpgcheck=1 gpgkey=файл_ключа_подписи
Итак, чтобы подключить репозиторий в CentOS, вы должны добавить в каталог файл с настройками репозитория, и всё. Например, вот так:
[extras741708] name=Extras packages for CentOS 7.4.1708 for x86_64 baseurl=http://vault.centos.org/centos/7.4.1708/extras/x86_64/ enabled=1
На сайтах многих репозиториев можно найти готовые пакеты и команду для установки, что значительно упрощает суть дела. Например, чтобы установить на CentOS 7 NUX, нужно всего лишь ввести такую команду:
yum install -y http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-1.el7.nux.noarch.rpm
Утилита всё сделает в автоматическом режиме и загрузит нужные данные. Таким же способом можно установить популярные репозитории REMI, RPMfusion, Adobe и другие. Для большинства задач хватит даже одного репозитория.
Правильная настройка хранения истории
Стандартные настройки ОС имеют ряд ограничений, которые делают хранение истории команд менее удобным. Во-первых, логируются только последние 1000 команд. Во-вторых, не фиксируются даты, когда те или иные команды вводились. В-третьих, некоторые команды хранить нет смысла, так как они не несут смысла, но по умолчанию система сохраняет абсолютно все команды.
Логи ведутся в файле .bash_history, который можно просмотреть с помощью любого редактора. Ну или сделайте еще проще и введите в консоль команду:
history
Перед вами предстанет список, который можно будет отфильтровать с помощью разных команд. Например, выделить все запуски команд yum можно с помощью:
history | grep yum
Итак, вот несколько полезных настроек, которые помогут сделать хранение истории команд более удобным. Увеличить размер хранимой истории можно в файле ~/.bashrc, добавив такие строчки:
export HISTSIZE=10000 export HISTFILESIZE=10000
Также нелишним будет отключить выведение одних и тех же команд, которые вводились повторно несколько раз подряд. Добавляем строчку:
export HISTCONTROL=ignoreboth:erasedups
Еще рекомендуется отключить хранение в истории команд ls, ps и history с доп. опциями:
export HISTIGNORE='ls:ps:history*'
И, наконец, делаем так, чтобы при выводе истории хранения команд нам также показывали дату и время, когда была выполнена та или иная команда. Прописываем строку:
export HISTTIMEFORMAT='%d.%m.%Y %H:%M:%S: '
Чтобы применить настройки на лету, вводим source ~/.bashrc. Это можно сделать уже после внесения в файл всех необходимых изменений. На этом всё, спасибо за внимание и до новых встреч!