Большинство атак — работа автоматических ботов. Они ищут стандартные конфигурации: порт 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, но вы не уверены в его безопасности — проведём начальную проверку и покажем, что закрыть в первую очередь.