Кожен новий сервер потребує базового налаштування безпеки до того, як на ньому буде запущено будь-який застосунок. Цей чеклист охоплює всі рівні: від системних оновлень до моніторингу та резервного копіювання.
Розділ 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