После покупки VPS сервер приходит в исходном состоянии: только ОС, root-доступ по паролю и никакой защиты. Эта статья показывает, как настроить VPS с нуля — от первого подключения до работающего веб-сервера с SSL-сертификатом и резервным копированием. Если вы только выбираете провайдера — начните с выбора подходящего VPS в нашем каталоге, а если уже определились, читайте дальше. Среди начинающих пользователей востребована подборка лучших VPS для начинающих — там конкретные тарифы с оценками.
Шаг 1. Подключение к VPS по SSH
SSH (Secure Shell) — протокол зашифрованного удалённого подключения к серверу. Через него выполняются все команды из этой инструкции. Без SSH работа с VPS невозможна — веб-панелей управления здесь нет.
После покупки VPS провайдер присылает три параметра: IP-адрес сервера, логин (обычно root) и пароль. Тип виртуализации тоже важен — KVM-серверы поддерживают загрузку своего ядра, что нужно для части инструментов безопасности.
Подключение через PuTTY (для Windows)
PuTTY — бесплатный SSH-клиент для Windows. Порядок подключения:
- Скачать PuTTY с официального сайта putty.org.
- В поле Host Name (or IP address) ввести IP-адрес сервера.
- Порт — 22, тип соединения — SSH.
- Нажать Open.
- При первом подключении PuTTY покажет предупреждение о ключе хоста — нажать Accept.
- Ввести логин
rootи пароль из письма провайдера.
Начиная с Windows 10 1809 SSH-клиент встроен в систему. PuTTY или Windows Terminal — разницы нет, выбирайте удобный вариант.
Подключение через терминал (macOS / Linux)
Открыть терминал и выполнить команду:
ssh root@ВАШ_IP_АДРЕС
При первом подключении система запросит подтверждение отпечатка ключа — ввести yes. Затем ввести пароль. Курсор при вводе пароля не двигается — это нормально, Linux скрывает символы.
После входа появится приглашение вида root@hostname:~#. Это означает активную сессию суперпользователя с полным доступом к серверу.
Шаг 2. Обновление системы
Первое действие после входа на сервер — обновление всех пакетов. Это устраняет известные уязвимости в ОС и предустановленном ПО. Серверы с устаревшими пакетами компрометируются в течение нескольких часов после публикации новых эксплойтов — пропускать этот шаг не стоит.
Для Ubuntu и Debian (большинство VPS-провайдеров в каталоге сравнить VPS с Ubuntu предлагают именно эти дистрибутивы):
apt update && apt upgrade -y
Для CentOS, AlmaLinux, Rocky Linux:
dnf update -y
Команда apt update обновляет список доступных пакетов, apt upgrade -y — устанавливает обновления без запроса подтверждения. Флаг -y автоматически отвечает «да» на все вопросы. После завершения сервер может попросить перезагрузку — выполнить reboot и снова подключиться по SSH.
Дополнительно рекомендуется установить unattended-upgrades для автоматических обновлений безопасности:
apt install unattended-upgrades -y
dpkg-reconfigure --priority=low unattended-upgrades
Шаг 3. Базовая безопасность сервера
Сервер с root-доступом по паролю и открытым SSH — мишень для автоматических брутфорс-атак. Боты перебирают пароли круглосуточно; по данным провайдеров, новый VPS получает первые попытки подбора в течение 30 минут после появления в сети. Три шага ниже закрывают основные векторы атаки.
Создание нового пользователя и отключение root-доступа
Работать постоянно под root опасно: одна ошибочная команда может уничтожить систему. Создайте отдельного пользователя с правами sudo:
adduser имя_пользователя
Система запросит пароль и несколько необязательных полей (имя, телефон) — поля можно пропустить, нажав Enter. Добавить пользователя в группу sudo:
usermod -aG sudo имя_пользователя
Открыть новый терминал и проверить, что новый пользователь входит и может выполнять команды с sudo. После проверки — отключить root-вход по SSH. Открыть файл конфигурации:
nano /etc/ssh/sshd_config
Найти строку PermitRootLogin yes и изменить на:
PermitRootLogin no
Сохранить файл (Ctrl+O, Enter, Ctrl+X) и перезапустить SSH-демон:
systemctl restart sshd
Не закрывайте текущий терминал до проверки нового подключения. Если допустить ошибку в конфиге и закрыть единственную сессию — потеряете доступ к серверу.
Настройка SSH-ключей вместо паролей
SSH-ключи надёжнее паролей: ключ длиной 256 бит невозможно подобрать перебором. Сгенерировать пару ключей на локальном компьютере (не на сервере):
ssh-keygen -t ed25519 -C "комментарий, например email"
Алгоритм ed25519 — современный стандарт; он быстрее и безопаснее устаревшего RSA-2048. Команда создаст два файла: ~/.ssh/id_ed25519 (приватный ключ, хранить только локально) и ~/.ssh/id_ed25519.pub (публичный ключ, его отправляют на сервер).
Скопировать публичный ключ на сервер:
ssh-copy-id имя_пользователя@ВАШ_IP_АДРЕС
После этого вход на сервер будет происходить без пароля. Дополнительно можно отключить вход по паролю полностью — в sshd_config установить PasswordAuthentication no. Подробнее о работе с ключами — в официальной документации Ubuntu по SSH-ключам.
Установка и настройка Fail2ban
Fail2ban отслеживает системные логи и автоматически блокирует IP-адреса, с которых поступают подозрительные запросы. По умолчанию после 5 неудачных попыток входа IP блокируется на 10 минут. Установка:
apt install fail2ban -y
Создать локальный конфиг (оригинальный файл jail.conf перезаписывается при обновлениях — изменения вносить только в jail.local):
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
nano /etc/fail2ban/jail.local
Минимальная конфигурация для защиты SSH (найти секцию [sshd] или добавить в конец файла):
[sshd]
enabled = true
port = ssh
maxretry = 3
bantime = 3600
findtime = 600
Параметры: maxretry = 3 — блокировать после трёх неудачных попыток, bantime = 3600 — на один час, findtime = 600 — считать попытки за последние 10 минут. Применить конфигурацию:
systemctl restart fail2ban
systemctl enable fail2ban
Проверить статус и список заблокированных IP:
fail2ban-client status sshd
Шаг 4. Настройка файрвола (UFW)
UFW (Uncomplicated Firewall) — надстройка над iptables, которая упрощает управление правилами. Для новичков UFW предпочтительнее прямой работы с iptables: меньше шансов допустить ошибку в синтаксисе и заблокировать себя.
Установить UFW (в Ubuntu обычно уже присутствует):
apt install ufw -y
Настроить правила до включения файрвола — в строгом порядке:
ufw allow OpenSSH
ufw allow 80/tcp
ufw allow 443/tcp
Важно: не выполняйте
ufw enableдо того, как разрешили SSH-порт. Если включить файрвол без правила для SSH — потеряете доступ к серверу. Провайдер сможет помочь только через VNC-консоль.
Включить файрвол и проверить статус:
ufw enable
ufw status
Вывод команды должен показать три разрешённых правила: OpenSSH (порт 22), 80/tcp и 443/tcp. Всё остальное входящее — блокируется по умолчанию. Исходящий трафик UFW не ограничивает.
Для продвинутых задач — управление правилами через iptables напрямую, nftables или Firewalld (для CentOS/AlmaLinux). UFW подходит для большинства веб-проектов.
Шаг 5. Установка веб-сервера Nginx
Для размещения сайтов на VPS нужен веб-сервер. Nginx — предпочтительный выбор для большинства задач: потребляет меньше памяти при высокой нагрузке, отлично справляется с отдачей статики, служит обратным прокси для Node.js, Python, PHP-FPM. Apache актуален для тех, кто уже работает с .htaccess — например, при переносе сайта на VPS для WordPress.
Установка Nginx
apt install nginx -y
systemctl start nginx
systemctl enable nginx
Команда systemctl enable добавляет Nginx в автозагрузку — сервис поднимется автоматически после перезагрузки сервера. Проверить работу: открыть в браузере адрес http://ВАШ_IP_АДРЕС. Должна появиться стандартная страница «Welcome to nginx!».
Базовая конфигурация виртуального хоста
Каждый сайт в Nginx описывается отдельным блоком server. Создать конфиг для домена:
nano /etc/nginx/sites-available/example.com
Шаблон конфига для сайта:
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
root /var/www/example.com/html;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ =404;
}
access_log /var/log/nginx/example.com.access.log;
error_log /var/log/nginx/example.com.error.log;
}
Активировать конфиг и перезапустить Nginx:
ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
nginx -t
systemctl reload nginx
Команда nginx -t проверяет синтаксис конфига перед применением. Если выводит test is successful — всё в порядке. Никогда не перезапускайте Nginx без предварительной проверки конфига на продакшн-сервере.
Шаг 6. Установка PHP и MySQL
Стек LEMP (Linux + Nginx + MySQL/MariaDB + PHP) — стандартная среда для запуска WordPress, Laravel, Bitrix и большинства PHP-приложений.
Установка PHP
Для Ubuntu 22.04 актуальная версия PHP — 8.1, для Ubuntu 24.04 — 8.3. Установить PHP-FPM и необходимые расширения:
apt install php-fpm php-mysql php-cli php-curl php-mbstring php-xml php-zip -y
PHP-FPM запускает PHP как отдельный процесс и передаёт запросы от Nginx через FastCGI. Добавить обработку PHP в конфиг виртуального хоста — внутрь блока server {}:
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}
Путь к сокету PHP-FPM зависит от версии PHP. Уточнить актуальный путь:
ls /run/php/
Установка MySQL (MariaDB)
MariaDB — полностью совместимая с MySQL замена с открытым кодом. На Ubuntu 22.04/24.04 из стандартных репозиториев устанавливается MariaDB:
apt install mariadb-server -y
mysql_secure_installation
Скрипт mysql_secure_installation задаёт несколько вопросов: установить пароль для root, удалить анонимных пользователей, отключить удалённый вход root, удалить тестовую базу. На все вопросы ответить «Y».
Создать базу данных и пользователя для приложения:
mysql -u root -p
Внутри MySQL-консоли:
CREATE DATABASE mysite_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'mysite_user'@'localhost' IDENTIFIED BY 'надёжный_пароль';
GRANT ALL PRIVILEGES ON mysite_db.* TO 'mysite_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Кодировка utf8mb4 поддерживает полный Unicode включая emoji — использовать вместо устаревшей utf8.
Шаг 7. Подключение SSL-сертификата через Let’s Encrypt
Let’s Encrypt выдаёт бесплатные SSL-сертификаты автоматически. Отличие от платных: у Let’s Encrypt нет коммерческой гарантии и OV/EV-валидации (проверки юридического лица). Для большинства сайтов — блогов, магазинов, сервисов — бесплатного сертификата достаточно.
Перед установкой убедитесь, что A-запись домена указывает на IP-адрес вашего сервера. Certbot проверяет это при выдаче сертификата.
Установить Certbot и плагин для Nginx:
apt install certbot python3-certbot-nginx -y
Получить и установить сертификат (Certbot автоматически изменит конфиг Nginx):
certbot --nginx -d example.com -d www.example.com
Certbot запросит email для уведомлений об истечении сертификата и согласие с условиями использования. После успешного выполнения Nginx будет автоматически перенаправлять HTTP на HTTPS.
Сертификаты Let’s Encrypt действуют 90 дней. Certbot устанавливает задание cron для автоматического продления. Проверить, что продление работает:
certbot renew --dry-run
Полная документация и инструкции для других веб-серверов — на сайте официальной документации Certbot.
Шаг 8. Мониторинг сервера
После запуска сервера нужно следить за нагрузкой, свободным местом и состоянием сервисов. Для старта хватает встроенных инструментов — без установки сложных систем.
Просмотр текущей нагрузки на CPU, RAM и процессы в реальном времени:
apt install htop -y
htop
Свободное место на дисках:
df -h
Использование оперативной памяти:
free -m
Логи Nginx в реальном времени:
journalctl -u nginx -f
Флаг -f включает режим слежения — новые строки добавляются по мере поступления. Прерывается по Ctrl+C.
Netdata — веб-панель мониторинга, которая устанавливается одной командой и сразу показывает графики нагрузки, сетевой активности и состояния сервисов:
wget -O /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.sh
sh /tmp/netdata-kickstart.sh --stable-channel
После установки веб-интерфейс доступен на порту 19999. Не забудьте открыть порт в UFW, если планируете доступ извне: ufw allow 19999/tcp. На продакшн-сервере лучше закрыть порт и настроить туннель через SSH.
Шаг 9. Настройка резервного копирования
Бэкап — единственная страховка от потери данных при сбое диска, ошибочном rm -rf или взломе. Провайдерские снапшоты удобны, но они охватывают весь сервер целиком и стоят дополнительно. Для гибкого контроля — собственные скрипты.
Создать директорию для бэкапов и скрипт:
mkdir -p /var/backups/mysite
nano /usr/local/bin/backup.sh
Содержимое скрипта:
#!/bin/bash
DATE=$(date +%Y-%m-%d)
BACKUP_DIR="/var/backups/mysite"
SITE_DIR="/var/www/example.com"
DB_NAME="mysite_db"
DB_USER="mysite_user"
DB_PASS="надёжный_пароль"
# Архив файлов сайта
tar -czf "$BACKUP_DIR/files-$DATE.tar.gz" "$SITE_DIR"
# Дамп базы данных
mysqldump -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" | gzip > "$BACKUP_DIR/db-$DATE.sql.gz"
# Удалить бэкапы старше 14 дней
find "$BACKUP_DIR" -type f -mtime +14 -delete
Сделать скрипт исполняемым и добавить в cron:
chmod +x /usr/local/bin/backup.sh
crontab -e
Добавить строку для запуска каждую ночь в 3:00:
0 3 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
Хранить бэкапы только на том же сервере — плохая практика: при отказе диска потеряете и данные, и резервные копии. Оптимально — отправлять архивы в облачное хранилище (Backblaze B2, Яндекс Диск, S3-совместимое хранилище) или на VPS в Германии как на географически удалённый узел. Большинство VPS в России предоставляют дополнительное блочное хранилище за отдельную плату — можно монтировать как резервный диск.
Ну и в заключение: что настроено
После выполнения всех шагов сервер готов к работе. Вот что сделано:
- SSH-подключение — вход через терминал или PuTTY
- Обновление системы — актуальные пакеты и патчи безопасности
- Новый пользователь sudo, root-вход по SSH отключён
- SSH-ключи вместо паролей — брутфорс исключён
- Fail2ban — автоматическая блокировка атак
- UFW файрвол — открыты только порты 22, 80, 443
- Nginx — веб-сервер с виртуальным хостом
- PHP-FPM + MariaDB — стек для PHP-приложений
- SSL-сертификат Let’s Encrypt с автоматическим продлением
- Мониторинг — htop, df, journalctl
- Cron-бэкап — ежедневные архивы файлов и базы данных
Дальнейшие шаги зависят от задачи: установка CMS (WordPress, Drupal), деплой Node.js или Python-приложения, настройка почтового сервера. Для каждого случая — отдельные гайды. Если провайдер ещё не выбран или нужно сменить текущий — сравните 45 провайдеров и выберите VPS с нужными параметрами в нашем каталоге.