Як захистити свій сервер Linux за допомогою fail2ban

За допомогою fail2ban ваш комп’ютер Linux автоматично блокує IP-адреси, які мають занадто багато збоїв підключення. Це саморегулююча безпека! Ми покажемо вам, як ним користуватися.

Безпека Безпека Безпека

герцогиня Віндзорська, Уолліс Сімпсон, одного разу знаменитий сказав: «Ніколи не можна бути занадто багатим чи надто худим». Ми оновили це для нашого сучасного взаємопов’язаного світу: ви ніколи не можете бути занадто обережними або занадто безпечними.

Якщо ваш комп’ютер приймає вхідні запити на з’єднання, наприклад Безпечна оболонка (SSH) або діє як веб-сервер або сервер електронної пошти, вам потрібно захистити його від атак грубої сили та підбору паролів.

Для цього вам потрібно буде відстежувати запити на з’єднання, які не входять до облікового запису. Якщо вони неодноразово не піддаються аутентифікації протягом короткого періоду, їм слід заборонити робити подальші спроби.

Єдиний спосіб досягти цього практично – це автоматизувати весь процес. За допомогою трохи простої конфігурації 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, тому ми втратимо наші зміни, якщо налаштуємо цей файл.

  Як грати в Borderlands 2 на Linux

Замість цього ми скопіюємо файл 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-адрес, які ніколи не будуть заборонені. У них є постійна картка Get Out of Jail Free. The IP-адреса локального хоста (127.0.0.1) є у списку за замовчуванням разом із його еквівалентом IPv6 (::1). Якщо є інші IP-адреси, які, як ви знаєте, ніколи не повинні бути заборонені, додайте їх до цього списку та залиште пробіл між кожною з них.
bantime: тривалість, протягом якої IP-адреса заборонена (“m” означає хвилини). Якщо ви введете значення без «m» або «h» (протягом годин), воно розглядатиметься як секунди. Значення -1 назавжди заборонить IP-адресу. Будьте дуже обережні, щоб не заблокувати себе назавжди.
findtime: кількість часу, протягом якого занадто багато невдалих спроб підключення призведе до блокування IP-адреси.
maxretry: значення для «занадто багато невдалих спроб».

Якщо підключення з тієї самої IP-адреси робить спроби з’єднання з максимальним числом невдалих протягом періоду часу пошуку, вони блокуються на час заборони. Виняток становлять лише IP-адреси у списку ігнорованих IP-адрес.

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

  Як встановити Bitcoin Knots на Linux

Ви могли здогадатися з [DEFAULT] назву розділу, але параметри, які ми переглянули, є стандартними. Тепер давайте подивимося на налаштування тюрми SSH.

Налаштування Jail

Jails дозволяють переміщати типи з’єднань у моніторинг 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 до нашої тестової машини та навмисно введемо пароль. Ви отримуєте три спроби правильно ввести пароль під час кожної спроби підключення.

  6 USB-інструментів Linux для ремонту вашого ПК

Значення 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 є елегантним рішенням складної проблеми. Це займає дуже мало конфігурації і практично не вимагає жодних операційних витрат — для вас чи вашого комп’ютера.