Захист мережевих сервісів за допомогою Fail2Ban (CentOS, Debian, Ubuntu)

Установка Fail2ban

Щоб встановити програму Fail2ban, виконайте такі команди:

  • Для установки на Ubuntu, Debian:
    sudo apt-get update
    sudo apt-get install fail2ban
  • Для встановлення на CentOS:
    yum update
    rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
    yum install fail2ban

Визначення

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

  • filter – фільтр визначає регулярний вираз, який має відповідати шаблону, що відповідає помилці входу в систему або будь-якому іншому виразу
  • action – дія визначає кілька команд, які виконуються у різні моменти часу
  • jail – джейл (досл. англ. «в'язниця») – це комбінація одного фільтра та однієї або кількох дій. Fail2ban може обробляти кілька фільтрів одночасно
  • client – відноситься до скрипту fail2ban-client
  • server – відноситься до скрипту fail2ban-server

Сервер

Fail2ban складається з двох частин: клієнта та сервера. Сервер багатопотоковий і прослуховує в сокеті Unix-команди. Сам сервер нічого не знає про конфігураційні файли. Таким чином, під час запуску сервер перебуває в стані «за замовчуванням», у якому не визначено жодних джейлів. Для сервера fail2ban доступні такі опції:

**-b** Почати у фоновому режимі
**-f** Почати на передньому плані
**-s ** Шлях до сокету
**-x** Примусово виконати сервер
**-h, —help** Показувати це довідкове повідомлення
**-V, —version** Надрукувати версію

Fail2ban-server не повинен використовуватись безпосередньо, за винятком випадків налагодження. Опція -s , ймовірно, є найважливішою та використовується для встановлення шляху сокету. Таким чином можна запускати кілька екземплярів Fail2ban на різних сокетах. Однак це необов'язково, оскільки Fail2ban може одночасно запускати кілька джейлів.

Fail2ban-client є інтерфейс Fail2ban. Він підключається до файлу сокета сервера та відправляє команди для налаштування та керування сервером. Клієнт може прочитати конфігураційні файли або просто використовуватися для відправки однієї команди на сервер за допомогою командного рядка або інтерактивного режиму (який активується опцією -i). Fail2ban-client також може запустити сервер. Для fail2ban-клієнта доступні такі параметри:

**-c** Каталог конфігурації
**-s** Шлях до сокету
**-d** Дамп конфігурації. Для налагодження
**-i** Інтерактивний режим
**-v** Збільшити кількість подробиць
**—q** Зменшувати подробиці
**-x** Примусово виконати сервер
**-h, —help** Показувати це довідкове повідомлення
**-V**, —version Надрукувати версію

Усі налаштування у файлах конфігурації можна настроїти вручну. Конфігурація – це простий та ефективний спосіб налаштування сервера. Fail2ban-client переводить конфігурацію до набору команд. Проте fail2ban-client має ще дві команди для внутрішнього використання. Перша – це старт. При введенні команди $fail2ban-client start клієнт спочатку спробує розгорнути екземпляр сервера. Потім клієнт очікує запуску сервера, надіславши запити ping. Як тільки сервер відповідає на ці запити, fail2ban-клієнт аналізує конфігурацію та надсилає відповідні команди на сервер.

Друга команда – перезавантаження. Здійснюється введенням команди: $fail2ban-client reload

Загальні налаштування

Файл fail2ban.conf містить загальні параметри для демону fail2ban-сервера, такі як рівень ведення журналу та цільовий об'єкт. Тут також можна вказати шлях сокету, який використовується для зв'язку між клієнтом та сервером.

Jails

Найважливішим файлом є jail.conf, що містить декларацію ваших джейлів. За замовчуванням деякі розділи вставляються як шаблони. Ви повинні включити цікаві для вас розділи і адаптуватися до вашої локальної конфігурації. Нижче наведено приклад розділу ssh-iptables:
[ssh-iptables]
#enabled = false
enabled = true
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
# mail-whois[name=SSH, dest=yourmail@mail.com]
#logpath = /var/log/sshd.log
logpath = /var/log/auth.log
maxretry = 5

З цими налаштуваннями відбудеться таке:

* розділ ssh-iptables включений;
* використовувати фільтр **sshd.conf** із субдиректорії **filter.d**;
* дія (дії), описані в iptables.conf (підкаталог action.d), буде виконано, якщо результат фільтра буде дійсним. У цьому прикладі додаткова дія mail-whois.conf закоментована.
* **auth.log** – цей лог-файл скануватиметься фільтром.

Фільтр та дії об'єднуються, щоб створити джейли. У кожному джейлі дозволено лише один фільтр, але в окремих рядках можна вказати кілька дій. Наприклад, ви можете відреагувати на спробу злому SSH, спочатку додавши нове правило брандмауера, потім витягуючи деяку інформацію про порушуючий хост, використовуючи whois, і нарешті, відправивши повідомлення електронною поштою. Або, можливо, ви просто хочете отримати повідомлення про ваш обліковий запис Jabber, коли хтось звертається до сторінки /donotaccess.html на вашому веб-сервері.

Fail2ban не обмежується фільтром SSH. Він містить фільтри та дії за замовчуванням для багатьох демонів та служб. Ви можете легко змінювати їх чи створювати нові. Якщо ви подивіться файл filter.d, ви помітите кілька стандартних фільтрів, які не зустрічаються в стандартному jail.conf, які поставляються разом з джерелами. У цьому прикладі ми беремо sshd-ddos.conf. Щоб інтегрувати фільтр у fail2ban, відредагуйте свій jail.conf:
[ssh-ddos]
enabled = true
port = ssh,sftp
filter = sshd-ddos
logpath = /var/log/messages
maxretry = 2
Завжди пам'ятайте, що потрібно скоригувати $logpath до вашого log-файлу, як зазначено вище.

Jail Options

Кожен джейл може бути налаштований шляхом налаштування наступних параметрів:

Назва Параметри за замовчуванням Опис
filter Ім'я фільтра, який використовуватиметься джейлом для виявлення збігів. Кожен новий збіг за фільтром збільшує лічильник у джейлі
logpath /var/log/messages Шлях до файлу журналу, який надається фільтру
maxretry 3 Кількість збігів (тобто значення лічильника), що запускає дію заборони на IP-адресу
findtime 600 sec Лічильник встановлюється на нуль, якщо збіг не знайдений у секундах пошуку
bantime 600 sec Тривалість (у секундах) для заборони IP-адреси. Негативний номер для «постійної» заборони

Фільтри

Каталог filter.d містить в основному регулярні вирази, які використовуються для виявлення спроб злому, збою паролів і т.д.
failregex = Authentication failure for . from
Failed [-/\w]+ for .
from
ROOT LOGIN REFUSED . FROM
iI user .
from
Якщо ви створюєте свої власні висловлювання failregex, інформація, наведена нижче, буде особливо корисною.

Failregex може мати кілька рядків, кожен з яких може відповідати рядку файлу журналу.

У кожному рядку failregex частина, що відповідає імені хоста або IP-адреси, повинна бути загорнута в (?P …)-сендвіч. Це спеціальне розширення регулярного виразу, пов'язане з Python, яке надає вміст збігу імені . Тег - це те, як ви вказуєте fail2ban, з яким з'єднувався хост, тому він повинен бути присутнім у кожному рядку failregex. Якщо це не так, fail2ban видасть повідомлення про помилку "No" host "group".

Для зручності ви можете використовувати об'єкт у ваших регулярних виразах. – це псевдонім для (?:::f {4,6}:)? (?P\S+), який відповідає або імені хоста, або адресі IPv4 (можливо, запровадженій на адресу IPv6).

У сценаріях дій тег замінюється IP-адресою хоста, який було зіставлено в тезі .

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

Шаблон або регулярний вираз для відповідності позначці часу в даний час не документовані та недоступні для читання або встановлення користувачами (див. Помилка Debian # 491253). Це проблема, якщо ваш журнал має формат мітки, який fail2ban не очікує, тому що він не буде відповідати жодним рядкам. Через це ви повинні протестувати будь-який новий failregex у рядку зразка журналу, як у наведених нижче прикладах, щоб переконатися, що він буде відповідати. Якщо fail2ban не розпізнає вашу тимчасову мітку журналу, у вас є дві можливості: або переналаштувати ваш демон для реєстрації з позначкою часу у більш поширеному форматі, наприклад, у наведеному вище рядку журналу; або надішліть звіт про помилку з проханням вказати свій формат мітки часу.

Як приклад вищеописаних пунктів виконайте на консолі наступні команди та порівняйте результати:
fail2ban-regex 'Jul 18 12:13:01 [1.2.3.4] authentication failed' 'authentication failed'
fail2ban-regex 'Jul 18 12:13:01 [1.2.3.4] authentication failed' '[] authentication failed'
fail2ban-regex '18-07-2008 12:13:01 [1.2.3.4] authentication failed' '[] authentication failed'
fail2ban-regex '18-7-2008 12:13:01 [1.2.3.4] authentication failed' '[] authentication failed'

Перша команда завершилася помилкою з повідомленням про помилку "Немає" групи хостів. Друга команда завершується успішно та знаходить адресу хоста 1.2.3.4. Третя команда виконається успішно та знаходить адресу хоста 1.2.3.4. Помилка у 4-й команді. Вона каже нам, - вона каже "... немає дійсної дати/часу, знайденого для ..." - .

Actions

Каталог action.d містить різноманітні сценарії, що визначають дії. Дії виконуються в чітко визначені моменти під час виконання Fail2ban: під час запуску/зупинки джейлу, заборони/вимкнення хоста тощо.

Тестування/Перевірка

Наступні команди допоможуть перевірити ваші налаштування: # fail2ban-client -d Перевірити поточну конфігурацію. # fail2ban-regex "line" "failregex" Основні моменти встановлення та налаштування програми розглянуті. У випадку, якщо якась IP-адреса буде заблокована Fail2ban помилково, видалити її з «чорного списку» можна командою: sudo fail2ban-client se t JAIL unbanip IP Де JAIL — назва секції конфігураційного файлу jail.local, відповідно до правил якої було активовано блокування, IP — адреса, яку потрібно розблокувати. Приклад команди розблокування: sudo fail2ban-client se t ssh-iptables unbanip 78.47.10.113 Перевірить один регулярний вираз failregex (наприклад, в sshd.conf) з одним рядком файлу журналу. Не забудьте подвійні лапки навколо вашої лінії та визначення failgegex. Fail2ban-regex також приймає для перевірки файлів. Таким чином, легше протестувати та налагодити свої власні регулярні висловлювання. # fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf Ви можете використати комбінацію: # fail2ban-regex /var/log/auth.log "Failed [-/\w]+ for .* from "

Обмеження

Час реакції
Насамперед, пам'ятайте, що Fail2ban є аналізатором журналів. Він не може нічого зробити, поки щось не буде записано в лог-файлах. Багато демони syslog буферизують свої виходи. Це може вплинути на продуктивність Fail2ban. Таким чином, було б непогано відключити буферизацію вашого демона syslog.

Оцінити час реакції досить складно. Fail2ban чекає 1 секунду, перш ніж запускати нові журнали для перевірки. Найчастіше це має бути добре. Однак, можна отримати більше помилок входу, ніж зазначено maxretry.

Чи була ця стаття корисною?

Теги:

#server

Сподобалася стаття?

Згода на використання файлів cookie

Натискаючи "Я згоден", ви даєте згоду на використання файлів cookie на нашому веб-сайті, щоб надати вам найбільш релевантний досвід, запам'ятовуючи ваші уподобання та повторні відвідування. Однак ви можете відвідати "Керування файлами cookie", щоб надати контрольовану згоду. Детальніше

Налаштування файлів cookie

Функціональні

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

Аналітичні

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

Рекламні

Рекламні файли cookie використовуються для надання відвідувачам релевантної реклами та маркетингових кампаній.