11 ИЮЛ

Полное руководство по настройке VPS на Contabo (Ubuntu 24.04 LTS) и развертыванию безопасной Docker-инфраструктуры

11 июля, 2026 Автор: Timur Просмотров: 4 Рейтинг 5.00 (1 Голос)
Оцените статью:
5.00 (1)

Краткое содержание (TLDR): Исчерпывающая пошаговая инструкция по настройке чистого виртуального выделенного сервера (VPS/VDS) на базе Ubuntu 24.04 LTS. В руководстве подробно описан процесс защиты сервера (настройка SSH-ключей, UFW, Fail2ban), установка Docker и развертывание изолированной инфраструктуры через Обратный прокси (Nginx Proxy Manager) с автоматическим выпуском бесплатных SSL-сертификатов Let’s Encrypt и защитой через Cloudflare.

Введение: Подготовка к работе с сервером

После покупки виртуального сервера (например, на хостинге Contabo), вы получаете его публичный IP-адрес и пароль суперпользователя (root). Базовое управление выполняется по протоколу SSH через командную строку (Terminal в macOS/Linux или PowerShell в Windows).

Часть 1. Первое подключение по SSH и решение конфликтов ключей

1.1 Как исправить ошибку «REMOTE HOST IDENTIFICATION HAS CHANGED»

Если выданный вам IP-адрес ранее использовался на вашем компьютере для подключения к другой операционной системе, SSH-клиент заблокирует вход и выдаст предупреждение о возможной атаке (man-in-the-middle).

Чтобы сбросить кэш ключей в Windows, выполните в PowerShell команду:

ssh-keygen -R <IP_адрес_сервера>

Пример использования: ssh-keygen -R 161.97.156.44

1.2 Первичная авторизация по паролю root

Для первого входа на сервер используйте следующую команду:

ssh root@<IP_адрес_сервера>

Система запросит подтверждение доверия новому хосту — напишите yes. Затем вставьте пароль root, полученный в приветственном письме от хостинг-провайдера (внимание: в целях безопасности вводимые символы пароля в консоли Linux не отображаются).

Часть 2. Создание sudo-пользователя и делегирование прав

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

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

Выполните команду добавления пользователя:

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

Задайте надежный пароль и обязательно запомните его — он будет запрашиваться при выполнении административных команд. Заполнение контактных данных (Full Name и т.д.) можно пропустить клавишей Enter.

2.2 Наделение правами администратора (группа sudo)

Добавьте нового пользователя в системную группу администраторов sudo:

usermod -aG sudo <имя_пользователя>

2.3 Перенос публичного SSH-ключа

Для безопасной авторизации скопируйте ваш публичный SSH-ключ в директорию нового пользователя и назначьте правильные права доступа (permissions):

mkdir -p /home/<имя_пользователя>/.ssh
cp ~/.ssh/authorized_keys /home/<имя_пользователя>/.ssh/
chown -R <имя_пользователя>:<имя_пользователя> /home/<имя_пользователя>/.ssh
chmod 700 /home/<имя_пользователя>/.ssh
chmod 600 /home/<имя_пользователя>/.ssh/authorized_keys

Часть 3. Жесткая защита SSH-сервера и блокировка паролей

Чтобы исключить риск взлома сервера методом автоматического перебора паролей (brute-force атаки), необходимо полностью отключить парольную аутентификацию и прямой доступ для root.

3.1 Конфигурация основного демона SSH (sshd_config)

Откройте главный конфигурационный файл SSH:

sudo nano /etc/ssh/sshd_config

