Щодня в інтернеті відбуваються мільйони спроб злому серверів — автоматизовані боти сканують IP-адреси в пошуках відкритих портів і слабких паролів. Більшість зламів відбуваються не через вразливості нульового дня, а через банальні помилки конфігурації, які можна усунути за кілька годин. Ось повний чеклист для захисту свіжовстановленого або діючого Linux-сервера.
Автентифікація та доступ
1. Перейдіть на SSH-ключі замість паролів
Брутфорс SSH-пароля — найпоширеніша атака. Генеруйте пару ключів (ed25519 або RSA 4096) на локальній машині, копіюйте публічний ключ на сервер через ssh-copy-id, після чого повністю вимикайте парольну автентифікацію в /etc/ssh/sshd_config: PasswordAuthentication no.
2. Заборона входу root по SSH
Root — перший акаунт, який атакують боти. У тому ж файлі встановіть PermitRootLogin no. Для адміністрування використовуйте звичайного користувача з правами sudo.
3. Змініть стандартний порт SSH
Порт 22 — ціль для автоматизованих сканерів. Зміна на нестандартний порт (наприклад, 2277) не є панацеєю, але значно зменшує кількість спроб брутфорсу у логах. Налаштуйте Port 2277 у sshd_config і оновіть правила фаєрвола.
4. Двофакторна автентифікація (2FA)
Для критичних серверів налаштуйте TOTP через libpam-google-authenticator. Навіть якщо SSH-ключ скомпрометований — без другого фактора зловмисник не увійде.
Мережева безпека
5. Налаштуйте UFW (Uncomplicated Firewall)
Відкривайте лише ті порти, які дійсно потрібні. Базові правила: дозволити SSH (новий порт), HTTP (80), HTTPS (443), заблокувати все інше: ufw default deny incoming, ufw allow 2277/tcp, ufw allow 80,443/tcp, ufw enable.
6. Встановіть fail2ban
fail2ban аналізує логи і автоматично блокує IP-адреси, з яких надходить забагато невдалих спроб входу. Налаштуйте jail для SSH, Nginx, PHP-FPM і поштових сервісів. Стандартне налаштування — бан на 1 годину після 5 невдалих спроб за 10 хвилин.
7. Закрийте непотрібні порти і сервіси
Виконайте ss -tlnp і перегляньте всі відкриті порти. Кожен зайвий запущений сервіс — потенційна вразливість. Вимикайте те, що не використовується: systemctl disable --now назва-сервісу.
Оновлення та патчинг
8. Автоматичні безпекові оновлення
Встановіть unattended-upgrades на Ubuntu/Debian. Налаштуйте автоматичне застосування security-патчів без участі адміністратора. Критичні вразливості часто закриваються протягом годин після публікації — ручне оновлення запізнюється.
9. Регулярний аудит пакетів
Використовуйте apt list --upgradable або debsecan для перегляду вразливостей у встановленому ПЗ. Для CentOS/RHEL — yum updateinfo list security.
Права доступу і файлова система
10. Принцип мінімальних привілеїв
Веб-сервер (nginx, apache) повинен запускатися від непривілейованого користувача (www-data). Файли сайту не повинні належати цьому користувачу — лише читатися ним. Уникайте chmod 777 — це відкриває файли для запису будь-кому.
11. Налаштуйте /tmp і /var/tmp як noexec
Додайте параметр noexec для тимчасових директорій у /etc/fstab. Це унеможливлює запуск шкідливих скриптів, завантажених у тимчасові папки.
Моніторинг і виявлення вторгнень
12. Налаштуйте централізований аналіз логів
Логи auth.log, syslog, nginx/access.log та error.log повинні регулярно переглядатися або аналізуватися автоматично. Інструменти: Logwatch, GoAccess для nginx, або повноцінний стек ELK/Loki+Grafana.
13. Встановіть систему виявлення вторгнень (IDS)
AIDE або Tripwire відстежують зміни файлів на сервері і сповіщають про несанкціоновані модифікації. Це допомагає виявити компрометацію навіть після того, як зловмисник потрапив у систему.
Резервне копіювання та відновлення
14. Автоматичні бекапи з перевіркою відновлення
Бекап без перевірки відновлення — не бекап. Налаштуйте автоматичний бекап бази даних і файлів (щоденно) на окремий сервер або S3-сумісне сховище. Щомісяця тестуйте відновлення на staging-оточенні.
15. Моніторинг доступності і сповіщення
Налаштуйте зовнішній моніторинг (UptimeRobot, Betterstack або власний Uptime Kuma) із сповіщенням у Telegram або на email при падінні сервера або закінченні SSL-сертифіката. Ви повинні дізнатися про проблему раніше за клієнтів.
Резюме
Безпека сервера — це не одноразова дія, а процес. Впровадьте цей чеклист при кожному розгортанні нового сервера і переглядайте налаштування щоквартально. Більшість зломів можна попередити базовою гігієною безпеки — не чекайте, поки проблема з'явиться сама.