Захист сервера: повний посібник з безпеки Linux
Безпека сервера - це основа якісної роботи будь-якого бізнесу, стартапу чи простого веб-сайту. У 99% випадків порушення на клієнтських серверах стаються через злам, а сам злам - наслідок недостатньої безпеки сервера.
У цій статті ми розберемо найефективніші способи захисту сервера. Почнемо з мінімально необхідних заходів і завершимо просунутим захистом. Передусім матеріал призначений для новачків, але й будь-який системний адміністратор може використовувати його як чудову памʼятку.
Кожна інструкція максимально спрощена. Навіть якщо ви підключаєтеся до сервера вперше, не хвилюйтеся - ви з усім розберетеся.
Linux: базові налаштування
За замовчуванням команда sudo може не виконуватися в ОС Debian. Може знадобитися встановлення пакета командою apt install sudo або просто видалення sudo з використовуваних команд.
Перш ніж почати, переконайтеся, що в системі є текстовий редактор nano.
Ubuntu / Debian
CentOS
Регулярні оновлення системи
Це база, ключовий захід безпеки для будь-якого сервера. Якщо в системі виявлено вразливість, важливо одним із перших встановити оновлення та усунути проблему. Лише одна команда помітно знижує ризик зламу системи.
Ubuntu / Debian
CentOS
Використання SSH-ключів
Завдяки SSH-ключам підбір пароля стає просто нереалістичним. Тільки уявіть - кількість можливих комбінацій ключа сягає 2 у степені 2048.
Докладно процес використання SSH-ключів та вимкнення доступу до сервера за паролем описано в окремій статті - рекомендуємо ознайомитися.
Зміна порту SSH
Порт 22, стандартний для SSH, давно став мішенню для зловмисників. Сканери та боти безперервно простукують інтернет у пошуках серверів, відкритих на цьому порту. Їхнє завдання - знайти доступний сервер і почати перебір паролів за величезною базою простих і популярних комбінацій.
Результат такої активності - переповнені логи з повідомленнями про невдалі підключення, через що аналіз реальних загроз ускладнюється. Зміна порту значно скорочує цей шум і робить сервер менш помітним для подібних атак.
Простим рішенням буде замінити порт 22 на нестандартний, будь-який зручний вам. Наприклад, 50321. Спершу перевірте, що обраний порт не зайнятий іншим застосунком. Для цього скористаємося утилітою netstat із пакета net-tools.
Ubuntu / Debian
CentOS
Перевіряємо порт 50321. Це значення обрано лише як приклад - ви можете використати будь-який інший вільний порт.
Якщо команда нічого не вивела, порт вільний. Для порівняння перевіримо порт 22 і переконаємося, що він дійсно зайнятий і використовується.

Перейдіть до конфігурації SSH-сервера за допомогою редактора nano.
Приберіть символ # у рядку Port і замість 22 вкажіть бажане значення. У нашому випадку - 50321. Результат має виглядати так.

Перемкніть розкладку на англійську мову та натисніть CTRL+X, потім Y та Enter для збереження файлу. Після цього перезапустіть службу SSH.
Ubuntu / Debian
CentOS
Після перезапуску не поспішайте закривати поточне вікно сервера. Залиште його відкритим на деякий час. Якщо щось піде не так, ви зможете відкотити зміни. У новому вікні спробуйте підключитися до сервера за вказаним портом.
Резервне копіювання даних
На цих трьох пунктах базове налаштування безпеки можна було б завершити. Регулярні оновлення, SSH-ключі та нестандартний порт SSH у сукупності дають величезний ефект і знижують імовірність зламу на 90-95% порівняно зі стандартними налаштуваннями. Для недосвідченого користувача, який не зберігає на сервері надконфіденційні дані, цього більш ніж достатньо.
Проте ніколи не можна забувати про резервні копії. Це чудове правило, яке стане в пригоді не лише під час роботи із серверами, а й у власних проєктах. Жоден хостинг-провайдер не може гарантувати стовідсоткове збереження ваших даних. Випадки бувають різні - від банального збою дисків до великих інцидентів у дата-центрі. Такі ситуації трапляються рідко, але випробовувати долю не варто.
Розберемося на практиці. Для Ubuntu, Debian і CentOS можна використати вбудовану утиліту tar.
- /шлях/до/backup.tar.gz - шлях і назва архіву.
- /шлях/до/папки - шлях до папки, яку буде заархівовано. Можна вказати конкретний файл або символ * для додавання до архіву всього вмісту поточного каталогу.
Наприклад, заархівуємо папку share з кореневого каталогу /root. Спершу переконаємося, що перебуваємо в потрібному каталозі.
Потім виконаємо архівацію через tar.
Після завершення архівації виконайте команду ls і переконайтеся, що файл дійсно створено.

