Безопасность и Защита 9 мин чтения 2026-08-28

Как защитить новый VDS от взлома в первые 15 минут: пошаговый чек-лист харденинга Ubuntu 24.04 LTS

Полный чек-лист базовой защиты нового VDS на Ubuntu 24.04 LTS: безопасный вход без root, Ed25519 SSH-ключи, настройка межсетевого экрана UFW, защита от брутфорса Fail2ban, изоляция /dev/shm и автообновления.

Инженерная редакция SysKit Проверено инженерами SysKit.ru

Когда вы арендуете новый виртуальный сервер (VDS/VPS) у хостинг-провайдера, вам выделяется публичный статический IPv4-адрес. Большинство начинающих вебмастеров и разработчиков полагают, что пока на сервере не привязан домен и не запущен сайт, сервер никому не интересен. Это опаснейшее заблуждение: публичное адресное пространство интернета сканируется автоматическими ботнетами непрерывно 24 часа в сутки 7 дней в неделю.

Оставив стандартный пароль пользователя root, вы рискуете обнаружить на следующий день заблокированный хостером сервер за исходящий DDoS-трафик, внедренный скрытый криптомайнер XMRig или зашифрованные файлы баз данных. В этом руководстве мы пройдем пошаговый инженерный чек-лист базового харденинга (Server Hardening) чистой операционной системы Ubuntu 24.04 LTS, который займет всего 15 минут и сделает ваш VDS практически неуязвимым для массовых автоматизированных атак.

💡
Совет инженера: Никогда не выполняйте настройку безопасности через единственную SSH-сессию. Держите параллельно открытое окно терминала или веб-консоль (VNC / Emergency Console) в личном кабинете хостинга до тех пор, пока не убедитесь, что новый пользователь успешно подключается по SSH-ключу с правами sudo.

1. Анатомия атак: что происходит с новым сервером в первые 10 минут

Сразу после развертывания инстанса VDS попадает в прицел глобальных сканеров (Shodan, Censys, masscan, ZMap) и сотен зараженных хостов червей-ботнетов. Если открыть системный журнал аутентификации sudo journalctl -u ssh -f или посмотреть /var/log/auth.log, уже через 10–15 минут вы увидите непрерывный поток строк Failed password for invalid user admin/root/test/ubuntu from <IP>.

Вектор атаки Источник и механизм Последствия без защиты Инженерное решение
Словарный брутфорс SSH (Port 22) Ботнеты Mirai, подбор по словарям rockyou Полный root-доступ, кража данных, майнинг Ed25519 ключи + PermitRootLogin no
Слепое сканирование портов Поиск открытых портов Redis (6379), MySQL (3306), Docker (2375) Удаленное выполнение кода без паролей UFW: Default Deny входящих
0-day эксплойты дистрибутива Уязвимости в OpenSSL, OpenSSH, libc, ядре Linux Локальная эскалация привилегий unattended-upgrades для автопатчинга
Запуск полезной нагрузки из /dev/shm Загрузка ELF-бинарников в RAM-папки с правами записи Скрытое присутствие руткитов в памяти Монтирование /dev/shm с noexec, nosuid

Кроме того, перед началом работы крайне полезно проверить «чистоту» выданного вам хостингом IP-адреса через наш инструмент Проверка IP в спам-базах DNSBL. Если предыдущий арендатор занимался спамом или сканированием, IP может находиться в блэклистах Spamhaus или Barracuda.

2. Шаг 1: Создание sudo-пользователя и генерация Ed25519 SSH-ключей

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

1. Создание пользователя на сервере:

# Создаем пользователя deploy (или ваше имя) с домашней директорией и командным шеллом bash
sudo adduser deploy

# Добавляем созданного пользователя в группу администраторов sudo
sudo usermod -aG sudo deploy

Для надежного пароля пользователя используйте стойкий криптостойкий пароль от 20 символов без словарных слов — его можно быстро сгенерировать через Генератор надежных паролей SysKit.

2. Генерация криптостойкого SSH-ключа на локальном компьютере:

Забудьте про устаревшие RSA 2048/4096 бит. Стандартом современной криптографии является алгоритм Ed25519 (эллиптические кривые): он обеспечивает наивысшую скорость рукопожатия, минимальный размер ключа и надежную защиту от атак по побочным каналам. На своем локальном компьютере (в терминале macOS, Linux или PowerShell Windows) выполните:

# Генерируем современную ключевую пару Ed25519
ssh-keygen -t ed25519 -a 100 -C "admin@my-vds"

# Копируем публичный ключ на удаленный сервер новому пользователю
ssh-copy-id -i ~/.ssh/id_ed25519.pub deploy@IP_СЕРВЕРА