Найдите и измените следующие директивы (уберите символ # в начале строки, если он присутствует):

PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
  • PermitRootLogin no — блокирует авторизацию под суперпользователем.
  • PasswordAuthentication no — отключает вход по обычным паролям.
  • KbdInteractiveAuthentication no — запрещает интерактивный ввод.

Сохраните изменения в nano: Ctrl + O -> Enter -> Ctrl + X.

3.2 Отключение переопределений Cloud-Init (Особенность Contabo)

В современных дистрибутивах Ubuntu параметры безопасности могут переопределяться облачным инициализатором cloud-init. Обязательно проверьте файл:

sudo nano /etc/ssh/sshd_config.d/50-cloud-init.conf

Если параметр PasswordAuthentication установлен в yes, измените его:

PasswordAuthentication no

3.3 Применение настроек SSH

Перезапустите демон SSH, чтобы новые правила вступили в силу:

sudo systemctl restart sshd

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

ssh -i "C:уть\к\приватному_ключу" <имя_пользователя>@<IP_адрес_сервера>

Попытка войти без правильного SSH-ключа мгновенно вернет ошибку Permission denied (publickey).

Часть 4. Базовая настройка безопасности сервера (UFW и Swap)

4.1 Настройка сетевого экрана UFW (Uncomplicated Firewall)

Оставьте открытыми только те порты, которые необходимы для работы веб-сервера и SSH:

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 81/tcp
sudo ufw enable

4.2 Защита от спам-ботов с помощью Fail2ban

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

sudo apt install fail2ban -y
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

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

Для корректной синхронизации системных логов переведите время сервера на UTC:

sudo timedatectl set-timezone UTC

4.4 Выделение виртуальной памяти (Swap-файл 2GB)

Создание файла подкачки предотвратит падение приложений при пиковых нагрузках (Out of Memory):

sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

Часть 5. Развертывание Docker и Nginx Proxy Manager

Docker позволяет контейнеризировать и полностью изолировать веб-проекты (сайты, БД). Маршрутизацию трафика обеспечит Reverse Proxy (Обратный прокси).

5.1 Установка Docker на Ubuntu 24.04

sudo apt update
sudo apt install docker.io docker-compose -y
sudo systemctl enable docker
sudo systemctl start docker
sudo usermod -aG docker $USER

(Перезайдите в SSH-сессию, чтобы применение прав группы Docker вступило в силу).

5.2 Создание виртуальной сети Docker

Создайте внутреннюю bridge-сеть для общения контейнеров без вывода портов наружу:

docker network create proxy-network

5.3 Установка Nginx Proxy Manager (NPM)

NPM — это веб-интерфейс для маршрутизации трафика и работы с Let’s Encrypt.

mkdir -p ~/docker/npm
cd ~/docker/npm
nano compose.yaml

Вставьте манифест Docker Compose:

services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    container_name: nginx-proxy-manager
    restart: unless-stopped
    ports:
      - '80:80'
      - '81:81'
      - '443:443'
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
    networks:
      - proxy-network

networks:
  proxy-network:
    external: true

Запустите контейнер:

docker-compose up -d

Веб-интерфейс доступен по адресу: http://<IP_адрес_сервера>:81. (Логин по умолчанию: admin@example.com, Пароль: changeme).

Часть 6. Развертывание проектов в Docker (на примере WordPress)

6.1 Настройка DNS-записей в Cloudflare

  1. В панели управления DNS Cloudflare создайте A-запись (Name = @, IPv4 = IP_вашего_сервера).
  2. Создайте CNAME-запись для www (Target = ваш_домен).
  3. Важно: Временно отключите проксирование (серое облако DNS Only) для успешной генерации SSL-сертификата Let’s Encrypt.

6.2 Создание Docker Compose файла для WordPress и MariaDB

Контейнеры проекта должны подключаться к общей сети proxy-network.

mkdir -p ~/docker/my_project
cd ~/docker/my_project
nano compose.yaml

Обратите внимание: знак $ в паролях обязательно экранируется двойным символом $$!

services:
  db:
    image: mariadb:10.11
    container_name: wp_db_project
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: MySecurePassword$$WithDollar
      MYSQL_DATABASE: wp_database
      MYSQL_USER: wp_db_user
      MYSQL_PASSWORD: MySecurePassword$$WithDollar
    volumes:
      - ./db_data:/var/lib/mysql
    networks:
      - proxy-network

  wordpress:
    image: wordpress:latest
    container_name: wp_app_project
    restart: unless-stopped
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: wp_db_user
      WORDPRESS_DB_PASSWORD: MySecurePassword$$WithDollar
      WORDPRESS_DB_NAME: wp_database
    volumes:
      - ./wp_data:/var/www/html
    networks:
      - proxy-network

networks:
  proxy-network:
    external: true

Запуск проекта:

docker-compose up -d

6.3 Маршрутизация трафика и выпуск SSL-сертификата

  1. В Nginx Proxy Manager перейдите в Hosts -> Proxy Hosts -> Add Proxy Host.
  2. Details: Укажите ваш домен, имя контейнера (в примере wp_app_project) и порт 80. Включите Cache Assets и Block Common Exploits.
  3. SSL: Выберите Request a new SSL Certificate, активируйте Force SSL и согласитесь с правилами Let’s Encrypt.
  4. Нажмите Save.

После выпуска сертификата вернитесь в Cloudflare и активируйте проксирование (оранжевое облако). Режим шифрования в Cloudflare (SSL/TLS -> Overview) должен быть установлен на Full (strict).

Часть 7. Как исправить ошибку Permission Denied в Docker и SFTP

Проблема: При загрузке файлов в папки Docker (volumes) через SFTP (FileZilla) возникает ошибка Permission denied. Если передать права вашему пользователю Linux, доступ к файлам теряет само приложение (например, WordPress не может обновлять плагины).

Причина: Конфликт UID. Веб-сервер внутри контейнера работает под системным пользователем www-data (UID 33), а вы подключаетесь по SFTP под созданным пользователем.

Решение (Синхронизация прав chown/chmod)

Чтобы обе стороны имели полный доступ к файлам (чтение и запись), выполните в терминале SSH:

# 1. Перейдите в директорию с проброшенными файлами проекта (volumes)
cd ~/docker/my_project/wp_data/

# 2. Назначьте веб-сервер (33) владельцем, а вашего SFTP-пользователя - владельцем группы
sudo chown -R 33:<имя_пользователя> .

# 3. Дайте права (чтение, запись, выполнение) владельцу и группе на директории
sudo find . -type d -exec chmod 775 {} \;

# 4. Дайте права на чтение и запись владельцу и группе на все файлы
sudo find . -type f -exec chmod 664 {} \;

Теперь вы можете редактировать файлы через FileZilla, а WordPress сохраняет свои системные права на управление медиа и плагинами.

Конфигуратор параметров VPS

Добавить комментарий Поделиться…

1 комментарий

  1. Привет! Это комментарий.
    Чтобы начать модерировать, редактировать и удалять комментарии, перейдите на экран «Комментарии» в консоли.
    Аватары авторов комментариев загружаются с сервиса Gravatar.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *