Вы только что арендовали VPS, получили на почту IP-адрес, логин root и пароль — и теперь смотрите на это письмо, не зная, что делать дальше. Это нормально. Первая настройка Linux-сервера пугает многих, но на практике там нет ничего сложного. Разберём по шагам.

Подключаемся по SSH

SSH — это зашифрованный протокол для удалённого управления сервером через терминал. На Linux и macOS он встроен, на Windows используйте PowerShell или PuTTY.

Подключение выглядит так:

ssh root@YOUR_IP

Gде YOUR_IP — IP-адрес вашего сервера. При первом подключении терминал спросит, доверять ли этому хосту — отвечайте yes. Введите пароль из письма.

Вы вошли. Первое, что видите — приглашение командной строки вида root@hostname:~#. Отсюда управляете всем сервером.

Первым делом — обновить систему

Независимо от того, какой дистрибутив установлен, сразу обновите пакеты. Хостеры часто раздают образы с устаревшими версиями.

Для Ubuntu/Debian:

apt update && apt upgrade -y

Для CentOS/Rocky Linux:

dnf update -y

Это может занять несколько минут. Дождитесь окончания — не прерывайте процесс.

Создайте отдельного пользователя — не работайте под root

Root — это суперпользователь с неограниченными правами. Работать под ним постоянно опасно: одна опечатка в команде — и можно удалить что-нибудь важное. Плюс root — первая цель при атаках.

Создайте обычного пользователя и дайте ему права sudo:

adduser deploy
usermod -aG sudo deploy

На CentOS/Rocky вместо adduser используйте useradd -m deploy, а группа называется wheel вместо sudo.

Проверьте, что новый пользователь работает:

su - deploy
sudo whoami

Должно вернуть root — значит sudo настроен правильно. Теперь выйдите обратно командой exit.

Настройте SSH-ключи вместо пароля

Пароль можно подобрать. SSH-ключ — практически нет. Это пара файлов: приватный ключ хранится у вас на компьютере, публичный — на сервере.

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

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

Нажимайте Enter, если не хотите ставить пароль на ключ (для начала это нормально). Появятся два файла: ~/.ssh/id_ed25519 (приватный, никому не давайте) и ~/.ssh/id_ed25519.pub (публичный).

Копируем публичный ключ на сервер:

ssh-copy-id deploy@YOUR_IP

Если ssh-copy-id нет (Windows), вручную скопируйте содержимое файла .pub и добавьте его на сервере в файл ~/.ssh/authorized_keys:

mkdir -p ~/.ssh
echo "ВАШ_ПУБЛИЧНЫЙ_КЛЮЧ" >> ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

Проверьте подключение по ключу: откройте новый терминал и попробуйте ssh deploy@YOUR_IP. Если вошли без пароля — всё работает.

Закройте SSH от перебора паролей

Как только сервер появляется в интернете, боты начинают долбиться на 22-й порт (стандартный для SSH) и перебирать логины и пароли. В логах это выглядит как тысячи строк с Failed password for root.

Откройте конфиг SSH:

sudo nano /etc/ssh/sshd_config

Найдите и измените (или добавьте) следующие строки:

Port 2222
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes

Что делает каждая настройка:

  • Port 2222 — меняем порт со стандартного 22 на любой другой (можно выбрать любой от 1024 до 65535). Это не панацея, но отсеивает 90% автоматических сканеров.
  • PermitRootLogin no — запрещаем вход под root напрямую.
  • PasswordAuthentication no — отключаем вход по паролю совсем. Теперь только по ключу.

Перезапустите SSH:

sudo systemctl restart sshd

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

ssh -p 2222 deploy@YOUR_IP

Если подключились — отлично. Если нет — вернитесь в первый терминал и разберитесь, что пошло не так.

Настройте firewall

Firewall контролирует, какие порты открыты снаружи. На Ubuntu проще всего использовать ufw:

sudo apt install ufw
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 2222/tcp
sudo ufw enable