Если утилита ssh-copy-id недоступна (например, в стандартном Windows CMD), вы можете вручную добавить строку из файла ~/.ssh/id_ed25519.pub в файл /home/deploy/.ssh/authorized_keys на сервере с выставлением жестких прав доступа: chmod 700 /home/deploy/.ssh && chmod 600 /home/deploy/.ssh/authorized_keys.

3. Шаг 2: Харденинг SSH-демона и отключение паролей

Теперь, когда вход по ключу настроен, необходимо намертво заблокировать возможность входа по паролям и запретить прямой вход для суперпользователя root. В Ubuntu 24.04 LTS конфигурация OpenSSH разделена на файлы в каталоге /etc/ssh/sshd_config.d/. Не редактируйте основной монолитный файл sshd_config — создайте отдельный приоритетный дроп-ин конфиг.

Создайте файл /etc/ssh/sshd_config.d/99-hardening.conf:

# Полный запрет входа суперпользователю root по SSH
PermitRootLogin no

# Тотальное отключение парольной авторизации
PasswordAuthentication no
PermitEmptyPasswords no
KbdInteractiveAuthentication no

# Разрешаем только криптографические ключи
AuthenticationMethods publickey

# Ограничение попыток авторизации до разрыва соединения
MaxAuthTries 3
MaxSessions 4

# Защита от зависших сессий (KeepAlive каждые 5 минут)
ClientAliveInterval 300
ClientAliveCountMax 2

# Отключение опасных туннелей и проброса X11
X11Forwarding no
AllowTcpForwarding yes
AllowAgentForwarding no
⚠️
Важное изменение в Ubuntu 24.04 LTS: OpenSSH теперь управляется через ssh.socket (systemd socket activation), а не через постоянный демон ssh.service. Если вы захотите изменить порт SSH (например, с 22 на нестандартный 2222), просто поменять директиву Port в конфиге недостаточно! Потребуется переопределить сокет командой sudo systemctl edit ssh.socket и указать директиву ListenStream=2222. Подробный рецепт описан в нашей pSEO-конфигурации Харденинг sshd_config и смена порта.

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

# Проверка синтаксиса sshd (должна вернуть пустоту без ошибок)
sudo sshd -t

# Перезапуск службы SSH в Ubuntu 24.04
sudo systemctl restart ssh
💡
Тест перед выходом: Не закрывая текущую консоль, откройте новое окно терминала на вашем компьютере и попробуйте подключиться: ssh deploy@IP_СЕРВЕРА. Убедитесь, что вход по ключу прошел без запроса пароля, а команда sudo whoami выдает root.

4. Рекомендуемые защищенные VDS-провайдеры

Фундамент серверной безопасности — это физическая инфраструктура дата-центра, аппаратная фильтрация мусорного L3/L4 трафика и надежная KVM-виртуализация без оверселлинга. Для проектов, требующих стабильности и чистого белого IP, мы рекомендуем следующие проверенные хостинги:

Рекомендуемые VDS-провайдеры

Отказоустойчивые сервера с быстрыми NVMe и каналом до 1 Гбит/с

Tier III и сетевой щит
🔷

Selectel Cloud VPS

Облачные KVM-серверы с аппаратной защитой от сетевого флуда (L3/L4), дата-центры Tier III в Москве и Санкт-Петербурге, порты 1 Гбит/с и высокоскоростные NVMe-накопители.

Конфигурация
от 1 vCPU / 1 GB RAM / 15 GB NVMe
Высокая частота CPU

Timeweb Cloud VDS

Мощные серверы с частотой ядер до 5.0 GHz, встроенный фаервол на уровне инфраструктуры хостинга, двухфакторная аутентификация панели (2FA) и поминутная оплата.

Конфигурация
от 1 vCPU / 2 GB RAM / 30 GB NVMe
Удобство и автоснапшоты
🟠

Beget VPS

Мгновенный запуск Ubuntu 24.04 LTS, автоматические ежедневные бэкапы диска, изолированные приватные сети (VPC) между серверами и русскоязычная поддержка 24/7.

Конфигурация
от 1 vCPU / 2 GB RAM / 35 GB NVMe

5. Шаг 3: Настройка межсетевого экрана UFW (Zero Trust)

По умолчанию чистый сервер слушает входящие соединения на всех открытых интерфейсах. Межсетевой экран UFW (Uncomplicated Firewall) позволяет реализовать принцип нулевого доверия: запретить любые входящие соединения, оставив открытыми только те служебные порты, которые вы явно разрешили.

# 1. Устанавливаем UFW (если еще не установлен)
sudo apt update && sudo apt install -y ufw

