🔐 Настройка и защита VPS

Ubuntu 24.04 LTS — от первичного входа до безопасной production-среды

⚡ Актуально для всех провайдеров
⚠️ Почему это критически важно
Среднее время до первой попытки взлома свежего сервера — менее 10 минут. Боты сканируют интернет в поисках стандартного порта SSH, разрешенного root и слабых паролей. Следуя инструкции, вы превратите чистый VPS в надежно защищенную платформу.
1 Первичное подключение и базовая настройка

Подключитесь через root (пароль выдан хостингом):

ssh root@your_server_ip

Обновите систему до актуального состояния:

apt update && apt upgrade -y

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

ls /var/run/reboot-required 2>/dev/null && echo "Reboot required"
reboot   # если нужна перезагрузка
✅ После перезагрузки снова подключитесь как root, чтобы продолжить.
2 Создание административного пользователя

Работать из-под root рискованно. Создадим отдельного пользователя с правами sudo:

adduser admin      # замените admin на желаемое имя
usermod -aG sudo admin

Задайте сложный пароль. Дополнительные поля (телефон, комната) можно пропустить Enter.

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

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

ssh-keygen -t ed25519 -C "your_email@example.com"

Скопируйте публичный ключ на сервер для пользователя admin:

ssh-copy-id admin@your_server_ip

Проверьте вход по ключу:

ssh admin@your_server_ip
⚠️ Не закрывайте эту успешную сессию до завершения настройки SSH — это страховка на случай ошибки в конфиге.
4 Усиление защиты SSH (Hardening)

Отредактируйте конфигурацию SSH-демона:

sudo nano /etc/ssh/sshd_config

Внесите/проверьте параметры:

PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
# Port 2222   # опционально — сменить порт

Примените настройки:

sudo sshd -t                 # проверить синтаксис
sudo systemctl restart sshd
🔁 Важно: Не закрывайте текущую сессию! Откройте новое окно терминала и подключитесь заново как admin (с указанием порта, если меняли). Успешное подключение = можно закрывать старую сессию.
5 Настройка брандмауэра (UFW)
sudo ufw default deny incoming
sudo ufw default allow outgoing

# Разрешить SSH (порт 22 или изменённый)
sudo ufw allow 2222/tcp       # если порт 2222
# или sudo ufw allow ssh

# Для веб-сервера:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# Включить защиту от брутфорса для SSH:
sudo ufw limit 2222/tcp

sudo ufw enable
sudo ufw status verbose

Статус должен быть active с правилами входящих подключений.

6 Защита от брутфорса — Fail2ban
sudo apt install fail2ban -y
sudo nano /etc/fail2ban/jail.local

Содержимое jail.local (базовая защита SSH):

[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 5

[sshd]
enabled = true
port = 2222          # или 22, если не меняли порт
logpath = /var/log/auth.log
backend = systemd
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd
📌 Fail2ban автоматически блокирует IP при 5 неудачных попытках входа на 1 час.
7 Автоматические обновления безопасности
sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure --priority=low unattended-upgrades

В диалоге выберите Yes для автоматической установки обновлений.

Проверьте конфигурацию:

cat /etc/apt/apt.conf.d/20auto-upgrades

Должны быть строки Update-Package-Lists "1"; и Unattended-Upgrade "1";

8 Swap (подкачка) для систем с малым RAM

Если у VPS меньше 4 ГБ RAM — добавьте swap-файл 2 ГБ для стабильности:

sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
echo 'vm.swappiness=10' | sudo tee /etc/sysctl.d/99-swappiness.conf
sudo sysctl -p /etc/sysctl.d/99-swappiness.conf

Проверка: free -h

Итоги и дальнейшие шаги

Базовая безопасность операционной системы настроена. Сервер готов к развертыванию приложений.

🚀 Что можно сделать дальше:

  • Установить веб-сервер: sudo apt install nginx (LEMP) или Apache
  • Добавить базу данных: sudo apt install mariadb-server
  • Настроить SSL (Let's Encrypt):
    sudo apt install certbot python3-certbot-nginx
    sudo certbot --nginx -d ваш-домен.ru
  • Развернуть приложение (Node.js, Python, Go, PHP) с автозапуском через systemd
🔁 Регулярно проверяйте логи: sudo tail -f /var/log/auth.log
Безопасность — это процесс. Держите систему обновлённой и следите за подозрительной активностью.