Чтобы VPS был в безопасности, достаточно сделать несколько базовых вещей: войти по SSH-ключу вместо пароля, запретить вход под root, включить firewall с минимумом открытых портов, поставить fail2ban против перебора паролей и настроить автоматические обновления безопасности. Это занимает около часа и закрывает большинство типовых атак, которым подвергается любой сервер с публичным IP. Ниже — пошаговая инструкция для Ubuntu и Debian с пояснениями, зачем нужен каждый шаг.

Почему VPS атакуют с первых минут
Как только сервер получает публичный IP-адрес, его начинают сканировать боты. Они перебирают популярные логины и пароли по SSH, ищут открытые базы данных, панели управления, старые версии CMS. Это не персональная атака на ваш бизнес, а массовый автоматический процесс. Посмотреть, сколько неудачных попыток входа уже было, можно командой:
sudo grep "Failed password" /var/log/auth.log | wc -l
На свежем сервере за сутки там часто сотни и тысячи строк. Важно понимать разделение ответственности: на VPS провайдер отвечает за железо, сеть и виртуализацию, а за операционную систему, программы и доступы — вы. В отличие от виртуального хостинга, где безопасность сервера настраивает провайдер. Если сомневаетесь, нужен ли вам вообще VPS, прочтите сравнение виртуального хостинга и VPS.
Шаг 1. Отдельный пользователь и вход по SSH-ключу
Создайте пользователя с правами sudo
Работать постоянно под root опасно: любая ошибка или скомпрометированный пароль даёт полный контроль над системой. Создайте обычного пользователя с правами sudo:
adduser deploy
usermod -aG sudo deploy
Имя deploy — пример, выберите своё, но не очевидное вроде admin или user. Проверьте, что под новым пользователем работает sudo, прежде чем переходить дальше.
SSH-ключ — это пара файлов: приватный ключ хранится у вас на компьютере, публичный — на сервере. Подобрать ключ перебором практически невозможно, в отличие от пароля.
Создание ключа на своём компьютере
В Linux, macOS и современном Windows (PowerShell) команда одинаковая:
ssh-keygen -t ed25519 -C "my-laptop"
Задайте парольную фразу для ключа — тогда украденный файл ключа сам по себе бесполезен.
Копирование ключа на сервер
ssh-copy-id deploy@IP_СЕРВЕРА
Если ssh-copy-id недоступен (например, в Windows), скопируйте содержимое файла id_ed25519.pub в файл ~/.ssh/authorized_keys на сервере и выставьте права:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
Проверьте вход по ключу в новом окне терминала. Только убедившись, что он работает, переходите к следующему шагу.

Шаг 2. Запретите вход по паролю и под root
Откройте конфигурацию SSH-сервера:
sudo nano /etc/ssh/sshd_config
Найдите и установите параметры:
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
В новых версиях Ubuntu часть настроек может переопределяться файлами в каталоге /etc/ssh/sshd_config.d/ — проверьте их тоже. Затем проверьте конфигурацию и перезапустите службу:
sudo sshd -t
sudo systemctl restart ssh
Важно. Не закрывайте текущую SSH-сессию, пока не проверите вход в новом окне. Если что-то пошло не так, у большинства провайдеров есть веб-консоль (VNC) в панели управления — через неё можно вернуть настройки.
Смена стандартного порта 22 на другой уменьшает шум в логах, но не является защитой сама по себе. Если меняете порт, не забудьте сначала открыть его в firewall.
Шаг 3. Настройте firewall
Правило простое: закрыто всё, кроме того, что действительно нужно снаружи. В Ubuntu удобнее всего использовать UFW:
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 enable
sudo ufw status verbose
База данных MySQL/MariaDB, Redis, панели администрирования не должны быть доступны из интернета. Если к базе нужно подключаться удалённо, разрешите доступ только с конкретного IP:
sudo ufw allow from 203.0.113.10 to any port 3306 proto tcp
Учтите: Docker по умолчанию управляет правилами iptables сам и может открыть порты контейнеров в обход UFW. Если используете Docker, публикуйте порты только на 127.0.0.1 или настраивайте правила отдельно — подробнее в статье Docker на VPS для бизнеса.
Шаг 4. Fail2ban и автоматические обновления
Установите fail2ban
Fail2ban читает логи и временно блокирует IP-адреса, с которых идут повторяющиеся неудачные попытки входа.
sudo apt update
sudo apt install fail2ban
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
В jail.local в секции [sshd] включите защиту и задайте параметры:
[sshd]
enabled = true
maxretry = 5
findtime = 10m
bantime = 1h
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd
Добавьте свой постоянный IP в параметр ignoreip, чтобы случайно не заблокировать самого себя. Fail2ban можно настроить и для nginx, например против перебора страницы входа в админку.
Включите автообновления
Большинство взломов использует уже известные уязвимости, для которых давно вышли исправления. Включите автоматическую установку обновлений безопасности:
sudo apt install unattended-upgrades
sudo dpkg-reconfigure --priority=low unattended-upgrades
Обновления ядра требуют перезагрузки. Проверить, нужна ли она, можно наличием файла /var/run/reboot-required. Планируйте перезагрузку на время минимальной посещаемости. Не забывайте и про прикладной уровень: CMS, плагины, PHP — их нужно обновлять отдельно. Как сделать это без поломок, рассказываем в статье о версии PHP и скорости сайта.

