Як захистити свій сервер? Основи кібербезпеки
Last updated
Last updated
Безпека сервера — це основа якісної роботи будь-якого бізнесу, стартапу або простого вебсайту. У 99% випадків порушення на клієнтських серверах відбуваються через злом. А злом, своєю чергою, через недостатню безпеку сервера.
У цій статті ми розглянемо найбільш ефективні способи захисту свого сервера. Почнемо з мінімальних необхідностей і закінчимо розширеним захистом. У першу чергу стаття призначена для новачків, однак будь-який системний адміністратор може використовувати її як чудовий довідник.
Кожна інструкція максимально спрощена. Навіть якщо ви вперше підключаєтесь до сервера, не хвилюйтеся — ви розберетеся!
Зверніть увагу, що за замовчуванням команда sudo може не виконуватися в ОС Debian. Може знадобитися встановлення пакета sudo через команду apt install sudo
або просто видалення sudo з використовуваних команд.
Перед початком використовуйте команду sudo apt install nano
(Ubuntu/Debian) або yum install nano
(CentOS), щоб переконатися, що утиліта nano
дійсно встановлена на вашій системі.
Це основа, ключова міра для забезпечення безпеки на будь-якому сервері. У разі виявлення вразливості в системі будьте першими, хто оновиться для усунення проблеми. Усього одна команда значно мінімізує ризик злому вашої системи:
sudo apt update && sudo apt upgrade -y
Завдяки SSH-ключам процес підбору пароля стає практично неможливим. Уявіть собі, існує 2**2048 комбінацій ключа.
Для детального ознайомлення з процесом використання SSH-ключів, а також відключення доступу до сервера за паролем рекомендуємо ознайомитися з нашими статтям
Порт 22, стандартний для SSH, вже давно став ціллю для зловмисників. Сканери та боти безперервно «простукують» інтернет у пошуках серверів, відкритих на цьому порту. Їхнє завдання — знайти доступний сервер і почати підбір паролів, використовуючи величезну базу простих і популярних комбінацій.
Результат? Навіть якщо ваш сервер захищений, його логи все одно будуть переповнені великою кількістю повідомлень про невдалі підключення, що може ускладнити аналіз реальних загроз. Зміна порту дозволяє значно зменшити цей «шум» і зробити ваш сервер менш помітним для такого типу атак.
Простим рішенням стане зміна порту 22 на нестандартний, будь-який, який вам до вподоби. Наприклад, 50321.
Спочатку переконайтеся, що порт, який ви хочете використовувати, не зайнятий жодним іншим додатком. Для цього скористайтеся утилітою netstat. Переконайтеся, що встановлений необхідний пакет net-tools:
sudo apt install net-tools -y
Перевірте порт 50321:
Зверніть увагу, що порт 50321 обраний всього лише як приклад. У разі необхідності ви можете використати будь-який інший.
Нічого не вивелося? Отже, порт вільний. Можемо перевірити порт 22 і побачити, що він дійсно зайнятий і використовується.
Перейдіть до конфігурації SSH-сервера. Використовуйте текстовий редактор nano:
Приберіть #
у рядку port
і замість 22
вкажіть бажаний. У нашому випадку — 50321
. Це має виглядати так:
Перемкніть розкладку на англійську мову та натисніть CTRL+X
, далі Y
, а потім Enter для збереження файлу.
Перезапустіть сервіс SSH:
sudo systemctl restart ssh
Після перезапуску не поспішайте закривати поточне вікно сервера. Залиште його відкритим тимчасово. Якщо щось піде не так, то можна буде скасувати зміни.
Спробуйте в новому вікні підключитися до сервера, використовуючи зазначений порт.
На цих трьох пунктах можна було б завершити базові налаштування безпеки. Регулярні оновлення, SSH-ключі та нестандартний порт SSH у сукупності дають величезний ефект. Дотримання цих пунктів знизить імовірність злому на 90–95% порівняно зі стандартними налаштуваннями. Якщо ви недосвідчений користувач і не розміщуєте на сервері надсекретні дані, то цього буде більш ніж достатньо.
Проте ніколи не забувайте про резервні копії даних. Це чудове правило, яке допоможе вам не лише під час роботи з серверами, а й у ваших власних проєктах. Жоден хостинг-провайдер не може гарантувати 100% збереження ваших даних. Трапляються найрізноманітніші випадки: від банального збою дисків до великих інцидентів у дата-центрі. Попри те, що такі випадки є рідкістю, не варто випробовувати долю. Приділіть трохи часу створенню копії важливих даних і більше не турбуйтеся про можливі втрати.
Для Ubuntu, Debian, CentOS можна використовувати вбудовану утиліту tar
. Якщо вона не встановлена, скористайтеся командою apt install tar -y
або yum install tar -y
/шлях/до/backup.tar.gz
— шлях і назва архіву.
/шлях/до/папки
— шлях до папки, яка буде архівована. Ви можете вказати назву конкретного файлу або просто "*"
, щоб додати в архів усі папки та файли з поточного каталогу.
Наприклад, заархівуємо папку share
, яка знаходиться в кореневому каталозі /root
.
Перевіряємо, що ми дійсно в каталозі /root
:
Використовуємо команду для архівації через tar
:
Після завершення архівації використовуйте команду ls
, щоб переконатися, що файл дійсно створений.
Далі існує маса варіантів дій із цим архівом. Ви можете завантажити його на свій комп'ютер через sFTP
або на хмарне сховище. Створення ручної копії раз на 2 тижні буде цілком достатньо (однак це залежить від типу вашого проєкту).
Можна налаштувати автоматичне створення архіву через Cron
із подальшим завантаженням на зовнішнє сховище — навіть із інтервалом у 24 години. Але це вже для особливо великих проєктів.
Скористаємося утилітою iptables
(вбудована в Ubuntu, Debian, CentOS). Перевірити поточні правила можна так:
Щоб уникнути проблем із втратою доступу до сервера, передусім слід явно дозволити порт SSH. Залежно від того, який порт для SSH ви використовуєте, вкажіть його в параметрі --dport
.
У нашому випадку це буде порт 50321
:
Далі наведено список часто використовуваних команд в iptables
. Рекомендуємо розглядати використання певних конфігурацій файрвола індивідуально.
Заборонити весь трафік із конкретної адреси. Де в аргументі -s
вказується вихідна адреса:
Заборонити вхідний трафік на певному порту. Де --dport
— це порт, що блокується:
Для збереження створених правил використовуйте команду:
Процес налаштування iptables
докладно описаний в окремій статті. Рекомендуємо ознайомитися.
Це ефективний інструмент для підвищення безпеки серверів. Він відстежує логи системних служб і автоматично блокує IP-адреси, які здійснюють багаторазові невдалі спроби входу на сервер. Такий метод захисту запобігає злому методом перебору паролів і розвантажує логи від зайвих даних.
Установка
sudo apt install fail2ban -y
Переконайтеся, що служба Fail2Ban запущена, і перевірте її статус:
Не рекомендується змінювати безпосередньо файли конфігурації /etc/fail2ban/fail2ban.conf
і /etc/fail2ban/jail.conf
, оскільки вони можуть бути перезаписані при оновленнях. Замість цього створіть їхні копії з розширенням .local
:
Відкрийте файл у текстовому редакторі:
Основні налаштування:
Ви можете встановити власні значення. Наприклад, ось такі (як на скріншоті) для більш суворих блокувань. Зверніть увагу, що за такими налаштуваннями адреси порушників блокуватимуться назавжди. Це ефективний метод боротьби з ботами, але його слід застосовувати з обережністю, щоб уникнути блокування довірених користувачів.
Після внесення змін перезапустіть Fail2Ban:
Перевірка журналу налагодження:
Використання двофакторної автентифікації значно підвищує безпеку серверів. Після налаштування під час входу на сервер спочатку запитуватиметься OTP-код (оновлюється кожні 30 секунд), а потім пароль від самого сервера. Зверніть увагу, що для авторизації на сервері потрібно буде щоразу використовувати телефон.
Установка модуля PAM для Google Authenticator
sudo apt install libpam-google-authenticator
Виконайте команду google-authenticator
від імені користувача, для якого налаштовується 2FA:
Вам буде поставлено наступне запитання:
Do you want authentication tokens to be time-based (y/n): Введіть y
, щоб використовувати одноразові паролі (TOTP).
Далі відобразиться великий QR-код, дані для ручного додавання і коди відновлення. Збережіть ці дані у безпечному місці, вони знадобляться у випадку втрати доступу до генератора кодів.
Завантажте застосунок Google Authenticator: 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 секунд. Для компенсації можливого розсинхрону часу між клієнтом і сервером передбачено використання додаткових токенів до та після поточного часу. Це дозволяє допустити розсинхрон часу до 30 секунд між сервером автентифікації та клієнтом.
Якщо ви стикаєтеся з проблемами через низьку точність синхронізації часу, ви можете збільшити тимчасове вікно з його стандартного розміру (3 дозволених токени: попередній, поточний і наступний) до 17 дозволених токенів (8 попередніх, поточний і 8 наступних). Це забезпечить допустимий розсинхрон часу до 4 хвилин між клієнтом і сервером. — Введіть y щоб збільшити тимчасове вікно, що може бути корисним у разі розсинхронізації часу.
Enable rate-limiting (y/n): Введіть y для обмеження частоти спроб автентифікації, щоб запобігти атакам перебором.
Відкрийте файл конфігурації PAM для SSH:
Додайте наступний рядок на початок файлу. Це вказує системі використовувати модуль pam_google_authenticator
для автентифікації.
Збережіть і закрийте файл. Далі відкрийте файл конфігурації SSH:
Установіть значення yes
для параметра ChallengeResponseAuthentication
. Ці налаштування увімкнуть використання PAM і вимагатимуть як публічного ключа, так і одноразового пароля для автентифікації.
Збережіть файл і закрийте. Перезапустіть службу SSH для застосування нових налаштувань:
sudo systemctl restart ssh
Спробуйте підключитися до сервера. Спочатку буде запитано код автентифікатора
А потім пароль від сервера. Якщо все налаштовано правильно, підключення буде успішним.
Попри те, що операційні системи на базі Linux вважаються більш захищеними, ніж Windows, використання антивірусу може бути корисним. Це особливо важливо, якщо ви часто обмінюєтеся файлами або використовуєте сервер у корпоративному середовищі. Ми розглянемо безкоштовний антивірус ClamAV з відкритим кодом. Він може сканувати систему та виявляти віруси, трояни, шпигунські програми та інші види шкідливого ПЗ.
Установка
sudo apt install clamav -y
Після установки рекомендується оновити базу даних вірусів. Для цього спершу зупиніть програму, а потім виконайте команду оновлення:
Переконайтеся, що служба запущена:
Ручне сканування:
Сканування всіх файлів системи: