Блог
Безопасность · чек-листБезопасность 10 мин чтения

Как защитить VPS от взлома: чек-лист из 12 пунктов

12 практических шагов защиты VPS сразу после установки: SSH-ключи, fail2ban, firewall, unattended-upgrades, non-root user, отключение root-login, 2FA, мониторинг.

Свежий VPS в интернете начинает получать brute-force SSH-попытки в первые 5 минут после регистрации IP. Через 24 часа — тысячи попыток, если стоит слабый пароль — взлом.

Ниже — минимальный чек-лист из 12 пунктов, которые нужно сделать в первые 30 минут после получения нового VPS. Без параноидальных крайностей, но с реальной защитой от 99 % автоматизированных атак.

1. Обновить систему

Первым делом — свежие security-патчи ядра, OpenSSH, glibc, TLS-стека.

sudo apt update && sudo apt upgrade -y
sudo apt autoremove -y
sudo reboot   # если было обновление ядра

2. Создать non-root user

Работать от root — плохая практика. Создаём отдельного user'а с sudo.

sudo adduser deploy
sudo usermod -aG sudo deploy
# проверка
sudo -u deploy sudo whoami   # root — работает

3. Настроить SSH-ключ

На локальной машине генерируем ключ Ed25519 (быстрее и безопаснее RSA), копируем на сервер.

# на локалке
ssh-keygen -t ed25519 -C "[email protected]" -f ~/.ssh/vps-deploy

# копируем публичный ключ
ssh-copy-id -i ~/.ssh/vps-deploy.pub [email protected]

# проверка входа
ssh -i ~/.ssh/vps-deploy [email protected]

4. Отключить SSH-пароли и root-логин

Правим /etc/ssh/sshd_config (осторожно — держите вторую SSH-сессию открытой на случай ошибки).

sudo nano /etc/ssh/sshd_config

# ключевые строки:
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
ChallengeResponseAuthentication no
X11Forwarding no
MaxAuthTries 3
LoginGraceTime 20

sudo sshd -t                       # синтакс-проверка
sudo systemctl reload sshd
Осторожно

Перед reload — откройте вторую SSH-сессию и убедитесь, что вход по ключу под deploy работает. Иначе можете заблокировать себя.

5. Сменить порт SSH (опционально)

Смена порта не защищает от целевой атаки, но снижает шум от bot-сканеров на 90 %. Плюс — освобождает логи. Выбираем 22000-64000, не занятый.

# в /etc/ssh/sshd_config
Port 22042

# не забыть открыть в firewall (шаг 6)
sudo systemctl reload sshd
# теперь ssh -i ~/.ssh/vps-deploy -p 22042 [email protected]

6. Настроить UFW firewall

Ubuntu Firewall — обёртка над iptables. Deny by default, разрешаем только нужное.

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22042/tcp   # ваш SSH-порт
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status verbose

7. Установить fail2ban

Автобан IP после N неудачных попыток входа. Против bot-scanner'ов.

sudo apt install -y fail2ban

# /etc/fail2ban/jail.local
sudo tee /etc/fail2ban/jail.local <<'EOF'
[DEFAULT]
bantime  = 24h
findtime = 10m
maxretry = 3

[sshd]
enabled = true
port    = 22042
EOF

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

8. Unattended upgrades

Автоматическая установка security-патчей.

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

# правим /etc/apt/apt.conf.d/50unattended-upgrades:
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "04:00";

# тест
sudo unattended-upgrades --dry-run --debug

9. Отключить неиспользуемые сервисы

Меньше открытых портов — меньше поверхности атаки.

sudo ss -tulpn | grep LISTEN   # что слушает
# отключить лишнее
sudo systemctl disable --now avahi-daemon
sudo systemctl disable --now cups
sudo systemctl disable --now bluetooth 2>/dev/null || true

# на облачном VPS обычно ничего лишнего нет — но проверить стоит

10. Настроить логирование и мониторинг

Минимум — auditd для отслеживания важных изменений + jourrnal-центральный сбор.

sudo apt install -y auditd
sudo systemctl enable --now auditd

# наблюдение за /etc/passwd, /etc/shadow, sudo
sudo auditctl -w /etc/passwd -p wa -k passwd
sudo auditctl -w /etc/shadow -p wa -k shadow
sudo auditctl -w /etc/sudoers -p wa -k sudoers

# постоянные правила: /etc/audit/rules.d/audit.rules

11. Настроить бэкапы

Взлом с шифровальщиком — реальный сценарий. Бэкап на offsite S3-хранилище (restic + B2) — единственная защита.

См. отдельный гайд по restic + S3.

12. 2FA на панель хостера

Панель хостера — точка полного контроля над VPS. Утечка пароля = потеря всего. 2FA обязательна.

У нас на elistrax — TOTP + hardware key (FIDO2/WebAuthn) поддерживаются, включаются в 30 сек в личном кабинете. Включите сразу, до того, как что-то важное окажется на VPS.

Совет

Хороший финальный тест — попробуйте войти в VPS через ssh [email protected] с паролем: должно быть отказано (PermitRootLogin=no, PasswordAuthentication=no). Если пускает — вы что-то пропустили.

Частые вопросы

Стоит ли использовать SELinux/AppArmor?
На Ubuntu AppArmor уже включён и работает для критичных сервисов (nginx, mysql). Дополнительно настраивать имеет смысл только для специфичных приложений с чёткими требованиями.
SSH через VPN — переусердство?
Для проектов, где реально важна безопасность (fintech, PII) — нет. Обычная схема: VPS слушает SSH только на VPN-интерфейсе, публичный SSH-порт отключён.
Что делать при подозрении на взлом?
(1) Не удалять ничего — сохранить логи. (2) Изолировать VPS (отключить сеть на уровне хостера, не VPS). (3) Снять snapshot для forensic. (4) Пересобрать чистый VPS. (5) Восстановить данные из бэкапа + audit каждого файла.