← Все статьи
Полезные статьи

Первая настройка VPS: 7 шагов безопасности

Что сделать с новым VPS в первый час: отдельный пользователь, SSH-ключи, отключение входа по паролю, firewall, fail2ban и автообновления.

Свежий сервер с белым IP начинают перебирать по паролю примерно через пятнадцать минут после включения. Это не «взлом лично вас» — это боты, которые круглосуточно сканируют весь интернет и пробуют пары root / 123456.

Проверить самому можно одной командой на новом сервере, который проработал хотя бы сутки:

grep "Failed password" /var/log/auth.log | wc -l

Несколько сотен попыток за день — обычная картина.

Защита от этого занимает минут двадцать и делается один раз. Ниже — семь шагов, которые стоит пройти сразу после заказа, до того как вы начнёте что-то разворачивать на сервере.

Если вы ещё не подключались к серверу — начните отсюда: Как подключиться к VPS по SSH.

Шаг 1. Обновить систему

Образ операционной системы собран какое-то время назад, и часть пакетов в нём уже устарела — в том числе те, где закрыли уязвимости.

apt update && apt upgrade -y

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

reboot

Через полминуты подключайтесь снова.

Шаг 2. Создать отдельного пользователя

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

Заведите обычного пользователя:

adduser deploy

Система попросит пароль — задайте сложный. Остальные поля (имя, телефон) можно пропустить, нажимая Enter.

Дайте ему право повышать привилегии через sudo:

usermod -aG sudo deploy

Теперь любая административная команда выполняется с приставкой sudo, и система лишний раз переспросит пароль — это тот самый барьер, который не даёт снести систему одной опечаткой.

Шаг 3. Настроить вход по SSH-ключу

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

На своём компьютере (не на сервере) выполните:

ssh-keygen -t ed25519 -C "my-laptop"

Путь оставьте по умолчанию, нажав Enter. Парольную фразу задавать необязательно, но с ней ключ защищён даже при краже ноутбука.

Скопируйте публичный ключ на сервер. macOS и Linux:

ssh-copy-id deploy@ВАШ_IP

Windows (PowerShell):

type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh deploy@ВАШ_IP "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

Теперь откройте второе окно терминала и проверьте вход:

ssh deploy@ВАШ_IP

Если пароль не спросили — ключ работает.

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

Шаг 4. Запретить вход по паролю и под root

Пока вход по паролю разрешён, боты будут его перебирать — сколько бы ключей вы ни настроили. Отключаем.

sudo nano /etc/ssh/sshd_config

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

PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes

Сохраните: Ctrl + O, Enter, Ctrl + X.

Проверьте конфигурацию на ошибки до перезапуска:

sudo sshd -t

Пустой вывод означает, что синтаксис в порядке. Применяем:

sudo systemctl restart ssh

Теперь из нового окна проверьте, что вход работает. Если что-то пошло не так — у вас осталась открытая сессия из шага 3, через неё можно всё откатить.

Смена порта на Ubuntu 24.04

Перенос SSH с порта 22 на нестандартный убирает почти весь автоматический перебор из логов. Это не защита сама по себе, но заметно снижает шум.

На Ubuntu 24.04 одной строки Port в sshd_config недостаточно — там служба запускается через сокет, и порт задаётся отдельно:

sudo systemctl edit ssh.socket

В открывшемся файле впишите между комментариями:

[Socket]
ListenStream=
ListenStream=2222

Пустая первая строка сбрасывает порт 22, вторая задаёт новый. Применяем:

sudo systemctl daemon-reload
sudo systemctl restart ssh.socket

Сразу откройте новый порт в firewall (шаг 5), иначе следующее подключение не пройдёт. Дальше подключаться нужно так:

ssh -p 2222 deploy@ВАШ_IP

Шаг 5. Включить firewall

По умолчанию сервер отвечает на любом порту, где что-то слушает. Firewall оставляет открытым только то, что действительно нужно.

sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable

Если меняли порт SSH — вместо 22 указывайте свой, например 2222.

Правило для SSH добавляется первым, до ufw enable. Иначе firewall включится и разорвёт вашу же сессию.

Посмотреть список правил:

sudo ufw status numbered

Удалить лишнее правило по номеру:

sudo ufw delete 3

Базы данных наружу открывать не нужно. MySQL, PostgreSQL, Redis должны слушать только 127.0.0.1 — приложение на том же сервере к ним достучится, а весь остальной интернет нет. Проверить, что где слушает:

sudo ss -tulpn

Строки с 0.0.0.0:3306 или *:6379 — повод разобраться.

Шаг 6. Поставить fail2ban

Fail2ban читает логи и блокирует IP, с которых идёт перебор. Работает сразу после установки, настройка нужна минимальная.

sudo apt install fail2ban -y

Создайте свой файл настроек, чтобы обновления пакета его не затирали:

sudo nano /etc/fail2ban/jail.local
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5

[sshd]
enabled = true

Пять неудачных попыток за десять минут — час бана. Запускаем:

sudo systemctl enable --now fail2ban

Через сутки посмотрите статистику:

sudo fail2ban-client status sshd

В строке Total banned будет видно, сколько адресов уже отсеяно.

Шаг 7. Включить автоматические обновления безопасности

Большинство взломов происходит не через хитрые атаки, а через давно известные дыры в софте, который никто не обновлял. Автообновления закрывают этот класс проблем без вашего участия.

sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure --priority=low unattended-upgrades

На вопрос ответьте «Yes». Система будет сама ставить обновления безопасности.

Чтобы сервер ещё и перезагружался, когда обновление этого требует:

sudo nano /etc/apt/apt.conf.d/50unattended-upgrades
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "04:00";

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

Чек-лист

Шаг Команда для проверки Что должно быть
Система обновлена apt list --upgradable пусто
Есть отдельный пользователь id deploy группа sudo в списке
Вход по ключу работает ssh deploy@IP пароль не спрашивают
Пароль и root отключены sudo sshd -T \| grep -E "permitrootlogin\|passwordauth" оба no
Firewall включён sudo ufw status Status: active
Fail2ban работает sudo fail2ban-client status список jail'ов
Автообновления включены systemctl status unattended-upgrades active

Что ещё стоит сделать

Настроить бэкапы. Безопасность — это не только «не пустить чужого», но и «восстановиться, если что-то случилось». Копии делаются за десять минут: Бэкапы VPS: автоматические копии.

Не хранить пароли в коде. Секреты держите в файле .env с правами 600, а не в репозитории.

Отключить лишние службы. Посмотрите, что запущено, и уберите ненужное:

systemctl list-units --type=service --state=running

Изолировать проекты. Если на сервере несколько приложений, удобнее разнести их по контейнерам — тогда проблема в одном не заденет остальные: Docker на VPS.

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

Что делать, если я потерял SSH-ключ и не могу зайти? Подключитесь через VNC-консоль в панели управления — она работает независимо от SSH. Оттуда можно зайти под root и добавить новый ключ.

Нужно ли менять порт SSH? Не обязательно. Ключи и fail2ban закрывают вопрос безопасности, смена порта лишь убирает шум в логах. Но многим спокойнее, когда в auth.log не тысячи строк перебора.

Fail2ban заблокировал мой IP, что делать? Зайдите через VNC-консоль и разбаньте:

sudo fail2ban-client set sshd unbanip ВАШ_IP

Чтобы этого не повторялось, добавьте свой адрес в jail.local: ignoreip = 127.0.0.1/8 ВАШ_IP.

Достаточно ли этих семи шагов? Для типового сервера с сайтом или ботом — да, они закрывают основные сценарии: перебор пароля, доступ к внутренним службам снаружи и эксплуатацию старых уязвимостей. Дальше безопасность зависит уже от самого приложения.

Нужен ли антивирус на Linux-сервере? Нет. Гораздо важнее закрытые порты, обновления и вход по ключу.

Сколько ресурсов съедают fail2ban и автообновления? Считанные мегабайты памяти. Всё описанное спокойно работает даже на тарифе «Старт» с 2 ГБ.

Итог

Двадцать минут в начале избавляют от куда более долгих разборов потом. Ключевое здесь — три вещи: вход только по ключу, закрытый firewall и включённые автообновления. Остальное — полезные дополнения.

И помните главное правило при любой настройке SSH: пока не проверили новое подключение из отдельного окна, старую сессию не закрывайте.

Заказать VPS →

Команда Puws.Cloud
Puws.Cloud
Начать

СЕРВЕР ДЛЯ ВАШЕГО ПРОЕКТА

Начните
с тарифа.

ПОЛЕЗНОЕ О СЕРВЕРАХИнструкции
и советы.
Открыть блог
Наш Аптайм