# 2. Сбрасываем правила по умолчанию: запрет всех входящих, разрешение всех исходящих
sudo ufw default deny incoming
sudo ufw default allow outgoing

# 3. КРИТИЧЕСКИ ВАЖНО: Разрешаем SSH ДО включения фаервола!
# Если вы используете стандартный порт 22:
sudo ufw allow 22/tcp comment 'SSH'

# Включаем встроенное ограничение частоты подключений UFW (rate limit для защиты от брутфорса)
sudo ufw limit 22/tcp comment 'SSH Rate Limit'

# 4. Разрешаем веб-порты для будущего сайта (HTTP / HTTPS)
sudo ufw allow 80/tcp comment 'HTTP'
sudo ufw allow 443/tcp comment 'HTTPS'

# 5. Активируем фаервол (нажмите 'y' при запросе подтверждения)
sudo ufw enable

# 6. Проверяем активные правила
sudo ufw status verbose

После активации UFW любой сканер портов, пытающийся стучаться в стандартные порты баз данных (MySQL 3306, PostgreSQL 5432, Redis 6379), получит немедленный сброс соединения без утечки информации наружу. Сверить правила фаервола можно с нашей конфигурацией Скрипт настройки файрвола UFW для веб-сервера.

6. Шаг 4: Защита от брутфорса через Fail2ban с инкрементом бана

Даже с отключенными паролями автоматические боты продолжают отправлять тысячи некорректных SSH-запросов, нагружая процессор и забивая системные журналы. Fail2ban отслеживает журналы в реальном времени и временно блокирует IP-адреса нарушителей на уровне сетевого фильтра (iptables / nftables).

1. Установка пакета:

sudo apt install -y fail2ban

2. Создание локальной конфигурации /etc/fail2ban/jail.local:

В современных дистрибутивах Ubuntu 24.04 лог auth.log часто заменяется прямой записью в системный журнал systemd. Поэтому необходимо явно указать backend = systemd и включить прогрессивный бан нарушителей (bantime.increment) — каждый повторный взломщик блокируется на всё больший срок (от 1 часа до месяца):

[DEFAULT]
# Базовое время бана — 1 час
bantime = 1h

# Окно поиска попыток — 10 минут
findtime = 10m

# Количество неудачных попыток до блокировки
maxretry = 4

# Экспоненциальный рост времени бана для постоянных атакующих ботов
bantime.increment = true
bantime.rndtime = 10m
bantime.maxtime = 4w

# Белый список доверенных IP (всегда локалхост, можно добавить свой статический домашний/офисный IP)
ignoreip = 127.0.0.1/8 ::1

[sshd]
enabled = true
port = ssh
backend = systemd
maxretry = 3

3. Запуск и проверка работы Fail2ban:

# Перезапускаем сервис Fail2ban
sudo systemctl restart fail2ban
sudo systemctl enable fail2ban

# Проверяем статус джейла SSH и количество забаненных ботов
sudo fail2ban-client status sshd

Смотрите также расширенный вариант джейла под защиту Nginx и WordPress в конфигурации Fail2ban jail.local Full-Stack.

7. Шаг 5: Автоматические патчи безопасности (unattended-upgrades)

В операционной системе Linux регулярно обнаруживаются уязвимости в базовых библиотеках (например, glibc, OpenSSL, curl, ядро). Сидеть и обновлять пакеты вручную каждый вечер — плохая практика. Пакет unattended-upgrades автоматически устанавливает исключительно обновления безопасности из официального репозитория Canonical, не затрагивая конфигурационные файлы работающих сервисов.

# 1. Устанавливаем пакет автообновлений
sudo apt install -y unattended-upgrades update-notifier-common

# 2. Включаем автоматический режим
sudo dpkg-reconfigure --priority=low unattended-upgrades

Конфигурация по умолчанию в /etc/apt/apt.conf.d/50unattended-upgrades уже настроена на ветку ${distro_codename}-security. При необходимости автоматической перезагрузки сервера глубокой ночью (например, при обновлении ядра) раскомментируйте строчки:

Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "04:00";

8. Шаг 6: Харденинг оперативной памяти (/dev/shm) и аудит портов

Вредоносные скрипты и веб-шеллы при взломе веб-приложений часто пытаются скачать скомпилированный бинарный бэкдор в директорию разделяемой памяти /dev/shm или /tmp и запустить его оттуда, так как эти каталоги имеют права на запись 777. Чтобы заблокировать эту возможность, смонтируйте /dev/shm с флагами noexec (запрет исполнения файлов) и nosuid.

Добавьте в конец файла /etc/fstab следующую строчку:

