безопасный VPS

В этом посте будет раскрыт и рассмотрен процесс создания и настройки безопасного VPS сервера на базе Ubuntu 20 LTS для последующей установки на него сайта на базе WordPress. Так же эта запись открывает цикл статей о создании производительного сайта на базе CMS WordPress. Сразу набросаю план записей, которые выйдут в ближайшее время…

  1. Настройка безопасного VPS сервера.
  2. Установка Nginx, PHP, WP-CLI и MariaDB.
  3. Настройка Nginx для сайта WordPress.
  4. Кэширование объектов и кэширование страниц.
  5. Cron, отправка электронной почты и резервное копирование.
  6. Усиление безопасности Nginx.
  7. Перенос WordPress на новый сервер.
  8. Мониторинг и текущее обслуживание.
  9. Полная конфигурация Nginx.

Я не буду Вам навязывать какую-либо определенную компанию предоставляющую услуги хостинга, каждый в праве выбирать что ему больше по душе и по карману. Иногда выбор той и ли иной компании ограничивается рамками, правовыми нормами. Меня устраивает сервис и стоимость услуг компании MVPS, вы можете поддерживать отечественный бизнес. Давайте приступим.

Настраиваем безопасный VPS сервер для WordPress

Для небольшого личного блога, как в принципе и для небольшого интернет магазина на базе WordPress будет достаточно такой конфигурации VPS. Вам также следует выбрать регион, наиболее близкий к большинству вашей базовой аудитории. То есть, если основной аудиторией вашего сайта являются жители европейской части России, СНГ или Европы, то желательно чтобы сервер располагался в Москве/Санкт-Петербурге или ближайшей стране Европы, а если вы делаете региональный сайт для жителей Владивостока, то желательно выбрать Японии или Китай.

Первый вход

Как только завершится установка операционной системы на ваш безопасный VPS нам нужно к нему подключиться по протоколу ssh от имени пользователя root используя публичный IP адрес сервера. Если на вашем компьютере или ноутбуке установлен Linux то вам, чтобы подключиться  достаточно открыть терминал и написать команду :

ssh root@194.31.***.***
Подключение к VPS

Пользователям Windows можно использовать любой SSH клиент, к примеру Putty, настройки будут выглядеть примерно таким образом:

Настраиваем безопасный VPS сервер для WordPress

При первом входе в систему, возможно, вам предложат изменить пароль суперпользователя (root). Введите вначале старый пароль, а затем придумайте и введите новый два раза. Несмотря на то, что мы в дальнейшем запретим подключаться от имени супер пользователя по SSH, нужно придумать и установить для него достаточно сложный пароль. Так как для настроек и эксплуатации  сервера он нам пригодится.

Установка имени хоста

Теперь, когда вы вошли на сервер, давайте установим имя хоста и полное доменное имя (FQDN). Имя хоста должно быть уникальным, но не требует какого-либо отношения к сайтам, на которых будет размещаться хост. Например, некоторые люди предпочитают называть свои серверы именами астрономических объектов.

Правильная установка имени хоста и полного доменного имени значительно упростит подключение к вашему серверу в будущем, поскольку вам не придется каждый раз запоминать IP-адрес. Чтобы установить имя хоста, выполните следующие команды (доменное имя, естественно подставляйте свое):

echo "Your domain.RU" > /etc/hostname
hostname -F /etc/hostname
Установка имени хоста

Чтобы подключиться к серверу с использованием вашего имени хоста, вам необходимо обновить настройки DNS вашего доменного имени. Войдите в панель управления DNS и создайте новую запись A. Теперь, если вы выйдете из текущего сеанса SSH, вы сможете подключиться к серверу, используя новое имя хоста. Однако вам может потребоваться некоторое время для применения настроек DNS.

ssh root@YourDomainName

Установка часового пояса

Чтобы установить часовой пояс сервера, вы должны настроить пакет tzdata. Это обеспечит отображение в файлах системного журнала правильной даты и времени. Следующая команда позволит вам настроить пакет tzdata:

dpkg-reconfigure tzdata

Отобразится простой графический интерфейс, позволяющий выбрать свой географический регион и часовой пояс:

настройки часового пояса на сервере

После завершения новый выбранный часовой пояс будет отображаться вместе с текущим временем и датой:

Настраиваем безопасный VPS сервер для WordPress

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

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

apt update

После завершения давайте обновим все установленные на данный момент пакеты. В процессе отобразится сколько места займут обновления:

apt upgrade

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

Вы можете удалить устаревшие пакеты, выполнив следующую команду:

apt autoremove

Автоматические обновления безопасности

Жизненно важно обновлять программное обеспечение сервера, чтобы исправлять уязвимости программного обеспечения. К счастью, Ubuntu может автоматически выполнять обновления программного обеспечения. Однако, важно помнить, что это удобство может быть довольно опасным, и рекомендуется включать только обновления безопасности. Это будет автоматически исправлять новые уязвимости по мере их обнаружения, например ошибку Heartbleed в 2014 году. Несущественные обновления программного обеспечения следует тестировать на промежуточном сервере перед их установкой, чтобы не вносить критические изменения, которые могут случайно отключить ваши сайты. В некоторых системах эта функция может быть включена автоматически. Если нет или вы не уверены, выполните следующие действия:

Установите пакет unattended-upgrades:

apt install unattended-upgrades

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

dpkg-reconfigure unattended-upgrades

Во время выполнения этой команды на появившемся экране выберите Yes и нажмите клавишу Ввод.

nano /etc/apt/apt.conf.d/50unattended-upgrades

Убедитесь, что источник безопасности разрешен, а все остальные удалены или закомментированы:

