Захист сервера: повний посібник з безпеки Linux

20 хв читанняОновлено 22 травня 2026

Безпека сервера - це основа якісної роботи будь-якого бізнесу, стартапу чи простого веб-сайту. У 99% випадків порушення на клієнтських серверах стаються через злам, а сам злам - наслідок недостатньої безпеки сервера.

У цій статті ми розберемо найефективніші способи захисту сервера. Почнемо з мінімально необхідних заходів і завершимо просунутим захистом. Передусім матеріал призначений для новачків, але й будь-який системний адміністратор може використовувати його як чудову памʼятку.

Кожна інструкція максимально спрощена. Навіть якщо ви підключаєтеся до сервера вперше, не хвилюйтеся - ви з усім розберетеся.

#Linux: базові налаштування

За замовчуванням команда sudo може не виконуватися в ОС Debian. Може знадобитися встановлення пакета командою apt install sudo або просто видалення sudo з використовуваних команд.

Перш ніж почати, переконайтеся, що в системі є текстовий редактор nano.

Ubuntu / Debian

bash
sudo apt install nano

CentOS

bash
yum install nano

#Регулярні оновлення системи

Це база, ключовий захід безпеки для будь-якого сервера. Якщо в системі виявлено вразливість, важливо одним із перших встановити оновлення та усунути проблему. Лише одна команда помітно знижує ризик зламу системи.

Ubuntu / Debian

bash
sudo apt update && sudo apt upgrade -y

CentOS

bash
sudo yum update -y

#Використання SSH-ключів

Завдяки SSH-ключам підбір пароля стає просто нереалістичним. Тільки уявіть - кількість можливих комбінацій ключа сягає 2 у степені 2048.

Докладно процес використання SSH-ключів та вимкнення доступу до сервера за паролем описано в окремій статті - рекомендуємо ознайомитися.

#Зміна порту SSH

Порт 22, стандартний для SSH, давно став мішенню для зловмисників. Сканери та боти безперервно простукують інтернет у пошуках серверів, відкритих на цьому порту. Їхнє завдання - знайти доступний сервер і почати перебір паролів за величезною базою простих і популярних комбінацій.

Результат такої активності - переповнені логи з повідомленнями про невдалі підключення, через що аналіз реальних загроз ускладнюється. Зміна порту значно скорочує цей шум і робить сервер менш помітним для подібних атак.

Простим рішенням буде замінити порт 22 на нестандартний, будь-який зручний вам. Наприклад, 50321. Спершу перевірте, що обраний порт не зайнятий іншим застосунком. Для цього скористаємося утилітою netstat із пакета net-tools.

Ubuntu / Debian

bash
sudo apt install net-tools

CentOS

bash
sudo yum install net-tools

Перевіряємо порт 50321. Це значення обрано лише як приклад - ви можете використати будь-який інший вільний порт.

bash
sudo netstat -tuln | grep 50321

Якщо команда нічого не вивела, порт вільний. Для порівняння перевіримо порт 22 і переконаємося, що він дійсно зайнятий і використовується.

Вивід команди netstat для порту 22

Перейдіть до конфігурації SSH-сервера за допомогою редактора nano.

bash
nano /etc/ssh/sshd_config

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

Параметр Port у файлі sshd_config

Перемкніть розкладку на англійську мову та натисніть CTRL+X, потім Y та Enter для збереження файлу. Після цього перезапустіть службу SSH.

Ubuntu / Debian

bash
sudo systemctl restart ssh

CentOS

bash
sudo systemctl restart sshd

Після перезапуску не поспішайте закривати поточне вікно сервера. Залиште його відкритим на деякий час. Якщо щось піде не так, ви зможете відкотити зміни. У новому вікні спробуйте підключитися до сервера за вказаним портом.

#Резервне копіювання даних

На цих трьох пунктах базове налаштування безпеки можна було б завершити. Регулярні оновлення, SSH-ключі та нестандартний порт SSH у сукупності дають величезний ефект і знижують імовірність зламу на 90-95% порівняно зі стандартними налаштуваннями. Для недосвідченого користувача, який не зберігає на сервері надконфіденційні дані, цього більш ніж достатньо.

Проте ніколи не можна забувати про резервні копії. Це чудове правило, яке стане в пригоді не лише під час роботи із серверами, а й у власних проєктах. Жоден хостинг-провайдер не може гарантувати стовідсоткове збереження ваших даних. Випадки бувають різні - від банального збою дисків до великих інцидентів у дата-центрі. Такі ситуації трапляються рідко, але випробовувати долю не варто.

Розберемося на практиці. Для Ubuntu, Debian і CentOS можна використати вбудовану утиліту tar.

bash
tar -cvzf /шлях/до/backup.tar.gz /шлях/до/папки
  • /шлях/до/backup.tar.gz - шлях і назва архіву.
  • /шлях/до/папки - шлях до папки, яку буде заархівовано. Можна вказати конкретний файл або символ * для додавання до архіву всього вмісту поточного каталогу.

Наприклад, заархівуємо папку share з кореневого каталогу /root. Спершу переконаємося, що перебуваємо в потрібному каталозі.

bash
cd /root

Потім виконаємо архівацію через tar.

bash
tar -cvzf backup.tar.gz share

Після завершення архівації виконайте команду ls і переконайтеся, що файл дійсно створено.

Перелік файлів з архівом backup.tar.gz

Далі з архівом можна вчинити по-різному. Ви можете завантажити його на свій компʼютер за sFTP або вивантажити в хмарне сховище. Ручної копії раз на два тижні зазвичай достатньо, хоча все залежить від типу проєкту. Для великих проєктів архівацію та вивантаження на зовнішнє сховище можна автоматизувати через Cron, навіть з інтервалом у 24 години.

