---
title: 'Fail2ban: автоматическая блокировка брутфорса SSH и веб-приложений | Zomro'
description: ''
image: 'https://cdn.zomro.com/uploads/blog/a48%40server-panel.net/2026/06/29/00-cover_q50.jpg'
---

![opened image]()

  * [Zomro](https://zomro.com/rus/)
  * [FAQ](https://zomro.com/rus/blog/faq/)
  * Fail2ban: автоматическая блокировка брутфорса SSH и веб-приложений 



# Fail2ban: автоматическая блокировка брутфорса SSH и веб-приложений

29-06-2026

![](https://cdn.zomro.com/uploads/blog/a48%40server-panel.net/2026/06/29/00-cover_q50.jpg)

Каждый публичный сервер получает попытки перебора паролей - это факт. Боты непрерывно сканируют диапазоны IP и пробуют стандартные логины и пароли на порту 22. Даже если вы уже настроили SSH-ключи и отключили парольный вход, fail2ban полезен как дополнительный слой: он снижает нагрузку на сервис и ведёт журнал атак.

Для Nginx и других веб-приложений fail2ban блокирует IP, которые генерируют ошибки 4xx или атакуют конкретные пути. В статье - установка, настройка jail для SSH, расширение на Nginx и управление заблокированными IP.

## Как работает fail2ban

Fail2ban читает лог-файлы и применяет регулярные выражения для поиска паттернов подозрительной активности. Когда IP превышает заданное число неудачных попыток за определённое время, fail2ban добавляет правило в iptables (или nftables, в зависимости от версии) и блокирует этот IP на заданный срок.

Три ключевых параметра:

  * `maxretry` \- максимальное число попыток до блокировки

  * `findtime` \- временное окно для подсчёта попыток (в секундах)

  * `bantime` \- время блокировки (в секундах; отрицательное значение означает постоянную блокировку)




Например: `maxretry = 5`, `findtime = 600`, `bantime = 3600` означает "заблокировать на 1 час IP, который 5 раз ошибся за 10 минут".

## Установка fail2ban
    
    
    sudo apt update
    sudo apt install fail2ban -y

Запустите сервис и включите автозапуск:
    
    
    sudo systemctl enable fail2ban
    sudo systemctl start fail2ban

Проверьте статус:
    
    
    sudo systemctl status fail2ban

![](https://cdn.zomro.com/uploads/blog/a48%40server-panel.net/2026/06/29/01-systemctl-status-fail2ban_q50.jpg)

## Структура конфигурации

Fail2ban хранит конфигурацию в `/etc/fail2ban/`:

  * `fail2ban.conf` \- основной конфиг (уровень логирования, сокет)

  * `jail.conf` \- настройки всех jail'ов (не редактируйте этот файл)

  * `jail.d/` \- директория для пользовательских override-файлов

  * `filter.d/` \- регулярные выражения для парсинга логов

  * `action.d/` \- действия при блокировке (ban/unban)




**Важно:** не редактируйте `jail.conf` напрямую. При обновлении пакета файл перезапишется. Вместо этого создайте файл `/etc/fail2ban/jail.local` или добавьте файлы в `/etc/fail2ban/jail.d/`.

## Настройка jail для SSH

Создайте файл конфигурации:
    
    
    sudo nano /etc/fail2ban/jail.local

Добавьте содержимое:
    
    
    [DEFAULT]
    # Время блокировки: 1 час
    bantime  = 3600
    
    # Временное окно для подсчёта попыток: 10 минут
    findtime = 600
    
    # Максимальное число попыток
    maxretry = 5
    
    # Бэкенд для чтения логов (auto определяется автоматически)
    backend = auto
    
    # Игнорировать эти IP (localhost и ваш IP)
    ignoreip = 127.0.0.1/8 ::1
    
    [sshd]
    enabled  = true
    port     = ssh
    logpath  = %(sshd_log)s
    backend  = %(sshd_backend)s
    maxretry = 3
    bantime  = 7200

Здесь для SSH задаём более строгие параметры, чем по умолчанию: только 3 попытки и блокировка на 2 часа.

Сохраните файл и перезапустите fail2ban:
    
    
    sudo systemctl restart fail2ban

![](https://cdn.zomro.com/uploads/blog/a48%40server-panel.net/2026/06/29/02-jail-local-nano_q50.jpg)

## 

## Проверка активных jail'ов

Убедитесь, что sshd jail запущен:
    
    
    sudo fail2ban-client status

Посмотрите детали конкретного jail:
    
    
    sudo fail2ban-client status sshd

Вывод покажет число заблокированных IP, число неудачных попыток и список текущих банов.

![](https://cdn.zomro.com/uploads/blog/a48%40server-panel.net/2026/06/29/03-fail2ban-status-sshd_q50.jpg)

## Настройка jail для Nginx

Fail2ban умеет защищать Nginx от нескольких типов атак: перебор паролей через HTTP-аутентификацию, сканирование запрещённых путей, превышение лимитов запросов.

Добавьте секции в `/etc/fail2ban/jail.local`:
    
    
    [nginx-http-auth]
    enabled  = true
    port     = http,https
    logpath  = /var/log/nginx/error.log
    maxretry = 5
    
    [nginx-noscript]
    enabled  = true
    port     = http,https
    filter   = nginx-noscript
    logpath  = /var/log/nginx/access.log
    maxretry = 6
    bantime  = 86400
    
    [nginx-badbots]
    enabled  = true
    port     = http,https
    filter   = nginx-badbots
    logpath  = /var/log/nginx/access.log
    maxretry = 2
    bantime  = 86400

Фильтр `nginx-http-auth` встроен в fail2ban. Фильтры `nginx-noscript` и `nginx-badbots` нужно создать или найти в `/etc/fail2ban/filter.d/`.

Проверьте, есть ли они:
    
    
    ls /etc/fail2ban/filter.d/ | grep nginx

Если фильтра нет, создайте:
    
    
    sudo nano /etc/fail2ban/filter.d/nginx-noscript.conf
    
    
    [Definition]
    failregex = ^<HOST> -.*GET.*(\.php|\.asp|\.exe|\.pl|\.cgi|\.scgi)
    ignoreregex =

Перезапустите fail2ban после изменений:
    
    
    sudo systemctl restart fail2ban

## 

## 

## Просмотр заблокированных IP

Посмотреть список забаненных IP в конкретном jail:
    
    
    sudo fail2ban-client status sshd

В разделе `Banned IP list` будут все активные блокировки.

Посмотреть лог fail2ban в реальном времени:
    
    
    sudo tail -f /var/log/fail2ban.log

Пример записи в логе:
    
    
    2026-05-22 14:32:11,524 fail2ban.actions [1234]: NOTICE  [sshd] Ban 203.0.113.45

## 

## 

## Разбан IP

Если заблокировали нужный IP (например, свой при неправильном вводе пароля):
    
    
    sudo fail2ban-client set sshd unbanip 203.0.113.45

Замените `sshd` на нужный jail и `203.0.113.45` на IP.

Убедитесь, что IP разблокирован:
    
    
    sudo fail2ban-client status sshd

IP должен исчезнуть из списка `Banned IP list`.

## Постоянная блокировка повторных нарушителей

Для особо настойчивых атак можно настроить нарастающее время бана. Fail2ban поддерживает `bantime.increment`:
    
    
    [DEFAULT]
    bantime.increment = true
    bantime.factor    = 1
    bantime.formula   = ban.Time * (1<<(ban.Count if ban.Count<20 else 20)) * banFactor
    bantime.maxtime   = 2592000

`bantime.maxtime = 2592000` \- максимальный бан 30 дней (в секундах).

После добавления этих параметров в `[DEFAULT]` в `jail.local` и перезапуска fail2ban IP, которые продолжают атаковать после разбана, будут блокироваться на всё более долгий срок.

## Проверка конфигурации без перезапуска

Перед применением изменений проверьте, что конфигурация корректна:
    
    
    sudo fail2ban-client -t

Если ошибок нет, команда выведет `OK`.

## Дополнительные действия: уведомления на email

Fail2ban может отправлять уведомления при блокировках. Для этого нужен настроенный почтовый агент на сервере (postfix или msmtp).

В `jail.local` в секцию `[DEFAULT]` добавьте:
    
    
    destemail = admin@example.com
    sendername = Fail2Ban
    mta = sendmail
    action = %(action_mwl)s

`action_mwl` отправляет письмо с whois-информацией и фрагментом лога при каждом бане.

## Типичные проблемы

**Fail2ban не блокирует, хотя попытки есть.** Проверьте, правильно ли указан путь к логу в `logpath`. На Ubuntu 24.04 SSH-логи могут идти в journald без записи в файл. Убедитесь, что `backend = systemd` или `backend = auto`.

**Заблокировали себя.** Используйте VNC-консоль провайдера или второй IP. Добавьте свой IP в `ignoreip` в секции `[DEFAULT]`.

**Fail2ban не запускается.** Проверьте синтаксис конфигурации: `sudo fail2ban-client -t`. Посмотрите детальный вывод: `sudo journalctl -u fail2ban -n 50`.

После настройки fail2ban сервер автоматически справляется с большинством атак перебором. Вместе с SSH-ключами и UFW это три основных уровня защиты, которые нужны каждому VPS.

Похожие статьи

[Как создать и подключиться по sFTP дополнительному пользователю](https://zomro.com/rus/blog/faq/305-kak-podkljuchitsja-po-sftp-ljubomu-drugomu-polzovatelju) [Установка индивидуального пароля в Filegator](https://zomro.com/rus/blog/faq/414-ustanovka-individualnogo-parolya-v-filegator) [Зачем нужно отключение UDP для RDP-подключений к Windows Server](https://zomro.com/rus/blog/faq/427-otklyuchenie-udp-dlya-rdp-podklyuchenij-k-windows-server) [Как установить RouterOS на виртуальный сервер (VPS/VDS)](https://zomro.com/rus/blog/faq/266-kak-ustanovit-routeros-na-virtualnyj-server-vps-vds) [Как продлить услугу виртуального хостинга в новом биллинге](https://zomro.com/rus/blog/faq/232-prodlenie-uslugi-virtualnogo-hostinga-v-novom-billinge)

[ Сервер для Forex от €7.95/мес ](/rus/server-for-forex)
