Вы только что арендовали 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
- Выставить правильный часовой пояс
- Включить автоматические обновления безопасности
- Настроить хотя бы базовый бэкап
Это не займёт больше часа, а уровень защиты сервера вырастет на порядок по сравнению с тем, что было сразу после аренды.