Далі з архівом можна вчинити по-різному. Ви можете завантажити його на свій компʼютер за sFTP або вивантажити в хмарне сховище. Ручної копії раз на два тижні зазвичай достатньо, хоча все залежить від типу проєкту. Для великих проєктів архівацію та вивантаження на зовнішнє сховище можна автоматизувати через Cron, навіть з інтервалом у 24 години.
Linux: просунутий захист
Налаштування брандмауера
Скористаємося утилітою iptables - вона вбудована в Ubuntu, Debian і CentOS. Переглянути поточні правила можна так.
Щоб уникнути втрати доступу до сервера, насамперед явно дозвольте порт SSH. Вкажіть свій порт у параметрі --dport. У нашому прикладі це порт 50321.
Нижче наведено часто використовувані команди iptables. Конфігурацію фаєрвола рекомендуємо добирати індивідуально під свої завдання.
Заборонити весь трафік з конкретної адреси. У параметрі -s вказується вихідна адреса.
Заборонити вхідний трафік на певному порту. У параметрі --dport вказується порт, який блокується.
Щоб зберегти створені правила, скористайтеся командою нижче.
Ubuntu / Debian
CentOS
Процес налаштування iptables докладно описано в окремій статті - рекомендуємо ознайомитися.
Fail2Ban - блокування брутфорсерів
Fail2Ban - ефективний інструмент для підвищення безпеки сервера. Він відстежує логи системних служб і автоматично блокує IP-адреси, з яких виконуються багаторазові невдалі спроби входу. Такий підхід захищає сервер від перебору паролів і водночас розвантажує логи від зайвих даних.
Встановлення
Ubuntu / Debian
CentOS
Запустимо службу, додамо її до автозавантаження та перевіримо статус.

Не рекомендується безпосередньо змінювати файли /etc/fail2ban/fail2ban.conf та /etc/fail2ban/jail.conf - під час оновлень вони можуть бути перезаписані. Замість цього створіть копії з розширенням .local і вносьте зміни до них.
Відкрийте файл у текстовому редакторі.
Основні налаштування виглядають так.
Ви можете задати власні значення, наприклад суворіші, як на знімку екрана нижче.

За значення bantime = -1 адреси порушників блокуються назавжди. Це ефективний метод боротьби з ботами, але застосовувати його слід обережно, щоб випадково не заблокувати довірених користувачів.
Після внесення змін перезапустіть Fail2Ban.
Перевірити журнал роботи можна так.
Двофакторна автентифікація через Google Authenticator
Двофакторна автентифікація значно підвищує безпеку сервера. Після її налаштування під час входу спершу запитується одноразовий OTP-код, який оновлюється кожні 30 секунд, а потім пароль від сервера. Зважайте, що для авторизації щоразу знадобиться телефон.
Встановлення модуля PAM
Ubuntu / Debian
CentOS
Виконайте команду від імені користувача, для якого налаштовується 2FA.
Система поставить кілька запитань. На запитання Do you want authentication tokens to be time-based (y/n) введіть y, щоб використовувати одноразові паролі за часом (TOTP).
Після цього зʼявиться великий QR-код, дані для ручного додавання та коди відновлення. Коди відновлення збережіть у надійному місці - вони знадобляться, якщо ви втратите доступ до генератора кодів.

Встановіть застосунок-автентифікатор Google на телефон: Android або iOS. Відскануйте запропонований код, після чого акаунт сервера додасться до застосунку.

Дайте відповідь на решту запитань.
- Update the .google_authenticator file (y/n) - введіть y, щоб зберегти налаштування.
- Do you want to disallow multiple uses of the same authentication token (y/n) - рекомендується y, щоб виключити повторне використання того самого токена.
- Збільшення часового вікна - за замовчуванням допускається розсинхрон часу до 30 секунд (3 токени: попередній, поточний і наступний). За проблем із точністю синхронізації вікно можна розширити до 17 токенів і допуску в 4 хвилини. Введіть y, якщо стикаєтеся з розсинхронізацією часу.
- Enable rate-limiting (y/n) - введіть y, щоб обмежити частоту спроб автентифікації та захиститися від перебору.
Відкрийте файл конфігурації PAM для SSH.
Додайте на початок файлу такий рядок. Він вказує системі використовувати модуль pam_google_authenticator для автентифікації.

Збережіть і закрийте файл, потім відкрийте конфігурацію SSH.
Встановіть значення yes для параметра ChallengeResponseAuthentication. Це налаштування вмикає використання PAM і вимагає одноразовий пароль на додачу до основного способу входу.

Збережіть файл і перезапустіть службу SSH, щоб застосувати налаштування.
Ubuntu / Debian
CentOS
Спробуйте підключитися до сервера. Спершу система запитає код автентифікатора - введіть його.

Потім введіть пароль від сервера. Підключення виконано успішно.
Антивірус ClamAV
Операційні системи на базі Linux вважаються більш захищеними, ніж Windows, але антивірус усе одно може бути корисним. Це особливо важливо, якщо ви часто обмінюєтеся файлами або використовуєте сервер у корпоративному середовищі. Розглянемо безкоштовний антивірус ClamAV з відкритим вихідним кодом. Він сканує систему та виявляє віруси, трояни, шпигунські програми та інші види шкідливого ПЗ.
Встановлення
Ubuntu / Debian
CentOS
Після встановлення оновіть базу даних вірусів. Спершу зупиніть службу оновлення, потім запустіть оновлення вручну.
Переконайтеся, що службу запущено.
Ручне сканування
Просканувати конкретну папку можна так.
Для сканування всіх файлів системи скористайтеся командою нижче.