Первичная настройка VDS на CentOS

Обсудить
Первичная настройка VDS на CentOS

Конфигурация сервера на CentOS зависит от задач, которые будет решать администратор. Однако есть базовые настройки, которые приходится выполнять вне зависимости от того, как будет в дальнейшем использоваться VDS. Речь идет об установке обновлений и региональных параметров, а также защите сервера.

В качестве примера настроим VDS с CentOS на Timeweb. Провайдер предоставляет удобную панель с консолью, которая поможет установить все необходимые параметры работы сервера.

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

Сразу после установки обновляем систему. Открываем панель управления сервера, переходим на вкладку «Консоль» и авторизируемся под теми данными, которые хостер прислал в письме при создании сервера. Выполняем команду для обновления:

yum update

Важно: yum — пакетный менеджер, который используется в CentOS 7. В CentOS 8 вместо него уже dnf, но можно писать и yum — поддержка осталась.

Настройка автоматического обновления CentOS

Чтобы безопасность сервера была на высоком уровне, необходимо постоянно обновлять ядро с системными утилитами и сторонние пакеты. Необязательно ставить обновления в автоматическом режиме, достаточно просто проверять их наличие.

Автоматическая проверка обновления настраивается по-разному в зависимости от версии ОС. В CentsOS 7 используется утилита yum-cron. Устанавливается она из стандартного репозитория.

yum install yum-cron

После установки создается задание на выполнение утилиты в /etc/cron.daily и /etc/cron.hourly. По умолчанию yum-cron скачивает обнаруженные обновления, но не устанавливает их. Администратор получает на локальный почтовый ящик письмо с информацией о наличии апдейтов. Дальше он сам решает, стоит ли их ставить.

Настройка автоматического обновления CentOS 7

Работа 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

По умолчанию таймер настроен на запуск dnf-automatic через час после загрузки VDS и ежедневное повторение процедуры. Конфигурационный файл таймера расположен по адресу /etc/systemd/system/multi-user.target.wants/dnf-automatic.timer

Посмотреть и отредактировать конфигурационный файл dnf-automatic можно в /etc/dnf/automatic.conf. По умолчанию утилита только скачивает обновления, но не применяет их. Конфиги можно настроить так, как вам удобно.

Настройка времени

Сначала узнаем, какое время настроено на сервере по умолчанию. Для этого выполняем команду

date

Изменить часовой пояс можно с помощью специальной утилиты, которая входит в состав systemd

timedatectl set-timezone Europe/Moscow // Устанавливаем московское время

Следующий шаг — проверка статуса службы обновления времени. Для этого выполняем команду

timedatectl

В CentOS для синхронизации времени с интернетом есть утилита chrony. В стандартной сборке она установлена по умолчанию, в минимальной конфигурации ОС ее нет. 

Chrony

Как видно из скриншота выше, на этом сервере время не синхронизируется. Установим утилиту chrony вручную:

yum install chrony

Затем запускаем chrony и добавляем ее в список автозагрузки.

systemctl start chronyd

systemctl enable chronyd

Проверяем статус утилиты.

systemctl status chronyd

Обращаем внимание на следующие строки:

  • System clock synchronized — должно быть значение «yes».

  • NTP service — должно быть значение «active».

После запуска утилиты chrony часы будут автоматически синхронизироваться с сервером времени в интернете.

Настройка файрвола

Для защиты сервера от внешних угроз нужно настроить разрешения для входящего и исходящего трафика. Используем для этого iptables. Он запущен по умолчанию. Проверим текущие правила командой

iptables -L -v -n

Важно: прежде чем настраивать файрвол, проверяем наличие доступа к консоли сервера. В противном случае ошибка может привести к тому, что вы не сможете подключиться к VDS, так как межсетевой экран закроет порты.

В CentOS 7 для управления межсетевым экраном появилась новая утилита —  firewalld. По сути, это надстройка над iptables. Ее можно отключить и воспользоваться файлом с правилами. 

Отключаем firewalld:

systemctl stop firewalld

systemctl disable firewalld

Ставим утилиты для iptables:

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

Это один из вариантов самописного скрипта для файрвола CentOS, который сделает использование системы на сервере более безопасным.

Затем делаем файл со скриптом исполняемым:

 chmod 0740 /etc/iptables.sh

/etc/iptables.sh

Проверяем, что правила теперь применяются:

iptables -L -v -n

Настройка SSH

Настраивать SSH нужно не только для безопасности, но и для удобства. По умолчанию SSH работает на 22 порту. Если его не поменять, то на сервере будет зафиксированы многочисленные попытки авторизации — это боты сканируют интернет и пытаются подобрать пароли к серверам. В реальности это не так опасно, но все равно отнимает ресурсы VDS, пусть и мизерные. Избавиться от подобной активности помогает простая смена номера порта.

Открываем файл /etc/ssh/sshd_config для редактирования:

nano /etc/ssh/sshd_config

В строке Port 22 убираем комментарий и меняем значение — с 22 на 51452 или другое.

Порт 22

Теперь нужно разрешить доступ к этому порту в файрволе. Открываем файл /etc/iptables.sh, находим строку $IPT -A INPUT -i $WAN -p tcp --dport 22 -j ACCEPT и вместо «22» вписываем «51452» или другой номер, который ранее назначили в конфиге SSH.

Для применения изменений перезапускаем sshd:

systemctl restart sshd

Подключение репозиториев в CentOS

В стандартной сборке есть не весь софт, который может понадобиться при разработке проекта. Чтобы инсталлировать дополнительное ПО, нужно предварительно подключить репозитории. Самый популярный вариант для CentOS — EPEL. Добавить его можно из стандартного репозитория одной командой

yum install epel-release

На CentOS 7 также полезным будет репозиторий REMI, который позволяет установить более свежие версии PHP по сравнению с теми, что есть в стандартном репозитории. Выполняем команду

rpm -Uhv http://rpms.remirepo.net/enterprise/remi-release-7.rpm

Этих двух репозиториев хватает для выполнения стандартных задач. Другие подключаются уже под конкретные нужды, которые возникают при работе с сервером. 

Настройка хранения истории

В стандартных настройках хранения истории команд есть ряд ограничений, которые делают ее использование неудобным:

  • сохраняется только последняя тысяча команд;

  • нет дат, только список в порядке выполнения;

  • файл со списком обновляется после завершения сессии, при параллельных сессиях часть команд может оказаться утерянной;

  • сохраняются все команды, хотя в хранении некоторых из них нет никакого смысла.

Список выполненных команд хранится в домашней директории в файле .bash_history. Его можно посмотреть через любой редактор. Для вывода списка можно выполнить в консоли следующую команду:

history

На экране появится пронумерованный список. Быстро перейти к конкретной команде можно с помощью фильтрации, например, так:

history | grep yum 

Этот запрос выделит все запуски команды yum, которые доступны в истории.

На этом базовую настройку VDS с CentOS на борту можно считать завершенной. 

 

Комментарии