Веб-разработка

Безопасность VPS: SSH-ключи, firewall, fail2ban и обновления

Пошаговая инструкция по базовой защите VPS на Ubuntu: SSH-ключи, firewall, fail2ban, обновления и резервные копии.

Безопасность VPS: SSH-ключи, firewall, fail2ban и обновления

Чтобы 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

Проверьте вход по ключу в новом окне терминала. Только убедившись, что он работает, переходите к следующему шагу.

Вход на сервер по SSH-ключу вместо пароля

Шаг 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 Cloud — подробнее в нашем материале обзор Timeweb и Timeweb Cloud. VPS и выделенные серверы также предлагает AdminVPS. Актуальный набор функций и цены уточняйте на сайтах провайдеров. Если впервые поднимаете сервер, начните со статьи настройка VPS с нуля.

Мы в Pear Advert передаём клиентам сервер уже с этим набором настроек и документом, где описаны доступы и порядок действий при сбое.

Частые вопросы

Нужен ли антивирус на Linux-сервере?

Для веб-сервера важнее своевременные обновления, firewall и контроль доступов. Сканеры вроде ClamAV или специализированные сканеры для CMS полезны для поиска вредоносного кода в файлах сайта, особенно после взлома.

Что делать, если я потерял SSH-ключ?

Зайдите через веб-консоль в панели провайдера, добавьте новый публичный ключ в authorized_keys, а старый удалите. Поэтому важно иметь хотя бы два ключа с разных устройств.

Достаточно ли панели управления вроде ISPmanager для безопасности?

Панель упрощает управление, но сама по себе является ещё одной точкой входа. Закройте доступ к ней по IP и держите её обновлённой. Сравнение панелей — в статье о панелях управления сервером.

Как понять, что сервер взломали?

Признаки: неизвестные процессы с высокой нагрузкой, новые пользователи или ключи, изменённые файлы сайта, рассылка спама с сервера, жалобы провайдера. В таком случае изолируйте сервер, восстановите его из чистого бэкапа и смените все пароли и ключи.

Итог

Безопасность VPS — это не разовая настройка, а несколько простых привычек: ключи вместо паролей, минимум открытых портов, fail2ban, обновления и бэкапы вне сервера. Если не хотите разбираться сами — поможем подобрать и настроить: в рамках услуги аренда сервера и хостинга мы подготовим защищённый сервер и возьмём его обслуживание на себя.

В статье есть партнёрские ссылки: если вы зарегистрируетесь по ним, студия получит вознаграждение, для вас цена не меняется.

Читать дальше

Статьи по теме

Начать проект

Давайте сделаем крутой проект вместе

Расскажите о задаче — мы бесплатно проанализируем нишу, предложим решение и назовём сроки со стоимостью. Без навязчивых звонков.

Телефон

8 (926) 837 76 68

Почта

info@pear-advert.ru

Офис

Москва, ул. Гиляровского, 57с1

Оставьте заявку

Ответим в течение рабочего дня

Выберите тип проекта

Данные используются только для ответа на заявку и хранятся не дольше трёх лет.