Большинство атак — работа автоматических ботов. Они ищут стандартные конфигурации: порт 22, пользователя root, пароль 123456. Если сервер настроен по умолчанию — его взломают за часы или дни. Этот чек-лист — пошаговое руководство для тех, кто впервые поднял VPS и хочет закрыть основные дыры.

Для кого этот чек-лист

Для владельцев VPS на Ubuntu, Debian, CentOS, которые разворачивают сайт или приложение. Для тех, у кого нет штатного системного администратора.

1. Обновления: закрываем известные уязвимости

Самый скучный, но самый важный пункт. Патчи безопасности выходят каждую неделю, а критические — иногда по несколько раз в день. Установить их — задача №1 после первого входа на сервер.

# Debian / Ubuntu
sudo apt update && sudo apt full-upgrade -y

# RHEL / CentOS / Alma
sudo dnf upgrade --refresh -y

Настройте автоматические обновления безопасности — они будут ставиться сами, без вашего участия. Для Ubuntu/Debian это unattended-upgrades, для RHEL — dnf-automatic.

sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure --priority=low unattended-upgrades

Совет: если сервер критичен к простоям, используйте Livepatch или KernelCare — они «горячо» подменяют ядро без перезагрузки.

2. SSH: закрываем главную дверь

SSH — самая атакуемая служба на любом публичном Linux-хосте. Если сделать только один пункт из этого чек-листа — сделайте этот. Всё меняется в файле /etc/ssh/sshd_config:

PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
AllowUsers deploy ops
Protocol 2
X11Forwarding no
MaxAuthTries 3
ClientAliveInterval 300
ClientAliveCountMax 2
  • PermitRootLogin no — запрещает вход под root напрямую. Атакующий не сможет перебирать пароль администратора.
  • PasswordAuthentication no — вход только по SSH-ключам. Пароли подобрать невозможно.
  • AllowUsers — только указанные пользователи могут подключаться.
  • MaxAuthTries 3 — после трёх неудачных попыток соединение разрывается.
Важно перед отключением паролей

Сначала сгенерируйте SSH-ключ и скопируйте его на сервер. Иначе заблокируете сами себя. И проверить конфиг перед перезапуском: sudo sshd -t.

ssh-keygen -t ed25519 -C "deploy@yourorg"
ssh-copy-id -i ~/.ssh/id_ed25519.pub deploy@server-ip

# Проверка и перезапуск
sudo sshd -t
sudo systemctl restart sshd

Смена порта. Перевод SSH с 22 на другой (например, 2222) сокращает шум от массовых сканеров в разы. Это не защита, но уменьшает количество мусора в логах.

3. Firewall: запрещаем всё, кроме нужного

Принцип: default deny, потом разрешения. Сервер должен принимать только тот трафик, который вы явно ожидаете.

# Ubuntu / Debian (UFW)
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw allow 443/tcp
sudo ufw allow 80/tcp
sudo ufw enable
sudo ufw status verbose
# RHEL / CentOS (firewalld)
sudo firewall-cmd --set-default-zone=drop
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --reload

Открывайте только те порты, которые реально нужны. Нет почтового сервера — не открывайте 25, 465, 587. База данных доступна только локально — не открывайте 3306 или 5432.

4. Fail2Ban: автоматическая блокировка

Fail2Ban мониторит логи и автоматически блокирует IP-адреса, с которых идут подозрительные действия — например, множественные неудачные попытки входа по SSH.

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

Создайте файл /etc/fail2ban/jail.d/sshd.local:

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
findtime = 600
ignoreip = 127.0.0.1/8

Проверить статус: sudo fail2ban-client status sshd. Через несколько дней в логах увидите, сколько IP уже заблокировано.

5. Пользователи и права

Работа под root — как езда без ремня. Удобно, пока не врежешься. Принцип минимальных привилегий: у каждого пользователя ровно столько прав, сколько нужно для его задач.

  • Создайте отдельного пользователя. adduser deploy && usermod -aG sudo deploy. Запретите вход root по SSH.
  • Используйте sudo вместо root-сессии. Это даёт аудит: видно, кто что делал.
  • Ревизия аккаунтов. Удаляйте пользователей, которые больше не нужны. Проверка: cat /etc/passwd.
  • Заблокируйте системные аккаунты. usermod -s /usr/sbin/nologin daemon и так далее для остальных.

6. Минимизация: убираем лишнее

Каждый лишний пакет, служба или компилятор — это будущая уязвимость. Проверьте, что реально работает на сервере:

# Открытые порты
ss -tuln

# Запущенные службы
systemctl list-units --type=service --state=running

# Отключить ненужное
sudo systemctl disable --now имя-службы

# Удалить небезопасные протоколы
sudo apt purge telnet rsh-client xinetd -y
sudo apt autoremove -y

Telnet, rsh, FTP — небезопасные протоколы, которые не должны быть на сервере.

7. Мониторинг и логи

Большинство атак можно заметить на ранней стадии — если смотреть в логи. Всплеск неудачных попыток входа, необычные запросы, новые файлы в неожиданных местах — всё это сигналы.

  • Логи SSH. /var/log/auth.log (Debian/Ubuntu) или /var/log/secure (RHEL). Ищите всплески неудачных попыток.
  • Мониторинг доступности. UptimeRobot или Better Stack проверяют сервер каждую минуту и присылают алерт при падении.
  • auditd. Записывает системные вызовы и изменения файлов: apt install auditd.
  • AIDE. Отслеживает изменения в критичных файлах и уведомляет о подозрительных модификациях.

8. Аудит безопасности: проверяем себя

Lynis — открытый инструмент для аудита безопасности Linux. Он сканирует систему, проверяет конфигурацию и выдаёт рекомендации по улучшению.

sudo apt install lynis -y
sudo lynis audit system

Lynis проверит boot loader, конфигурационные файлы, установленные пакеты, права доступа к директориям, настройки логирования. Результат — отчёт с оценкой и списком рекомендаций.

9. Дополнительные меры

  • SELinux / AppArmor. Мандатный контроль доступа. Ограничивает то, что может делать процесс, даже если он скомпрометирован. Не отключайте их без причины.
  • Автоматические бэкапы. Настройте резервное копирование конфигов и данных. Храните бэкапы вне сервера (S3, Яндекс.Облако).
  • 2FA для SSH. Google Authenticator или аналогичные PAM-модули. Особенно актуально, если SSH открыт в интернет.
  • needrestart. Уведомляет после обновлений, какие службы или ядро нужно перезапустить: apt install needrestart.

Итоговый чек-лист

# Что сделать
1Обновить систему
2Включить автообновления
3Запретить вход root по SSH
4Отключить пароли для SSH
5Сменить порт SSH
6Настроить firewall
7Открыть только нужные порты
8Установить Fail2Ban
9Создать отдельного пользователя
10Проверить открытые порты
11Удалить ненужные пакеты
12Запустить аудит Lynis
13Настроить мониторинг
14Настроить бэкапы

Безопасность — это не разовая настройка, а процесс. Настроили один раз — проверяйте раз в квартал: вышли новые патчи, появились новые уязвимости, изменилась конфигурация.

Настроим сервер под ключ

Мы в «Русу по Вкусу» настраиваем серверы с нуля: обновления, SSH, firewall, Fail2Ban, мониторинг, бэкапы. Если у вас уже есть VPS, но вы не уверены в его безопасности — проведём начальную проверку и покажем, что закрыть в первую очередь.