Здесь мы запрещаем все входящие соединения, разрешаем все исходящие, и открываем только наш SSH-порт. Если на сервере будет веб-сервер, добавьте:

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

Проверить статус firewall:

sudo ufw status verbose

На CentOS/Rocky используется firewalld — синтаксис другой, но логика та же.

Fail2ban — автоматическая блокировка при атаках

Если кто-то всё же находит ваш SSH-порт и начинает перебирать пароли или ключи, fail2ban автоматически блокирует IP-адрес атакующего.

sudo apt install fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

Базовая конфигурация уже работает из коробки — fail2ban блокирует IP после 5 неудачных попыток входа на 10 минут. Для большинства случаев этого достаточно.

Посмотреть заблокированные адреса:

sudo fail2ban-client status sshd

Часовой пояс и hostname

Мелочи, которые потом мешают читать логи.

Установите нужный часовой пояс (пример для Москвы):

sudo timedatectl set-timezone Europe/Moscow

Проверьте:

timedatectl

Дайте серверу понятное имя:

sudo hostnamectl set-hostname my-web-server

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

Мониторинг: знайте, что происходит на сервере

Даже при минимальной нагрузке полезно понимать, что происходит.

Смотреть загрузку процессора, памяти и процессов в реальном времени:

htop

Если htop не установлен: sudo apt install htop.

Дисковое пространство:

df -h

Кто сейчас подключён к серверу:

who

Последние попытки входа:

lastb | head -20

Логи системы (Ubuntu/Debian):

journalctl -n 100 --no-pager

Если нужен полноценный мониторинг с графиками и алертами — смотрите в сторону Netdata (устанавливается одной командой и сразу даёт веб-интерфейс) или стека Prometheus + Grafana (сложнее, но мощнее).

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

Поддерживать пакеты в актуальном состоянии вручную — утомительно. Для Ubuntu есть unattended-upgrades, который автоматически устанавливает обновления безопасности:

sudo apt install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades

Отвечайте «Да» на вопрос об автоматических обновлениях. Это закрывает большинство известных уязвимостей без вашего участия.

Бэкап — обязательно

Все эти настройки бессмысленны без резервных копий. Сервер может упасть, хостер — потерять данные (бывает), вы сами — случайно что-то удалить.

Минимум — настройте снапшоты у хостера, если он их поддерживает. Большинство VPS-провайдеров предлагают это как опцию.

Для бэкапа файлов на внешнее хранилище посмотрите на restic — современный инструмент с шифрованием и дедупликацией:

sudo apt install restic

Он умеет делать бэкапы в S3, Backblaze B2, SFTP и локальные директории.

Что дальше

После базовой настройки сервер готов к работе. Дальнейшие шаги зависят от задачи:

  • Хотите запустить сайт — устанавливайте Nginx или Apache, настраивайте виртуальные хосты, подключайте SSL через Let's Encrypt (утилита certbot).
  • Нужна база данных — ставьте PostgreSQL или MySQL.
  • Планируете деплоить несколько проектов — смотрите на Docker и docker-compose, это сильно упрощает управление.

Если понимаете, что задача сложнее, чем кажется, или просто нет времени разбираться — это нормальный повод делегировать. Команда REEXY занимается не только разработкой сайтов, но и сопровождением: поддержка с нуля стоит от 10 000 ₽/мес и включает мониторинг, обновления и реакцию на инциденты.

Чек-лист первой настройки

Чтобы ничего не забыть:

  • Обновить систему сразу после получения сервера
  • Создать пользователя без root-доступа, настроить sudo
  • Сгенерировать SSH-ключи и скопировать публичный ключ на сервер
  • Сменить порт SSH, отключить вход под root и вход по паролю
  • Настроить firewall — закрыть всё лишнее
  • Установить fail2ban
  • Выставить правильный часовой пояс
  • Включить автоматические обновления безопасности
  • Настроить хотя бы базовый бэкап

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