// Automatically upgrade packages from these (origin:archive) pairs
//
// Note that in Ubuntu security updates may pull in new dependencies
// from non-security sources (e.g. chromium). By allowing the release
// pocket these get automatically pulled in.
Unattended-Upgrade::Allowed-Origins {
        "${distro_id}:${distro_codename}";
        "${distro_id}:${distro_codename}-security";
        // Extended Security Maintenance; doesn't necessarily exist for
        // every release and this system may not have it installed, but if
        // available, the policy for updates is such that unattended-upgrades
        // should also install from here by default.
        "${distro_id}ESMApps:${distro_codename}-apps-security";
        "${distro_id}ESM:${distro_codename}-infra-security";
//      "${distro_id}:${distro_codename}-updates";
//      "${distro_id}:${distro_codename}-proposed";
//      "${distro_id}:${distro_codename}-backports";
};

Вы также можете настроить, должна ли система автоматически перезагружаться, если это требуется для вступления обновления в силу. По умолчанию сервер перезагружается сразу после установки обновления, но вы можете указать время или полностью отключить его, указав «false».

Если ваш сервер перезагружается, вы должны не забыть запустить все критически важные службы. По умолчанию Nginx, PHP и MariaDB автоматически перезапускаются, но ознакомьтесь с этой веткой Stack Overflow о том, как добавить дополнительные службы при необходимости.

Наконец, установите, как часто должны запускаться автоматические обновления:

nano /etc/apt/apt.conf.d/20auto-upgrades

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

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

Пришло время добавить нового пользователя на ваш сервер. Это делается по двум причинам:

  1. Позже в этой главе мы собираемся отключить доступ по SSH для пользователя root, что означает, что вам понадобится другая учетная запись пользователя для доступа к вашему серверу.
  2. Пользователь root имеет очень широкие привилегии, которые позволят вам выполнять потенциально деструктивные команды. Поэтому рекомендуется создать новую учетную запись пользователя с более ограниченными разрешениями для повседневного использования. Этот новый пользователь будет добавлен в группу sudo, чтобы вы могли выполнять команды, требующие повышенных разрешений, но только при необходимости.

Сначала создайте нового пользователя:

adduser имя_пользователя

Вам будет предложено ввести основную информацию о пользователе и выбрать пароль. Как упоминалось ранее, этот пароль должен быть сложным. Затем вам нужно добавить нового пользователя в группу sudo:

usermod -a -G sudo имя_пользователя

Теперь убедитесь, что ваша новая учетная запись работает, выйдя из текущего сеанса SSH и запустив новый:

logout

Затем войдите в систему с новой учетной записью:

ssh имя_пользователя@доменное_имя

Несложный брандмауэр

Брандмауэр обеспечивает дополнительный уровень безопасности для вашего сервера, блокируя входящий сетевой трафик. Я собираюсь продемонстрировать брандмауэр iptables, который наиболее часто используется в Linux и установлен по умолчанию. Чтобы упростить процесс добавления правил к брандмауэру, я предпочитаю использовать пакет ufw, что означает несложный брандмауэр. Пакет ufw обычно устанавливается по умолчанию, но если у вас он не установлен, установите его с помощью следующей команды:

sudo apt install ufw

Теперь, когда у вас есть доступ к ufw, вы можете начать добавлять правила по умолчанию, которые запрещают весь входящий трафик и разрешают весь исходящий трафик. А пока добавьте порты для SSH (22), HTTP (80) и HTTPS (443):

sudo ufw allow ssh
sudo ufw allow http
sudo ufw allow https

Чтобы просмотреть, какие правила будут добавлены в брандмауэр, введите следующую команду:

sudo ufw show added

Настраиваем безопасный VPS сервер для WordPress

Перед включением правил брандмауэра убедитесь, что порт для SSH находится в списке добавленных правил — иначе вы не сможете подключиться к своему серверу! Порт по умолчанию — 22. Если все выглядит правильно, включите конфигурацию:

sudo ufw enable

Чтобы подтвердить, что новые правила активны, введите следующую команду:

sudo ufw status verbose

Вы увидите, что весь входящий трафик запрещен по умолчанию, за исключением портов 22, 80 и 443 как для IPv4, так и для IPv6, что является хорошей отправной точкой для большинства серверов.

Fail2ban

Fail2ban — это инструмент, который работает вместе с вашим брандмауэром. Он работает, отслеживая попытки вторжения на ваш сервер и блокируя хост-нарушитель на определенный период времени. Он делает это, добавляя любые IP-адреса, которые показывают вредоносную активность, в правила вашего брандмауэра.

Программа Fail2ban не установлена ​​по умолчанию, поэтому давайте установим ее сейчас:

sudo apt install fail2ban

Конфигурация по умолчанию должна быть достаточной, при которой хост будет заблокирован на 10 минут после 6 неудачных попыток входа в систему через SSH. Чтобы убедиться, что служба fail2ban работает, введите следующую команду:

sudo service fail2ban start

Работа выполнена! Теперь у вас есть хорошая платформа для начала создания веб-сервера WordPress и вы предприняли необходимые шаги для предотвращения несанкционированного доступа. Однако важно помнить, что безопасность — это непрерывный процесс, и вы должны помнить о следующих моментах:

  • Устанавливайте только необходимое программное обеспечение из проверенных источников.
  • Регулярно устанавливайте обновления программного обеспечения и исправления безопасности.
  • Обеспечьте соблюдение надежных паролей с помощью такого инструмента, как 1Password.
  • Подумайте, как бы вы получили доступ к серверу, если бы вас заблокировали.

На этом первая глава о настройке безопасного VPS окончена. В следующей главе я проведу вас через установку Nginx, PHP-FPM и MariaDB.