Щодня в інтернеті відбуваються мільйони спроб злому серверів — автоматизовані боти сканують 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-сертифіката. Ви повинні дізнатися про проблему раніше за клієнтів.

Резюме

Безпека сервера — це не одноразова дія, а процес. Впровадьте цей чеклист при кожному розгортанні нового сервера і переглядайте налаштування щоквартально. Більшість зломів можна попередити базовою гігієною безпеки — не чекайте, поки проблема з'явиться сама.