Когда вы арендуете новый виртуальный сервер (VDS/VPS) у хостинг-провайдера, вам выделяется публичный статический IPv4-адрес. Большинство начинающих вебмастеров и разработчиков полагают, что пока на сервере не привязан домен и не запущен сайт, сервер никому не интересен. Это опаснейшее заблуждение: публичное адресное пространство интернета сканируется автоматическими ботнетами непрерывно 24 часа в сутки 7 дней в неделю.
Оставив стандартный пароль пользователя root, вы рискуете обнаружить на следующий день заблокированный хостером сервер за исходящий DDoS-трафик, внедренный скрытый криптомайнер XMRig или зашифрованные файлы баз данных. В этом руководстве мы пройдем пошаговый инженерный чек-лист базового харденинга (Server Hardening) чистой операционной системы Ubuntu 24.04 LTS, который займет всего 15 минут и сделает ваш VDS практически неуязвимым для массовых автоматизированных атак.
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
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 Гбит/с
Selectel Cloud VPS
Облачные KVM-серверы с аппаратной защитой от сетевого флуда (L3/L4), дата-центры Tier III в Москве и Санкт-Петербурге, порты 1 Гбит/с и высокоскоростные NVMe-накопители.
Timeweb Cloud VDS
Мощные серверы с частотой ядер до 5.0 GHz, встроенный фаервол на уровне инфраструктуры хостинга, двухфакторная аутентификация панели (2FA) и поминутная оплата.
Beget VPS
Мгновенный запуск Ubuntu 24.04 LTS, автоматические ежедневные бэкапы диска, изолированные приватные сети (VPC) между серверами и русскоязычная поддержка 24/7.
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 →