#Linux: просунутий захист

#Налаштування брандмауера

Скористаємося утилітою iptables - вона вбудована в Ubuntu, Debian і CentOS. Переглянути поточні правила можна так.

bash
sudo iptables -L -v -n

Щоб уникнути втрати доступу до сервера, насамперед явно дозвольте порт SSH. Вкажіть свій порт у параметрі --dport. У нашому прикладі це порт 50321.

bash
sudo iptables -A INPUT -p tcp --dport 50321 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT

Нижче наведено часто використовувані команди iptables. Конфігурацію фаєрвола рекомендуємо добирати індивідуально під свої завдання.

Заборонити весь трафік з конкретної адреси. У параметрі -s вказується вихідна адреса.

bash
sudo iptables -A INPUT -s 192.168.1.100 -j DROP

Заборонити вхідний трафік на певному порту. У параметрі --dport вказується порт, який блокується.

bash
sudo iptables -A INPUT -p tcp --dport 8080 -j DROP

Щоб зберегти створені правила, скористайтеся командою нижче.

Ubuntu / Debian

bash
sudo /sbin/iptables-save

CentOS

bash
sudo /sbin/service iptables save

Процес налаштування iptables докладно описано в окремій статті - рекомендуємо ознайомитися.

#Fail2Ban - блокування брутфорсерів

Fail2Ban - ефективний інструмент для підвищення безпеки сервера. Він відстежує логи системних служб і автоматично блокує IP-адреси, з яких виконуються багаторазові невдалі спроби входу. Такий підхід захищає сервер від перебору паролів і водночас розвантажує логи від зайвих даних.

Встановлення

Ubuntu / Debian

bash
sudo apt install fail2ban -y

CentOS

bash
sudo yum install epel-release sudo yum install fail2ban

Запустимо службу, додамо її до автозавантаження та перевіримо статус.

bash
sudo systemctl start fail2ban sudo systemctl enable fail2ban sudo systemctl status fail2ban
Статус служби Fail2Ban у терміналі

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

bash
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Відкрийте файл у текстовому редакторі.

bash
nano /etc/fail2ban/jail.local

Основні налаштування виглядають так.

ini
[DEFAULT] # Ігноровані IP-адреси, наприклад ваша IP-адреса. ignoreip = 127.0.0.1/8 ::1 # Час блокування IP-адреси. bantime = 10m # IP блокується, якщо виконує maxretry спроб за період findtime. findtime = 10m # Максимальна кількість спроб до блокування. maxretry = 5

Ви можете задати власні значення, наприклад суворіші, як на знімку екрана нижче.

Суворі налаштування у файлі jail.local

За значення bantime = -1 адреси порушників блокуються назавжди. Це ефективний метод боротьби з ботами, але застосовувати його слід обережно, щоб випадково не заблокувати довірених користувачів.

Після внесення змін перезапустіть Fail2Ban.

bash
sudo systemctl restart fail2ban

Перевірити журнал роботи можна так.

bash
sudo tail -f /var/log/fail2ban.log

#Двофакторна автентифікація через Google Authenticator

Двофакторна автентифікація значно підвищує безпеку сервера. Після її налаштування під час входу спершу запитується одноразовий OTP-код, який оновлюється кожні 30 секунд, а потім пароль від сервера. Зважайте, що для авторизації щоразу знадобиться телефон.

Встановлення модуля PAM

Ubuntu / Debian

bash
sudo apt install libpam-google-authenticator

CentOS

bash
sudo yum install epel-release sudo yum install google-authenticator

Виконайте команду від імені користувача, для якого налаштовується 2FA.

bash
google-authenticator

Система поставить кілька запитань. На запитання Do you want authentication tokens to be time-based (y/n) введіть y, щоб використовувати одноразові паролі за часом (TOTP).

Після цього зʼявиться великий QR-код, дані для ручного додавання та коди відновлення. Коди відновлення збережіть у надійному місці - вони знадобляться, якщо ви втратите доступ до генератора кодів.

QR-код команди google-authenticator

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

Одноразовий код у застосунку Google Authenticator

Дайте відповідь на решту запитань.

  • 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.

bash
sudo nano /etc/pam.d/sshd

Додайте на початок файлу такий рядок. Він вказує системі використовувати модуль pam_google_authenticator для автентифікації.

bash
auth required pam_google_authenticator.so
Файл sshd з підключеним модулем pam_google_authenticator

Збережіть і закрийте файл, потім відкрийте конфігурацію SSH.

bash
sudo nano /etc/ssh/sshd_config

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

Параметр ChallengeResponseAuthentication у sshd_config

Збережіть файл і перезапустіть службу SSH, щоб застосувати налаштування.

Ubuntu / Debian

bash
sudo systemctl restart ssh

CentOS

bash
sudo systemctl restart sshd

Спробуйте підключитися до сервера. Спершу система запитає код автентифікатора - введіть його.

Запит коду автентифікації під час підключення до сервера

Потім введіть пароль від сервера. Підключення виконано успішно.

#Антивірус ClamAV

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

Встановлення

Ubuntu / Debian

bash
sudo apt install clamav -y

CentOS

bash
sudo yum install epel-release sudo yum install clamav clamav-update

Після встановлення оновіть базу даних вірусів. Спершу зупиніть службу оновлення, потім запустіть оновлення вручну.

bash
sudo systemctl stop clamav-freshclam sudo freshclam

Переконайтеся, що службу запущено.

bash
sudo systemctl start clamav-freshclam

Ручне сканування

Просканувати конкретну папку можна так.

bash
clamscan -r /шлях/до/папки

Для сканування всіх файлів системи скористайтеся командою нижче.

bash
sudo clamscan -r -i /

Не знайшли відповідь? Ми на звязку 24/7.Написати в підтримку