Чек-лист безопасности VPS
| Мера | От чего защищает | Сложность |
|---|---|---|
| SSH-ключи вместо пароля | Подбор пароля, утечка пароля | Низкая |
| Запрет входа под root | Полный захват системы при утечке | Низкая |
| Firewall (UFW) | Доступ к базам, служебным сервисам | Низкая |
| Fail2ban | Массовый перебор, шум в логах | Низкая |
| Автообновления | Известные уязвимости | Низкая |
| Резервные копии вне сервера | Потеря данных, шифровальщики | Средняя |
| Мониторинг и уведомления | Незамеченные сбои и взломы | Средняя |
| HTTPS-сертификат | Перехват данных форм и паролей | Низкая |
Дополнительные меры
Резервные копии
Бэкап на том же сервере не спасёт, если сервер взломают или он выйдет из строя. Храните копии в другом месте — в объектном хранилище S3 или на втором сервере. Простой пример выгрузки базы и синхронизации файлов:
mysqldump -u root -p --single-transaction shop_db > /backup/shop_db.sql
rsync -az /backup/ backup@203.0.113.20:/srv/backups/site/
Подробная схема — в статье о стратегии бэкапов на VPS.
HTTPS и права на файлы
Установите бесплатный сертификат Let’s Encrypt (см. SSL на VPS). Файлы сайта должны принадлежать пользователю веб-сервера с минимально необходимыми правами: каталоги 755, файлы 644, конфигурационные файлы с паролями — 600 или 640.
Принцип минимальных привилегий
- для каждого сайта — отдельный пользователь базы данных с доступом только к своей базе;
- подрядчикам — отдельные учётные записи и ключи, которые удаляются после окончания работ;
- пароли и ключи — в менеджере паролей, а не в мессенджере или почте;
- неиспользуемые сервисы и программы — удалить.
Совет. Раз в квартал проверяйте файл
authorized_keysи список пользователей с sudo. Старые ключи бывших сотрудников и подрядчиков — частая и незаметная дыра.

Где взять VPS с удобным управлением
Базовая безопасность одинаково настраивается у любого провайдера, но удобство сильно различается. Полезно, когда в панели есть веб-консоль для аварийного доступа, снимки дисков (snapshots), сетевой firewall на уровне облака и автоматические бэкапы. Такие функции есть в — подробнее в нашем материале обзор Timeweb и Timeweb Cloud. VPS и выделенные серверы также предлагает . Актуальный набор функций и цены уточняйте на сайтах провайдеров. Если впервые поднимаете сервер, начните со статьи настройка VPS с нуля.
Мы в Pear Advert передаём клиентам сервер уже с этим набором настроек и документом, где описаны доступы и порядок действий при сбое.
Частые вопросы
Нужен ли антивирус на Linux-сервере?
Для веб-сервера важнее своевременные обновления, firewall и контроль доступов. Сканеры вроде ClamAV или специализированные сканеры для CMS полезны для поиска вредоносного кода в файлах сайта, особенно после взлома.
Что делать, если я потерял SSH-ключ?
Зайдите через веб-консоль в панели провайдера, добавьте новый публичный ключ в authorized_keys, а старый удалите. Поэтому важно иметь хотя бы два ключа с разных устройств.
Достаточно ли панели управления вроде ISPmanager для безопасности?
Панель упрощает управление, но сама по себе является ещё одной точкой входа. Закройте доступ к ней по IP и держите её обновлённой. Сравнение панелей — в статье о панелях управления сервером.
Как понять, что сервер взломали?
Признаки: неизвестные процессы с высокой нагрузкой, новые пользователи или ключи, изменённые файлы сайта, рассылка спама с сервера, жалобы провайдера. В таком случае изолируйте сервер, восстановите его из чистого бэкапа и смените все пароли и ключи.
Итог
Безопасность VPS — это не разовая настройка, а несколько простых привычек: ключи вместо паролей, минимум открытых портов, fail2ban, обновления и бэкапы вне сервера. Если не хотите разбираться сами — поможем подобрать и настроить: в рамках услуги аренда сервера и хостинга мы подготовим защищённый сервер и возьмём его обслуживание на себя.
В статье есть партнёрские ссылки: если вы зарегистрируетесь по ним, студия получит вознаграждение, для вас цена не меняется.

