Каждый новый сервер требует базовой настройки безопасности до того, как на нём будет запущено какое-либо приложение. Этот чеклист охватывает все уровни: от системных обновлений до мониторинга и бэкапов.
Раздел 1: Обновление системы
apt update && apt upgrade -y
apt install unattended-upgrades -y
dpkg-reconfigure -plow unattended-upgrades # включить автообновления безопасности
Раздел 2: Пользователи и sudo
useradd -m -s /bin/bash admin
usermod -aG sudo admin
passwd admin
# Проверить, что root-вход по паролю отключён
passwd -l root
Раздел 3: SSH Hardening
# Уже подробно описан в статье SSH Hardening
# Ключевое:
Port 2222
PermitRootLogin no
PasswordAuthentication no
AllowUsers admin
Раздел 4: Firewall (UFW)
apt install ufw -y
ufw default deny incoming
ufw default allow outgoing
ufw allow 2222/tcp # SSH (ваш порт)
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable
ufw status verbose
Раздел 5: fail2ban
apt install fail2ban -y
systemctl enable --now fail2ban
Раздел 6: Синхронизация времени
apt install chrony -y
systemctl enable --now chrony
timedatectl status
Раздел 7: Мониторинг и аудит
apt install auditd audispd-plugins -y
systemctl enable --now auditd
apt install logwatch -y
Полный чеклист из 30 пунктов
| # | Действие | Приоритет |
|---|---|---|
| 1 | apt update && apt upgrade | Критический |
| 2 | Включить unattended-upgrades | Высокий |
| 3 | Создать non-root пользователя | Критический |
| 4 | Настроить SSH ключи | Критический |
| 5 | Изменить порт SSH | Средний |
| 6 | PermitRootLogin no | Критический |
| 7 | PasswordAuthentication no | Критический |
| 8 | Настроить UFW/nftables | Критический |
| 9 | Установить fail2ban | Высокий |
| 10 | Настроить NTP (chrony) | Средний |
| 11 | Настроить hostname и /etc/hosts | Низкий |
| 12 | Установить auditd | Средний |
| 13 | Настроить logrotate | Средний |
| 14 | Установить ClamAV (по необходимости) | Средний |
| 15 | Настроить rkhunter | Средний |
| 16 | Настроить резервные копии | Критический |
| 17 | Проверить открытые порты | Высокий |
| 18 | Настроить swap (если нет) | Средний |
| 19 | Настроить sysctl hardening | Средний |
| 20 | Включить HSTS для веб-сервера | Высокий |
| 21 | Настроить SSL (Let's Encrypt) | Критический |
| 22 | Отключить неиспользуемые сервисы | Средний |
| 23 | Проверить SUID-файлы | Средний |
| 24 | Настроить мониторинг uptime | Высокий |
| 25 | Настроить email-алерты | Средний |
| 26 | Документировать конфигурацию | Средний |
| 27 | Настроить CrowdSec или OSSEC | Средний |
| 28 | Проверить права на файлы конфигов | Высокий |
| 29 | Настроить ротацию SSH-ключей | Низкий |
| 30 | Провести тест проникновения | Средний |
Sysctl hardening — дополнительный уровень защиты ядра. Добавьте в
/etc/sysctl.d/99-security.conf:
net.ipv4.tcp_syncookies = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.icmp_echo_ignore_broadcasts = 1
kernel.randomize_va_space = 2
kernel.dmesg_restrict = 1
Применить: sysctl --system
Типичные ошибки при первичной настройке
| Симптом | Причина |
|---|---|
| SSH-соединение обрывается сразу после ufw enable | Забыли заранее разрешить порт SSH (ufw allow 2222/tcp) до включения — файрвол активировался и закрыл единственный канал доступа |
| sshd: no hostkeys available после смены порта | В sshd_config поменяли Port, но не перезапустили сам сервис, либо в конфиге опечатка и sshd вовсе не стартует |
| fail2ban: Fail to start jail 'sshd'... Permission denied | Backend fail2ban не настроен на чтение systemd journal, либо logpath в jail.local указывает на несуществующий файл после смены порта SSH |
| unattended-upgrades: no packages found | В /etc/apt/apt.conf.d/50unattended-upgrades не раскомментированы нужные строки Origins-Pattern для конкретного дистрибутива |
| chronyd: Could not synchronise | Исходящий UDP-порт 123 заблокирован файрволом провайдера или самим ufw, если правило default deny outgoing выставлено слишком строго |
Когда этого чеклиста недостаточно
- Сервер хранит платёжные данные или подпадает под формальный стандарт (PCI DSS и подобные) — 30 шагов дают базовую гигиену, но не заменяют официальный аудит соответствия
- Нужна защита от атак на уровне приложения — SQL-инъекции, XSS и логические уязвимости чеклист не закрывает, он охватывает только ОС и сетевой периметр
- Инфраструктура состоит из десятков серверов — повторять 30 шагов вручную на каждом не масштабируется, нужна автоматизация через Ansible или Terraform
- Требуется защита от объёмной DDoS-атаки — fail2ban и ufw эффективны против точечного перебора, но бессильны против атаки на пропускную способность канала, для этого нужна защита на уровне провайдера или CDN
Проверка результата
После прохождения всех 30 пунктов прогоните быстрый аудит вручную — чеклист легко пройти формально, отметив пункт, но не проверив, что настройка реально работает. Более глубокий разбор SSH-защиты и аудита событий — в статьях про SSH hardening и про мониторинг через auditd.
# Какие порты реально слушают на сервере
sudo ss -tlnp
# Правила файрвола совпадают с ожиданием
sudo ufw status verbose
# jail fail2ban активен и банит попытки подбора
sudo fail2ban-client status sshd
# Ключевые сервисы включены в автозагрузку
sudo systemctl is-enabled fail2ban auditd chrony