tmpfs /dev/shm tmpfs defaults,noexec,nosuid,nodev 0 0

Примените изменения без перезагрузки сервера:

sudo mount -o remount /dev/shm

Финальный аудит открытых сокетов:

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

sudo ss -tulpn

В выводе должны присутствовать только процессы sshd (порт 22) и при необходимости веб-сервер. Любые базы данных (MySQL, Redis, PostgreSQL) обязаны слушать только локальный интерфейс 127.0.0.1 или сокет, но ни в коем случае не 0.0.0.0.

Затем обязательно проверьте ваш внешний IP через онлайн-инструмент Сканер открытых портов SysKit. Он отправит SYN-пакеты снаружи и подтвердит, что фаервол UFW надежно отбрасывает весь непрошенный трафик.

9. Чек-лист безопасности и типичные фатальные ошибки

✅ Чек-лист выполненного харденинга:

  • Создан непривилегированный пользователь с доступом в группу sudo.
  • Сгенерированы современные криптографические ключи Ed25519.
  • Прямой логин root и авторизация по паролям полностью выключены в sshd_config.d.
  • Межсетевой экран UFW активирован по принципу default deny, открыты только 22, 80 и 443.
  • Fail2ban запущен с драйвером systemd и инкрементальным прогрессивным баном ботов.
  • Включены автоматические патчи безопасности ядра и системы через unattended-upgrades.
  • Каталог /dev/shm перемонтирован с флагом noexec.
  • Сервер протестирован внешним сетевым сканером портов.

⚠️ Ошибки, которые приводят к потере доступа:

  • Включение UFW без правила allow для SSH: Если активировать фаервол до добавления порта 22, ваша активная сессия оборвется, и доступ к серверу будет заблокирован.
  • Закрытие первой root-сессии до проверки ключа: Всегда держите активное соединение открытым, пока не проверите вход нового пользователя во второй вкладке терминала.
  • Смена порта SSH в Ubuntu 24.04 без правки ssh.socket: Из-за socket-activation порт останется старым либо демон вообще перестанет отвечать.
  • Монтирование /tmp с флагом noexec без проверки пакетного менеджера: Некоторые скрипты установки пакетов (apt) создают временные исполняемые файлы в /tmp. Для /dev/shm это безопасно, но для /tmp требует тонкой настройки.

10. Резюме и вердикт

Базовый харденинг — это обязательная гигиеническая процедура, которую необходимо проводить сразу же после активации любого VDS. Потратив всего 15 минут на отключение парольного доступа, настройку ключей Ed25519, запуск фаервола UFW и автоматического бана ботов в Fail2ban, вы срезаете 99.9% рисков автоматического взлома и превращаете свой сервер в неприступную крепость.

Для генерации надежных паролей баз данных и сервисов воспользуйтесь нашим Генератором паролей, проверьте чистоту IP через Проверку в спам-базах DNSBL, а сканирование портов снаружи выполните через Сканер портов SysKit.

Нужен надежный и защищенный VDS сервер?

Арендуйте производительный KVM-сервер с защитой от L3/L4 сетевых атак, быстрыми NVMe дисками и каналом 1 Гбит/с на Selectel всего от 200 ₽ в месяц.

Развернуть защищенный VDS на Selectel →

Вопросы и ответы (FAQ)

Популярные вопросы вебмастеров и сисадминов по данной теме

Зачем менять стандартный порт SSH 22, если парольная авторизация уже отключена?
Смена порта не делает сервер криптографически более стойким, но снижает «фоновый шум» в системных журналах auth.log на 95-98%. Автоматические ботнеты сканируют только стандартный порт 22, игнорируя нестандартные порты (например, 2222 или 48220), что экономит ресурсы процессора и объем логов.
Что делать, если я случайно заблокировал собственный IP через UFW или Fail2ban?
У каждого надежного провайдера (Selectel, Timeweb, Beget) в панели управления есть функция VNC / Web-консоль (Emergency Console). Она подключается напрямую к виртуальному монитору сервера в обход сетевого стека SSH. Войдите через веб-консоль и выполните команду 'sudo ufw disable' или 'sudo fail2ban-client unban <ВАШ_IP>'.
Почему в Ubuntu 24.04 Fail2ban иногда не видит неудачные попытки входа в /var/log/auth.log?
Начиная с Ubuntu 24.04 LTS по умолчанию больше не устанавливается классический демон rsyslog, и файл /var/log/auth.log может отсутствовать или не обновляться. Все события логируются напрямую в systemd-journald. Поэтому в конфигурации jail.local для секции [sshd] критически важно прописывать директиву 'backend = systemd'.

Читайте также в блоге SysKit

Смежные руководства и полезные технические статьи