🖥️
Хостинг

Новый VPS: что сделать в первые 30 минут

11.11.2026
← Все статьи

Уже через несколько минут после запуска VPS на его SSH-порт начинают приходить попытки подключения с незнакомых адресов. Это не атака лично на вас: в интернете постоянно работают боты, которые ищут открытые серверы и перебирают простые пароли. Поэтому до установки сайта или приложения стоит выполнить несколько базовых настроек. Описанный порядок рассчитан на Ubuntu 22.04 и 24.04, в Debian всё работает почти так же.

1. Первое подключение и обновление системы

Когда сервер готов, вы получаете IP-адрес и пароль root или SSH-ключ. Подключитесь из терминала и первым делом обновите пакеты. Готовые образы могли быть собраны несколько недель или месяцев назад, и в них есть незакрытые уязвимости:

ssh root@203.0.113.10
apt update && apt upgrade -y

Если обновилось ядро, система попросит перезагрузку — об этом говорит наличие файла /var/run/reboot-required. Удобнее не перезагружаться сразу, а закончить остальные настройки и выполнить reboot один раз в конце.

2. Отдельный пользователь вместо root

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

adduser deploy
usermod -aG sudo deploy

adduser попросит пароль. Он нужен не для входа по SSH, а для подтверждения команд sudo, поэтому сделайте его длинным и сложным.

3. Вход по SSH-ключу

Переход с пароля на пару ключей — один из важнейших шагов. Ключ создаётся на вашем компьютере: закрытая часть остаётся у вас, открытая копируется на сервер. Если ключа ещё нет, создайте его и отправьте на сервер. В Windows 10 и 11 эти команды тоже работают в PowerShell, но если ssh-copy-id отсутствует, открытый ключ придётся скопировать вручную:

ssh-keygen -t ed25519 -C "laptop-ofis"
ssh-copy-id deploy@203.0.113.10

Теперь в новом окне терминала выполните ssh deploy@203.0.113.10. Если пароль не спрашивается или спрашивается только пароль ключа, всё настроено верно. Командой sudo -v проверьте и наличие прав sudo.

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

Убедившись, что ключ работает, можно отключить вход под root и аутентификацию по паролю. В новых версиях Ubuntu помимо основного файла читаются и файлы из каталога /etc/ssh/sshd_config.d/, и один из них, например 50-cloud-init.conf в облачных образах, может снова включать вход по паролю. Поэтому надёжнее записать свои настройки в отдельный файл и проверить остальные:

sudo nano /etc/ssh/sshd_config.d/00-hardening.conf

PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no

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

sudo sshd -t
sudo grep -ri passwordauthentication /etc/ssh/sshd_config /etc/ssh/sshd_config.d/
sudo systemctl restart ssh

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

5. Файрвол: открываем только нужное

В Ubuntu удобно использовать UFW. Сначала разрешите SSH и только потом включайте файрвол, иначе соединение оборвётся. Если планируете размещать сайт, откройте также порты 80 и 443:

sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status verbose

Не открывайте наружу порты MySQL, Redis или приложений: им достаточно работать внутри сервера через 127.0.0.1. Какие службы слушают какие порты, покажет sudo ss -tulpn.

6. Часовой пояс и имя сервера

Чтобы время в логах, задачах cron и резервных копиях было правильным, настройте часовой пояс. Для проекта в Узбекистане это Asia/Tashkent. Имя сервера помогает не перепутать терминалы, когда серверов несколько:

sudo timedatectl set-timezone Asia/Tashkent
sudo hostnamectl set-hostname web1.example.uz
timedatectl

7. Автоматические обновления безопасности

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

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

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

8. fail2ban против подбора паролей

Даже при отключённом входе по паролю боты продолжают попытки и засоряют логи. fail2ban временно блокирует адреса после серии неудачных попыток. В Ubuntu защита SSH включена в нём по умолчанию сразу после установки:

sudo apt install fail2ban
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd

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

Допустим, ташкентский магазин одежды переносит сайт с виртуального хостинга на VPS. В день получения сервера разработчик сначала выполняет эти восемь шагов, перезагружается и только потом переходит к установке Nginx, PHP и MySQL. Такой порядок упрощает и дальнейшую работу: всё ставится под отдельным пользователем, а наружу открыты только нужные порты. DNS-запись домена переключается на новый сервер в самом конце, после полной проверки сайта. В sayt.uz записи домена меняются в разделе DNS личного кабинета.

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

Похожие статьи

🐧 Какую ОС выбрать для VPS: Ubuntu, Debian или AlmaLinux 🚀 Как вывести NestJS в production: сборка, PM2, Nginx и SSL ⏱️ max_execution_time: как работать с долгими PHP-скриптами 🥟 Bun вместо Node.js: можно ли использовать и как запустить на сервере
🌐 Язык
🇺🇿 O'zbek 🇺🇿 Ўзбек 🇷🇺 Русский ✓ 🇬🇧 English