Завдяки fail2ban, ваш Linux-комп’ютер автоматично блокуватиме IP-адреси, з яких надходить забагато невдалих спроб з’єднання. Це автоматизований захист! Ми покажемо вам, як його використовувати.
Захист – це головне
Відома Уолліс Сімпсон колись сказала: “Ніколи не буває занадто багато багатства чи занадто мало ваги”. Ми адаптували цю думку до нашого сучасного, взаємопов’язаного світу: ніколи не буває занадто багато обережності або занадто високого рівня безпеки.
Якщо ваш комп’ютер обробляє вхідні запити на підключення, такі як Secure Shell (SSH), або функціонує як веб-сервер чи поштовий сервер, вам необхідно захистити його від атак brute-force та спроб підбору паролів.
Для цього потрібно відстежувати запити на з’єднання, які не вдається автентифікувати. Якщо протягом короткого часу вони неодноразово виявляються невдалими, їх потрібно заблокувати від подальших спроб.
Єдиний ефективний спосіб досягти цього – автоматизувати цей процес. За допомогою простого налаштування, fail2ban буде виконувати моніторинг, блокування та розблокування за вас.
fail2ban взаємодіє з брандмауером Linux, iptables. Він посилює блокування підозрілих IP-адрес, додаючи правила до брандмауера. Для наочності, ми будемо використовувати iptables з порожнім набором правил.
Звичайно, якщо ви турбуєтесь про безпеку, у вас, ймовірно, вже є налаштований брандмауер зі значною кількістю правил. fail2ban лише додає та видаляє власні правила, не змінюючи основних налаштувань вашого брандмауера.
Переглянути наш порожній набір правил можна за допомогою команди:
sudo iptables -L
Встановлення fail2ban
Встановити fail2ban досить просто на всіх дистрибутивах, які ми використовували для підготовки цієї статті. В Ubuntu 20.04 команда виглядає так:
sudo apt-get install fail2ban
На Fedora 32 введіть:
sudo dnf install fail2ban
На Manjaro 20.0.1 ми використовували pacman:
sudo pacman -Sy fail2ban
Налаштування fail2ban
Після встановлення fail2ban, ви знайдете файл конфігурації за замовчуванням під назвою jail.conf. Цей файл може бути перезаписаний під час оновлення fail2ban, тому зміни в ньому не збережуться.
Тому, ми скопіюємо файл jail.conf у файл під назвою jail.local. Вносячи зміни в jail.local, ми гарантуємо, що наші налаштування збережуться під час оновлення. Обидва файли автоматично зчитуються fail2ban.
Ось як скопіювати файл:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Тепер відкрийте файл у вашому улюбленому редакторі. Ми будемо використовувати gedit:
sudo gedit /etc/fail2ban/jail.local
Нам потрібно знайти два розділи у файлі: [DEFAULT] та [sshd]. Зверніть увагу, що нам потрібні розділи конфігурації, а не просто згадки цих слів у коментарях.
Розділ [DEFAULT] знаходиться приблизно на 40-му рядку. Він досить великий і містить багато коментарів та пояснень.
Прокрутіть вниз до рядка 90, і ви побачите чотири параметри, які нам потрібні:
ignoreip: список IP-адрес, які ніколи не будуть заблоковані. Їм дозволено безперешкодно обходити блокування. IP-адреса localhost (127.0.0.1) вже є у списку, як і її аналог IPv6 (::1). Якщо є інші IP-адреси, які не повинні блокуватися, додайте їх сюди, розділяючи пробілами.
bantime: час, протягом якого IP-адреса буде заблокована (“m” означає хвилини). Якщо значення вказано без “m” або “h” (для годин), воно буде вважатися в секундах. Значення -1 заблокує IP-адресу назавжди. Будьте обережні, щоб випадково не заблокувати себе назавжди.
findtime: період часу, протягом якого надмірна кількість невдалих спроб з’єднання призведе до блокування IP-адреси.
maxretry: кількість невдалих спроб, що вважається “занадто великою”.
Якщо підключення з однієї IP-адреси має кількість невдалих спроб, що перевищує maxretry протягом проміжку часу findtime, ця IP-адреса блокується на час bantime. Виняток становлять лише IP-адреси зі списку ignoreip.
fail2ban розміщує IP-адреси в “в’язницю” (jail) на певний проміжок часу. fail2ban підтримує різні типи в’язниць, кожна з яких має налаштування для певного типу з’єднання. Це дозволяє застосовувати різні налаштування для різних типів з’єднань. Або ж ви можете дозволити fail2ban контролювати лише певні типи з’єднань.
Як ви вже могли здогадати з назви розділу [DEFAULT], налаштування, які ми щойно розглянули, є стандартними. Тепер подивимось на налаштування для SSH в’язниці.
Налаштування Jail
Jail дозволяють включати та виключати типи з’єднань з моніторингу fail2ban. Якщо стандартні налаштування вам не підходять для певної в’язниці, ви можете задати окремі значення для bantime, findtime та maxretry.
Прокрутіть вниз до рядка 280, і ви побачите розділ [sshd].
Тут можна налаштувати значення для SSH в’язниці. Щоб активувати її для моніторингу та блокування, потрібно додати наступний рядок:
enabled = true
Також додамо цей рядок:
maxretry = 3
За замовчуванням було п’ять, але ми хочемо бути обережнішими з SSH-з’єднаннями. Ми зменшили значення до трьох, потім зберегли та закрили файл.
Ми додали цю в’язницю до моніторингу fail2ban та змінили одне зі стандартних налаштувань. В’язниця може використовувати комбінацію стандартних налаштувань та налаштувань конкретної в’язниці.
Увімкнення fail2ban
Наразі ми встановили та налаштували fail2ban. Тепер ми повинні запустити його як службу, що автоматично запускається. Потім перевіримо, чи працює все належним чином.
Щоб увімкнути fail2ban як службу, використовуємо команду systemctl:
sudo systemctl enable fail2ban
Також використовуємо її для запуску служби:
sudo systemctl start fail2ban
Ми також можемо перевірити статус служби за допомогою systemctl:
sudo systemctl status fail2ban.service
Все виглядає добре, статус служби зелений.
Давайте перевіримо, чи fail2ban працює коректно:
sudo fail2ban-client status
Тут відображається наша конфігурація. Ми включили одну в’язницю з назвою [sshd]. Якщо додати назву в’язниці до нашої попередньої команди, ми зможемо побачити більше деталей:
sudo fail2ban-client status sshd
Тут відображається кількість збоїв та заблокованих IP-адрес. Звісно, на даний момент всі значення нульові.
Тестування нашої в’язниці
З іншого комп’ютера ми спробуємо підключитись до нашого тестового комп’ютера через SSH та навмисно введемо неправильний пароль. Ви маєте три спроби на правильне введення пароля для кожної спроби підключення.
Значення maxretry спрацює після трьох невдалих спроб підключення, а не після трьох невдалих спроб введення пароля. Тому, нам потрібно тричі ввести неправильний пароль, щоб спроба підключення була невдалою.
Потім ми зробимо ще одну спробу підключення і знову тричі введемо неправильний пароль. Перший неправильний пароль третьої спроби підключення має викликати реакцію fail2ban.
Після першого неправильного пароля на третій спробі підключення, ми не отримуємо відповіді від віддаленого комп’ютера. Нам нічого не пояснюють, нас просто ігнорують.
Потрібно натиснути Ctrl+C, щоб повернутися до командного рядка. Якщо ми спробуємо знову, ми отримаємо іншу відповідь:
ssh [email protected]
Раніше повідомлення про помилку було “У дозволі відмовлено”. Цього разу у підключенні відмовили категорично. Ми персона нон грата. Нас заблокували.
Давайте знову подивимось деталі [sshd] в’язниці:
sudo fail2ban-client status sshd
Є три збої, одна IP-адреса (192.168.4.25) заблокована.
Як ми вже згадували, fail2ban застосовує блокування, додаючи правила до набору правил брандмауера. Поглянемо ще раз на набір правил (раніше він був порожнім):
sudo iptables -L
До політики INPUT додано правило, що перенаправляє SSH-трафік до ланцюжка f2b-sshd. Правило у ланцюжку f2b-sshd відхиляє SSH-з’єднання з 192.168.4.25. Ми не змінювали налаштування за замовчуванням для часу блокування, тому через 10 хвилин цю IP-адресу буде розблоковано, і вона зможе знову робити запити на підключення.
Якщо ви задали довший час блокування (наприклад, кілька годин), але хочете дозволити IP-адресі здійснити повторний запит на підключення раніше, ви можете достроково її розблокувати.
Для цього введіть наступне:
sudo fail2ban-client set sshd unbanip 192.168.5.25
На нашому віддаленому комп’ютері, якщо ми знову зробимо запит на підключення через SSH і введемо правильний пароль, нам буде дозволено підключитися:
ssh [email protected]
Просто та Ефективно
Простота, як правило, є перевагою, а fail2ban – це елегантне рішення складної проблеми. Воно потребує мінімального налаштування і практично не вимагає ніяких витрат на обслуговування, ні для вас, ні для вашого комп’ютера.