bolt Valebyte VPS from $4/mo — NVMe, 60s deploy.

Get a VPS arrow_forward

Як правильно встановити та налаштувати Fail2ban на VPS Ubuntu?

calendar_month November 18, 2025 schedule 11 хв. читання visibility 1017 переглядів
person
Valebyte Team
Як правильно встановити та налаштувати Fail2ban на VPS Ubuntu?
summarize

TL;DR

  • Установите Fail2ban командами `sudo apt update` и `sudo apt install fail2ban` для базовой защиты VPS.
  • Используйте `sudo systemctl enable fail2ban`, чтобы сервис автоматически запускался после перезагрузки.
  • Настраивайте параметры защиты в файле `jail.local`, чтобы избежать потери данных при обновлении системы.
  • Fail2ban анализирует системные логи и блокирует IP-адреса при обнаружении признаков брутфорс-атак.

Як встановити та налаштувати Fail2ban на VPS Ubuntu?

Захист вашого VPS хостинг від несанкціонованого доступу – критично важливе завдання. Fail2ban – це потужний інструмент, який сканує логи на предмет підозрілих дій, таких як невдалі спроби входу, і автоматично блокує IP-адреси, з яких ці спроби надходять. У цій статті ми детально розглянемо процес встановлення та налаштування Fail2ban на VPS під управлінням Ubuntu, щоб забезпечити додатковий рівень безпеки для вашого сервера.

Ми охопимо всі етапи, від встановлення пакета Fail2ban до налаштування фільтрів для захисту від різних типів атак. Ви навчитеся визначати власні правила блокування та адаптувати Fail2ban під конкретні потреби вашого сервера. Цей гайд призначений як для початківців, так і для досвідчених користувачів Linux, які прагнуть підвищити безпеку своїх VPS.

Зміст

A digital shield protecting a server from malicious network attacks, symbolizing Fail2ban's security function.

Встановлення Fail2ban

Першим кроком до захисту вашого VPS є встановлення Fail2ban. Ubuntu надає пакет Fail2ban у своїх стандартних репозиторіях, що значно спрощує процес встановлення. Для початку, оновіть список пакетів, щоб переконатися, що у вас найновіші версії:
sudo apt update
Ця команда оновить інформацію про доступні пакети з репозиторіїв, вказаних у вашій системі. Потім встановіть Fail2ban:
sudo apt install fail2ban
Ця команда завантажить та встановить Fail2ban і всі необхідні залежності. Під час встановлення вам може бути запропоновано підтвердити встановлення пакета. Відповідайте ствердно, натиснувши "Y" і Enter. Після завершення встановлення Fail2ban автоматично запуститься. Ви можете перевірити його статус за допомогою наступної команди:
sudo systemctl status fail2ban
Вивід покаже, чи активний сервіс Fail2ban, час його роботи, а також останні логи. Якщо сервіс не запущено, ви можете запустити його вручну:
sudo systemctl start fail2ban
І щоб переконатися, що він запускається автоматично при завантаженні системи:
sudo systemctl enable fail2ban
Приклад 1: Оновлення та встановлення Fail2ban.
sudo apt update && sudo apt install fail2ban
Ця команда об'єднує оновлення списку пакетів і встановлення Fail2ban в один рядок, що робить процес трохи швидшим. Приклад 2: Перевірка версії Fail2ban.
fail2ban-client --version
Ця команда виведе версію встановленого Fail2ban. Це корисно для відстеження оновлень безпеки та сумісності з іншими додатками. Приклад 3: Перегляд журналу Fail2ban.
sudo tail -f /var/log/fail2ban.log
Ця команда відображає останні рядки файлу журналу Fail2ban в режимі реального часу. Це дозволяє відстежувати, які IP-адреси блокуються і чому. Опція `-f` означає "follow", тобто команда буде продовжувати відображати нові рядки по мірі їх додавання у файл.

Захистіть ваш сервер з Fail2ban на надійному VPS!

Потрібен потужний та безпечний хостинг для вашого Ubuntu VPS? Наші плани ідеально підходять для розгортання Fail2ban. — from €4.49/mo.

Вибрати VPS-хостинг →
rocket_launch Quick pick

Looking for a server that just works?

Valebyte VPS — NVMe, 24/7 support, deploy in 60 seconds.

View VPS plans arrow_forward

Основна конфігурація Fail2ban

Після успішної установки необхідно налаштувати Fail2ban для ефективного захисту вашого сервера. Конфігурація Fail2ban управляється через файли `jail.conf` і `jail.local`. Важливо розуміти, що `jail.conf` є файлом конфігурації за замовчуванням і не рекомендується його безпосередньо змінювати, оскільки оновлення пакета можуть перезаписати ваші зміни. Замість цього слід використовувати файл `jail.local` для перевизначення параметрів з `jail.conf`. Спочатку створіть файл `jail.local` на основі `jail.conf`:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Потім відкрийте `jail.local` для редагування:
sudo nano /etc/fail2ban/jail.local
У цьому файлі ви можете змінити різні параметри, такі як час блокування, кількість спроб до блокування та адресу електронної пошти для повідомлень. Розглянемо деякі важливі параметри:
  • `bantime`: Визначає, на скільки секунд буде заблоковано IP-адресу. Наприклад, `bantime = 600` означає блокування на 10 хвилин.
  • `findtime`: Визначає, протягом якого часу Fail2ban буде відстежувати спроби входу. Наприклад, `findtime = 600` означає, що Fail2ban буде враховувати спроби входу, зроблені протягом останніх 10 хвилин.
  • `maxretry`: Визначає, скільки невдалих спроб входу допустимо протягом `findtime` до блокування IP-адреси. Наприклад, `maxretry = 3` означає, що після трьох невдалих спроб входу IP-адресу буде заблоковано.
  • `destemail`: Вкажіть адресу електронної пошти, на яку будуть надсилатися повідомлення про блокування.
  • `sendername`: Ім'я відправника в електронних листах повідомлень.
Наприклад, щоб змінити час блокування на 1 годину (3600 секунд), кількість спроб до блокування на 5 та вказати адресу електронної пошти для повідомлень, внесіть наступні зміни в `jail.local`:
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 5
destemail = [email protected]
sendername = Fail2ban
Замініть `[email protected]` на вашу реальну адресу електронної пошти. Після внесення змін збережіть файл і перезапустіть Fail2ban, щоб застосувати нові налаштування:
sudo systemctl restart fail2ban
Приклад 1: Зміна часу блокування та кількості спроб.
[DEFAULT]
bantime = 7200  ; Блокування на 2 години
maxretry = 4    ; 4 невдалі спроби
Цей приклад показує, як змінити час блокування на 2 години та дозволити лише 4 невдалі спроби входу. Приклад 2: Включення відправки повідомлень по електронній пошті.
[DEFAULT]
destemail = [email protected]
sendername = Fail2ban VPS
mta = sendmail
action = %(action_mwl)s
Цей приклад включає відправку сповіщень на адресу `[email protected]` з іменем відправника "Fail2ban VPS". `mta = sendmail` вказує, що використовується поштовий сервер sendmail (або сумісний), а `action = %(action_mwl)s` визначає дію, яка буде виконана під час блокування, включаючи відправку сповіщення електронною поштою з інформацією про подію. Переконайтеся, що на вашому сервері налаштовано поштовий сервер (наприклад, postfix або sendmail) для надсилання сповіщень. Приклад 3: Вказівка іншого файлу журналу для моніторингу (не рекомендується без особливої потреби).
[DEFAULT]
logfile = /var/log/my_custom_log.log
Цей приклад показує, як змінити файл журналу, який Fail2ban буде моніторити. Увага: Це слід робити тільки в тому випадку, якщо ви точно знаєте, що робите, і якщо стандартний файл журналу не містить потрібної інформації. Неправильна вказівка файлу журналу може призвести до непрацездатності Fail2ban.

Налаштування Jail.local для захисту SSH

Fail2ban використовує "jails" (в'язниці) для визначення правил блокування для різних сервісів. Кожна в'язниця пов'язана з певним сервісом (наприклад, SSH, Apache, Nginx) і визначає, які логи потрібно моніторити, які шаблони шукати і які дії вживати при виявленні підозрілої активності. За замовчуванням, у файлі `jail.conf` вже визначено деякі в'язниці, але вони часто вимкнені. Для активації та налаштування в'язниці для захисту SSH, необхідно внести зміни до файлу `jail.local`. Відкрийте файл `jail.local` для редагування:
sudo nano /etc/fail2ban/jail.local
Знайдіть секцію `[sshd]` (або додайте її, якщо її немає) і внесіть наступні зміни:
[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
backend = systemd
Розберемо кожен рядок:
  • `enabled = true`: Вмикає в'язницю sshd.
  • `port = ssh`: Вказує порт, який Fail2ban буде захищати. В даному випадку, це стандартний порт SSH (22). Якщо ви використовуєте нестандартний порт SSH, замініть `ssh` на номер вашого порту (наприклад, `port = 2222`).
  • `logpath = %(sshd_log)s`: Вказує шлях до файлу журналу SSH. `%(sshd_log)s` – це змінна, визначена в `jail.conf`, яка вказує на стандартний файл журналу SSH.
  • `backend = systemd`: Вказує, як Fail2ban буде відстежувати зміни у файлі журналу. `systemd` - це система ініціалізації, яка використовується в Ubuntu. Інші можливі значення: `polling`, `gamin`, `inotify`. `systemd` зазвичай є найбільш ефективним і надійним способом.
Після внесення змін збережіть файл і перезапустіть Fail2ban:
sudo systemctl restart fail2ban
Тепер Fail2ban буде моніторити файл журналу SSH і блокувати IP-адреси, з яких надходять невдалі спроби входу. Важливо: Якщо ви використовуєте нестандартний порт SSH, необхідно вказати його в налаштуваннях в'язниці sshd. В іншому випадку, Fail2ban не буде моніторити правильний порт і не зможе захистити ваш сервер від атак. Приклад 1: Налаштування Fail2ban для захисту SSH на нестандартному порту.
[sshd]
enabled = true
port = 2222
logpath = %(sshd_log)s
backend = systemd
В цьому прикладі Fail2ban буде захищати SSH на порту 2222. Приклад 2: Включення захисту від brute-force атак на SSH з використанням фільтрів.
[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
backend = systemd
filter = sshd
В цьому прикладі додається рядок `filter = sshd`. `filter` визначає, який фільтр буде використовуватися для аналізу файлу журналу. Фільтри – це файли, що містять регулярні вирази, які Fail2ban використовує для пошуку підозрілих дій в логах. В даному випадку, використовується фільтр `sshd`, який вже визначений в Fail2ban і містить правила для виявлення brute-force атак на SSH. Використання фільтрів дозволяє більш точно визначати, які спроби входу є підозрілими, і уникати блокування легітимних користувачів. Приклад 3: Збільшення часу блокування для SSH.
[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
backend = systemd
bantime = 86400 ; Блокування на 24 години
В цьому прикладі час блокування для SSH збільшено до 24 годин (86400 секунд). Це може бути корисним для захисту від наполегливих атак.

Тестування і перевірка роботи Fail2ban

Після встановлення та налаштування Fail2ban необхідно перевірити його працездатність, щоб переконатися, що він ефективно захищає ваш сервер. Існує кілька способів це зробити:
  • Перевірка статусу в'язниці: Ви можете перевірити статус конкретної в'язниці за допомогою команди `fail2ban-client`.
  • Аналіз журналу Fail2ban: Перегляд журналу Fail2ban дозволяє побачити, які IP-адреси були заблоковані і чому.
  • Емуляція атаки: Ви можете емулювати невдалі спроби входу, щоб перевірити, що Fail2ban правильно блокує IP-адресу.
Щоб перевірити статус в'язниці `sshd`, виконайте наступну команду:
sudo fail2ban-client status sshd
Ця команда виведе інформацію про в'язницю `sshd`, включаючи:
  • Статус (включена або виключена)
  • Кількість заблокованих IP-адрес
  • Список заблокованих IP-адрес
Якщо в'язниця працює правильно і блокує IP-адреси, ви побачите список заблокованих IP-адрес. Якщо список порожній, це означає, що жодна IP-адреса не була заблокована. Це може бути тому, що ніхто не намагався отримати доступ до вашого серверу несанкціонованим способом, або тому, що Fail2ban не налаштований правильно. Щоб переглянути журнал Fail2ban, виконайте наступну команду:
sudo tail -f /var/log/fail2ban.log
В журналі ви побачите записи про всі події, пов'язані з Fail2ban, включаючи запуск і зупинку сервісу, активацію і деактивацію в'язниць, а також блокування і розблокування IP-адрес. Аналіз журналу дозволяє зрозуміти, як працює Fail2ban і виявити можливі проблеми. Щоб емулювати атаку і перевірити, що Fail2ban правильно блокує IP-адресу, ви можете спробувати кілька разів підключитися до вашого серверу по SSH з неправильним паролем. Після кількох невдалих спроб ваша IP-адреса повинна бути заблокована. Ви можете перевірити це за допомогою команди `fail2ban-client status sshd` або переглянувши журнал Fail2ban. Важливо: Будьте обережні при емуляції атаки, щоб не заблокувати себе на тривалий час. Ви можете зменшити час блокування для тестування, а потім повернути його до нормального значення. Приклад 1: Розблокування IP-адреси вручну.
sudo fail2ban-client set sshd unbanip 192.168.1.100
Ця команда розблокує IP-адресу 192.168.1.100 у в'язниці `sshd`. Це може бути корисним, якщо ви випадково заблокували свою власну IP-адресу. Приклад 2: Перевірка правил iptables, створених Fail2ban.
sudo iptables -L FAIL2BAN-SSHD
Ця команда показує правила iptables, створені Fail2ban для в'язниці `sshd`. Iptables - це брандмауер Linux, який Fail2ban використовує для блокування IP-адрес. Вивід команди покаже список правил, які блокують вхідний трафік з заблокованих IP-адрес. Це дозволяє переконатися, що Fail2ban правильно налаштовує брандмауер для блокування підозрілого трафіку. Приклад 3: Перезавантаження Fail2ban без перезапуску всієї системи.
sudo fail2ban-client reload
Ця команда перезавантажує конфігурацію Fail2ban, не перезапускаючи весь сервіс. Це швидше, ніж перезапуск, і дозволяє застосувати зміни конфігурації без переривання роботи Fail2ban.
rocket_launch Quick pick

Looking for a server that just works?

Valebyte VPS — NVMe, 24/7 support, deploy in 60 seconds.

View VPS plans arrow_forward

Автоматичне розблокування IP-адрес

У деяких випадках може знадобитися автоматичне розблокування IP-адрес після певного періоду часу. Fail2ban за замовчуванням блокує IP-адреси на вказаний час (`bantime`), але іноді необхідно, щоб IP-адреса була розблокована автоматично раніше, наприклад, якщо блокування сталося помилково або якщо динамічна IP-адреса змінилася. Для реалізації автоматичного розблокування можна використовувати кілька підходів:
  • Встановлення короткого часу блокування: Найпростіший спосіб - встановити невелике значення для параметра `bantime`. Однак це може зробити ваш сервер більш вразливим для атак, оскільки зловмисник зможе повторити спроби входу через короткий проміжок часу.
  • Використання скриптів для автоматичного розблокування: Більш складний, але й більш гнучкий підхід - використання скриптів, які автоматично розблоковують IP-адреси після певного періоду часу.
Розглянемо приклад використання скрипта для автоматичного розблокування. Створіть скрипт, наприклад, `/usr/local/bin/fail2ban-auto-unban.sh`, з наступним вмістом:
#!/bin/bash

# Время в секундах, через которое нужно разблокировать IP-адреса
UNBAN_TIME=3600

# Тюрьмы, для которых нужно выполнять автоматическую разблокировку
JAILS="sshd"

for JAIL in $JAILS; do
  fail2ban-client status $JAIL | grep "Banned IP list:" | awk '{print $4}' | tr -d '[]' | tr ',' '\n' | while read IP; do
    BAN_TIME=$(fail2ban-client get $JAIL banip $IP | grep "Ban since" | awk '{print $3 " " $4 " " $5 " " $6 " " $7}')
    BAN_TIMESTAMP=$(date -d "$BAN_TIME" +%s)
    CURRENT_TIMESTAMP=$(date +%s)
    ELAPSED_TIME=$((CURRENT_TIMESTAMP - BAN_TIMESTAMP))

    if [ "$ELAPSED_TIME" -gt "$UNBAN_TIME" ]; then
      fail2ban-client set $JAIL unbanip $IP
      echo "$(date) - Разблокирован IP $IP в тюрьме $JAIL" >> /var/log/fail2ban-auto-unban.log
    fi
  done
done
Цей скрипт виконує наступні дії:
  • Визначає час в секундах, через який потрібно розблокувати IP-адреси (`UNBAN_TIME`).
  • Визначає список в'язниць, для яких потрібно виконувати автоматичне розблокування (`JAILS`).
  • Проходить по списку заблокованих IP-адрес для кожної в'язниці.
  • Визначає час блокування IP-адреси.
  • Якщо час блокування перевищує задане значення (`UNBAN_TIME`), розблокує IP-адресу.
  • Записує інформацію про розблокування в лог-файл.
Зробіть скрипт виконуваним:
sudo chmod +x /usr/local/bin/fail2ban-auto-unban.sh
Потім налаштуйте cron для автоматичного запуску скрипта, наприклад, кожну годину:
sudo crontab -e
Додайте наступний рядок у файл cron:
0 * * * * /usr/local/bin/fail2ban-auto-unban.sh
Цей рядок вказує, що скрипт повинен запускатися на початку кожної години. Важливо: Цей скрипт є прикладом і може знадобитися його адаптувати під ваші конкретні потреби. Наприклад, вам може знадобитися змінити список в'язниць, формат лог-файлу або додати додаткові перевірки. Приклад 1: Налаштування автоматичного розблокування через cron з використанням короткого `bantime`.
[DEFAULT]
bantime = 300 ; Блокировка на 5 минут

; Запуск скрипта раз в минуту для разблокировки

  • * * * * /usr/local/bin/fail2ban-auto-unban.sh
Цей приклад показує, як встановити короткий час блокування (5 хвилин) і налаштувати cron для запуску скрипта раз в хвилину. Скрипт буде перевіряти заблоковані IP-адреси і розблокувати їх, якщо вони заблоковані більше 5 хвилин. Цей підхід простий в реалізації, але може бути менш безпечним, ніж використання більш довгого часу блокування і більш складного скрипта. Приклад 2: Розблокування IP-адрес тільки для певних в'язниць.
JAILS="sshd apache"
У скрипті `fail2ban-auto-unban.sh` змініть змінну `JAILS`, щоб вказати тільки ті в'язниці, для яких потрібно виконувати автоматичне розблокування. У цьому прикладі автоматичне розблокування буде виконуватися тільки для в'язниць `sshd` і `apache`. Приклад 3: Логування дій скрипта в окремий файл.
echo "$(date) - Разблокирован IP $IP в тюрьме $JAIL" >> /var/log/fail2ban-auto-unban.log
Цей рядок в скрипті `fail2ban-auto-unban.sh` записує інформацію про розблокування IP-адреси в файл `/var/log/fail2ban-auto-unban.log`. Це дозволяє відстежувати, які IP-адреси були розблоковані і коли. Регулярно переглядайте цей лог-файл, щоб виявляти можливі проблеми.

Максимальний захист та продуктивність: ваш виділений сервер чекає!

Готові до безкомпромісної безпеки та швидкості? SSD виділені сервери — ідеальний вибір для серйозних проєктів.

Знайти сервер →
support_agent
Valebyte Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.