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

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

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

Далі з архівом можна вчинити по-різному. Ви можете завантажити його на свій компʼютер за sFTP або вивантажити в хмарне сховище. Ручної копії раз на два тижні зазвичай достатньо, хоча все залежить від типу проєкту. Для великих проєктів архівацію та вивантаження на зовнішнє сховище можна автоматизувати через Cron, навіть з інтервалом у 24 години.
#Linux: просунутий захист
#Налаштування брандмауера
Скористаємося утилітою iptables - вона вбудована в Ubuntu, Debian і CentOS. Переглянути поточні правила можна так.
sudo iptables -L -v -nЩоб уникнути втрати доступу до сервера, насамперед явно дозвольте порт SSH. Вкажіть свій порт у параметрі --dport. У нашому прикладі це порт 50321.
sudo iptables -A INPUT -p tcp --dport 50321 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPTНижче наведено часто використовувані команди iptables. Конфігурацію фаєрвола рекомендуємо добирати індивідуально під свої завдання.
Заборонити весь трафік з конкретної адреси. У параметрі -s вказується вихідна адреса.
sudo iptables -A INPUT -s 192.168.1.100 -j DROPЗаборонити вхідний трафік на певному порту. У параметрі --dport вказується порт, який блокується.
sudo iptables -A INPUT -p tcp --dport 8080 -j DROPЩоб зберегти створені правила, скористайтеся командою нижче.
Ubuntu / Debian
sudo /sbin/iptables-saveCentOS
sudo /sbin/service iptables saveПроцес налаштування iptables докладно описано в окремій статті - рекомендуємо ознайомитися.
#Fail2Ban - блокування брутфорсерів
Fail2Ban - ефективний інструмент для підвищення безпеки сервера. Він відстежує логи системних служб і автоматично блокує IP-адреси, з яких виконуються багаторазові невдалі спроби входу. Такий підхід захищає сервер від перебору паролів і водночас розвантажує логи від зайвих даних.
Встановлення
Ubuntu / Debian
sudo apt install fail2ban -yCentOS
sudo yum install epel-release
sudo yum install fail2banЗапустимо службу, додамо її до автозавантаження та перевіримо статус.
sudo systemctl start fail2ban
sudo systemctl enable fail2ban
sudo systemctl status fail2ban
Не рекомендується безпосередньо змінювати файли /etc/fail2ban/fail2ban.conf та /etc/fail2ban/jail.conf - під час оновлень вони можуть бути перезаписані. Замість цього створіть копії з розширенням .local і вносьте зміни до них.
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.localВідкрийте файл у текстовому редакторі.
nano /etc/fail2ban/jail.localОсновні налаштування виглядають так.
[DEFAULT]
# Ігноровані IP-адреси, наприклад ваша IP-адреса.
ignoreip = 127.0.0.1/8 ::1
# Час блокування IP-адреси.
bantime = 10m
# IP блокується, якщо виконує maxretry спроб за період findtime.
findtime = 10m
# Максимальна кількість спроб до блокування.
maxretry = 5Ви можете задати власні значення, наприклад суворіші, як на знімку екрана нижче.

За значення bantime = -1 адреси порушників блокуються назавжди. Це ефективний метод боротьби з ботами, але застосовувати його слід обережно, щоб випадково не заблокувати довірених користувачів.
Після внесення змін перезапустіть Fail2Ban.
sudo systemctl restart fail2banПеревірити журнал роботи можна так.
sudo tail -f /var/log/fail2ban.log#Двофакторна автентифікація через Google Authenticator
Двофакторна автентифікація значно підвищує безпеку сервера. Після її налаштування під час входу спершу запитується одноразовий OTP-код, який оновлюється кожні 30 секунд, а потім пароль від сервера. Зважайте, що для авторизації щоразу знадобиться телефон.
Встановлення модуля PAM
Ubuntu / Debian
sudo apt install libpam-google-authenticatorCentOS
sudo yum install epel-release
sudo yum install google-authenticatorВиконайте команду від імені користувача, для якого налаштовується 2FA.
google-authenticatorСистема поставить кілька запитань. На запитання 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.
sudo nano /etc/pam.d/sshdДодайте на початок файлу такий рядок. Він вказує системі використовувати модуль pam_google_authenticator для автентифікації.
auth required pam_google_authenticator.so
Збережіть і закрийте файл, потім відкрийте конфігурацію SSH.
sudo nano /etc/ssh/sshd_configВстановіть значення yes для параметра ChallengeResponseAuthentication. Це налаштування вмикає використання PAM і вимагає одноразовий пароль на додачу до основного способу входу.

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

Потім введіть пароль від сервера. Підключення виконано успішно.
#Антивірус ClamAV
Операційні системи на базі Linux вважаються більш захищеними, ніж Windows, але антивірус усе одно може бути корисним. Це особливо важливо, якщо ви часто обмінюєтеся файлами або використовуєте сервер у корпоративному середовищі. Розглянемо безкоштовний антивірус ClamAV з відкритим вихідним кодом. Він сканує систему та виявляє віруси, трояни, шпигунські програми та інші види шкідливого ПЗ.
Встановлення
Ubuntu / Debian
sudo apt install clamav -yCentOS
sudo yum install epel-release
sudo yum install clamav clamav-updateПісля встановлення оновіть базу даних вірусів. Спершу зупиніть службу оновлення, потім запустіть оновлення вручну.
sudo systemctl stop clamav-freshclam
sudo freshclamПереконайтеся, що службу запущено.
sudo systemctl start clamav-freshclamРучне сканування
Просканувати конкретну папку можна так.
clamscan -r /шлях/до/папкиДля сканування всіх файлів системи скористайтеся командою нижче.
sudo clamscan -r -i /Не знайшли відповідь? Ми на звязку 24/7.Написати в підтримку