Введение
После того как вы установили CentOS на свой VPS-сервер, крайне важно выполнить несколько дополнительных действий по настройке сервера и обеспечении его защиты от различных атак. Далее в статье я рассмотрю наиболее главные, на мой взгляд, шаги для создания полноценного и защищенного VPS-сервера.
Шаг #1: Смена пароля для учетной записи - root
После окончания создания нового VPS-сервера, вам будет выдан пароль для суперпользователя root. Сразу после подключения к вашему серверу по SSH, необходимо его изменить, т.к. иногда выданный пароль не является устойчивым к подбору (brutforce).
Зададим новый пароль для root.
passwd
Шаг #2: Создание нового пользователя
Изначально, после установки CentOS и других дистрибутивов Linux, доступен пользователь под именем root. Суперпользователь root, представляет собой учетную запись администратора системы и имеет максимальные привилегии в системе. Из-за своих высоких возможностей, использовать учетную запись root рекомендуется только в особых случаях, т.к. это способствует случайному совершению деструктивных и необратимых ошибок, исправить которые будет очень сложно.
В связи с этим, администратор сервера создаёт нового пользователя, которому частично делегируют привилегии root. Ниже рассмотрим процесс создания и настройки учетной записи нового пользователя системы.
Создадим новую учетную запись, из под которой будем всегда работать на сервере.
adduser username
Добавим пароль для входа в систему.
passwd username
Если вдруг вы забудете пароль, то этой же командой можно будет установить новый пароль, а старый пароль будет сброшен.
Для того чтобы новый пользователь мог устанавливать программные пакеты и редактировать системные файлы, необходимо делегировать ему полномочия суперпользователя.
Сделать это можно добавив учетную запись в группу суперпользователей - wheel
.
gpasswd -a username wheel
Теперь новый пользователь username
может исполнять команды от имени root
, используя утилиту sudo
.
Для того чтобы перейти в учетную запись нового пользователя используется команда su:
su -l username
Шаг #3: Включение файрвола
Для защиты от нежелательных внешних соединений с нашим сервером, обязательно нужно установить и включить файрвол.
Установим службу файрвола:
sudo yum install firewalld
Включим файрвол и добавим его в список служб для автозапуска при рестарте системы:
sudo systemctl start firewalld;
sudo systemctl enable firewalld;
Шаг #4: Настройка конфигурации SSH
Так как в сети существует большое количество запущенных по всему миру брутфорс-программ, которые день и ночь подбирают пароли к пользователю root и есть вероятность того, что ваш VPS тоже попадет под раздачу. В таком случае, разумным решением будет запретить возможность подключения root пользователя по SSH.
Откроем конфигурационный файл - /etc/ssh/sshd_config
:
sudo vi /etc/ssh/sshd_config
Изменим значение директивы PermitRootLogin
.
1 2 |
#PermitRootLogin yes PermitRootLogin no |
Если вы недостаточно опытный пользователь Linux систем и ваш хостер не предоставляет вам VNC-панель, то запрещать root доступ по ssh, не рекомендуется, т.к. при возникновении критической ошибки, которую можно исправить, только из root записи, вы не сможете ничего сделать.
Также изменим стандартный номер порта SSH, т.к. именно на стандартный 22 порт "стучатся" брутфорс-программы.
Все порты можно разделить на три группы:
- 0 - 1023 - хорошо известные порты, также относятся к системным портам;
- 1024 - 49151 - зарегистрированные порты, также относятся к пользовательским портам;
- 49152 - 65535 - динамические порты, также относятся к частным портам.
Для начала выберем номер порта, на котором будет работать SSH. Выбирать значение номера порта рекомендуется в пределах 49152 - 65535. Чтобы выбрать какой-либо порт, сначала нужно проверить не занят ли он другим сервисом. Для примера, я выберу порт с номером 63356.
Проверим занятость порта 63356 следующей командой:
cat /etc/services | grep 63356/tcp
Если в результате работы команды вы не получили явного ответа, то это говорит о том, что этот порт свободен. В противном случае, в ответе вы увидите имя сервиса, который уже занял выбранный вами порт.
Теперь в файле /etc/ssh/sshd_config
изменим значение директивы Port:
1 2 |
#Port 22 Port 63356 |
Перезапустим сервис SSH для принятия настроек.
sudo systemctl restart sshd
Укажем файрволу, чтобы он пропускал подключения по новому SSH порту - 63356
sudo firewall-cmd --zone=public --permanent --add-port=63356/tcp;
sudo firewall-cmd --reload;
Убедимся, что добавленный порт прослушивается (активен):
ss -lntu | grep 63356
[meliorem@centos ~]$ ss -lntu | grep 63356
tcp LISTEN 0 128 *:63356 *:*
tcp LISTEN 0 128 :::63356 :::*
Теперь для того чтобы подключиться к серверу по SSH, необходимо будет всегда явно указывать номер порта.
ssh username@server_ip_adress -p 63356
Шаг #5: Смена имени сервера (hostname)
В арендуемые VPS-сервера хостеры часто устанавливают значение переменной $HOSTNAME
, на свое усмотрение. Давайте поменяем дефолтное имя хоста на другое. Чаще всего именем для хоста служит какой-нибудь домен.
Полную информацию о имени хоста можно узнать следующей командой:
hostnamectl status
[meliorem@centos ~]$ hostnamectl status
Static hostname: hostername.ru
Icon name: computer-vm
Chassis: vm
Machine ID: 1a7dd5067ac44318a143dae4b60da0ba
Boot ID: 87e4dd5f9d9b4410b096c2768dea8235
Virtualization: kvm
Operating System: CentOS Linux 7 (Core)
CPE OS Name: cpe:/o:centos:centos:7
Kernel: Linux 3.10.0-693.2.2.el7.x86_64
Architecture: x86-64
Изменим имя сервера:
sudo hostnamectl set-hostname "example.ru"
Убедимся, что имя поменялось:
hostname
Шаг #6: Настройка временной зоны
При аренде VPS-сервера его локальное время часто связано с тем регионом, в котором он находится. Если, например, ваш VPS-сервер находится в Амстердаме, то и сервер будет работать по центрально-европейскому времени.
Проверим, то по какой временной зоне работает наш сервер:
timedatectl
Получить список доступных временных зон:
timedatectl list-timezones
Я живу в Московском часовом поясе, поэтому мне удобно, чтобы и сервер работал по такому же времени.
Установить время сервера по Москве можно так:
timedatectl set-timezone Europe/Moscow
Шаг #7: Настройка локали
Локали определяют язык, который использует система, а также региональные особенности, такие как денежные знаки, формат чисел, даты и наборы символов.
Список всех доступных локалей хранится в каталоге - /usr/share/i18n/locales
Просмотреть используемые локали, можно командой ниже:
locale
[meliorem@centos ~]$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
Если вы хотите установить русскую локаль для какого либо формата, например времени, то воспользуетесь следующей командой:
sudo localectl set-locale LC_TIME=ru_RU.UTF-8
Язык в результат выполнения команды date
, изменится на Русский(после перезагрузки сервера).
Для установки Русского-языка в систему, используйте команду:
sudo localectl set-locale LANG=ru_RU.UTF-8
Установка Русской локали для всех переменных окружения:
sudo localectl set-locale LC_ALL=ru_RU.UTF-8
Проверка установки локали:
lacalectl status
Шаг #8: Отключение SElinux
SELinux (англ. Security-Enhanced Linux — Linux с улучшенной безопасностью) — реализация системы принудительного контроля доступа, которая может работать параллельно с классической избирательной системой контроля доступа.
Не смотря на то, что SElinux позволяет улучшить управление безопасностью, он чаще мешает чем приносит реальную пользу, поэтому рекомендую его отключить.
Проверить включен ли SElinux можно командой ниже:
sestatus
Для отключения SElinux отредактируйте файл - /etc/selinux/config
и для директивы SELINUX
установите значение disabled
.
sudo vi /etc/selinux/config
1 2 3 4 5 6 7 8 9 10 11 |
# This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=disabled # SELINUXTYPE= can take one of three two values: # targeted - Targeted processes are protected, # minimum - Modification of targeted policy. Only selected processes are protected. # mls - Multi Level Security protection. SELINUXTYPE=targeted |
После выключения SElinux необходимо перезапустить сервер:
reboot
Заключение
В этой статье я рассказал далеко не обо всех действиях, которые необходимы для полноценной настройки вашего VPS-сервера. Существует еще немало особенностей, которые нужно учесть после установки свежей операционной системы на ваш VPS.