Top.Mail.Ru

Fail2ban: защита VPS от брутфорса на Ubuntu

1
Fail2ban: защита VPS от брутфорса на Ubuntu

Fail2ban следит за логами сервера и временно блокирует IP-адреса, с которых идут неудачные попытки входа. Установка занимает одну команду, базовая защита SSH работает сразу после запуска без дополнительной настройки. Если в логах auth.log вы видите сотни попыток входа с разных IP — Fail2ban решает эту проблему за пару минут.

Зачем нужен Fail2ban

Любой VPS с открытым SSH-портом постоянно сканируют боты. Они перебирают логины и пароли в надежде подобрать доступ. Сам по себе перебор пароля редко приводит к взлому — если у вас включена авторизация по ключу или сложный пароль, шансы малы. Но постоянный поток подключений создаёт нагрузку на сервер и засоряет логи.

Fail2ban решает это просто: если с одного IP происходит несколько неудачных попыток входа за короткий промежуток времени, этот IP блокируется через файрвол на заданный срок. Бот перестаёт подключаться, нагрузка падает, логи становятся чище.

Установка Fail2ban

Установите пакет из стандартного репозитория Ubuntu:

sudo apt update
sudo apt install fail2ban -y

После установки сервис запускается автоматически. Проверьте статус:

sudo systemctl status fail2ban

В выводе должна быть строка Active: active (running).

Базовая конфигурация

Настройки Fail2ban хранятся в /etc/fail2ban/jail.conf. Этот файл не нужно редактировать напрямую — при обновлении пакета он будет перезаписан, и все ваши изменения потеряются.

Вместо этого создайте локальный файл конфигурации, который имеет приоритет и не затрагивается обновлениями:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Откройте файл для редактирования:

sudo nano /etc/fail2ban/jail.local

Найдите секцию [sshd] — она отвечает за защиту SSH. По умолчанию она уже включена в большинстве сборок Fail2ban на Ubuntu, но стоит проверить и при необходимости донастроить базовые параметры в секции [DEFAULT]:

[DEFAULT]
bantime  = 10m
findtime = 10m
maxretry = 5

Что означает каждый параметр:

  • bantime — на сколько времени блокируется IP после превышения лимита попыток. 10m означает 10 минут. Можно указать 1h, 1d для часов и дней.
  • findtime — временное окно, в течение которого считаются попытки входа.
  • maxretry — сколько неудачных попыток допускается в течение findtime, прежде чем IP заблокируют.

С настройками выше: если за 10 минут с одного IP было 5 неудачных попыток входа, этот IP блокируется на 10 минут.

Для более жёсткой защиты увеличьте время блокировки:

[DEFAULT]
bantime  = 1h
findtime = 10m
maxretry = 3

После изменения конфигурации перезапустите Fail2ban:

sudo systemctl restart fail2ban

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

Посмотреть список активных «тюрем» (jails) — групп правил для разных сервисов:

sudo fail2ban-client status

Посмотреть подробности конкретной тюрьмы, например для SSH:

sudo fail2ban-client status sshd

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

Как разблокировать IP вручную

Если вы сами оказались заблокированы — например, ошиблись при вводе пароля несколько раз с домашнего компьютера — разблокировать IP можно одной командой:

sudo fail2ban-client set sshd unbanip ВАШ_IP

Замените ВАШ_IP на нужный адрес. Узнать свой текущий публичный IP можно на сайте whatismyip.com или командой curl ifconfig.me с другого устройства.

Защита других сервисов

Fail2ban работает не только с SSH. В /etc/fail2ban/jail.local можно включить готовые фильтры для других сервисов — например, для Nginx или почтового сервера. Для каждого сервиса есть секция с именем сервиса:

[nginx-http-auth]
enabled = true

[nginx-limit-req]
enabled = true

Список доступных фильтров можно посмотреть в директории /etc/fail2ban/filter.d/ — там лежат готовые правила для десятков сервисов: Apache, Postfix, Dovecot, WordPress (через сторонние фильтры) и других.

После включения нового фильтра обязательно перезапустите Fail2ban:

sudo systemctl restart fail2ban

Логи Fail2ban

Если что-то работает не так — первым делом смотрите лог самого Fail2ban:

sudo tail -f /var/log/fail2ban.log

В нём видно каждую блокировку и разблокировку с указанием времени и IP-адреса. Это полезно чтобы убедиться, что фильтр действительно отрабатывает на реальные попытки входа.

Частые проблемы

Fail2ban не блокирует IP, хотя в auth.log видны неудачные попытки. Проверьте, что секция [sshd] включена (enabled = true) и путь к логу в параметре logpath совпадает с реальным расположением auth.log. На Ubuntu это обычно /var/log/auth.log.

Заблокировал сам себя и не могу подключиться по SSH. Если у вас есть доступ через консоль провайдера (VNC или веб-консоль в панели управления) — зайдите через неё и выполните команду unban. Если доступа нет — подождите истечения bantime, оно временное.

После перезагрузки сервера все блокировки сброшены. Это нормальное поведение — по умолчанию Fail2ban не сохраняет список блокировок между перезапусками. Боты быстро попадут в список заново при следующих попытках.

Часто задаваемые вопросы

Что делает Fail2ban?

Fail2ban отслеживает логи сервера, находит повторяющиеся неудачные попытки входа с одного IP-адреса и временно блокирует этот адрес через файрвол. Чаще всего используется для защиты SSH от автоматического подбора пароля.

Нужен ли Fail2ban, если используется вход по SSH-ключу?

Да, имеет смысл оставить. Подбор пароля при входе по ключу действительно невозможен, но боты продолжают создавать соединения и нагружать сервер. Fail2ban убирает эту нагрузку, блокируя источники таких попыток.

Как изменить время блокировки IP?

Откройте /etc/fail2ban/jail.local, найдите параметр bantime в секции [DEFAULT] и измените значение — например, на 1h для часа или 1d для суток. После изменения перезапустите сервис командой sudo systemctl restart fail2ban.

Как посмотреть, какие IP заблокированы прямо сейчас?

Выполните sudo fail2ban-client status sshd — в выводе будет список текущих заблокированных адресов для SSH-фильтра. Для других сервисов замените sshd на имя соответствующей тюрьмы.

Можно ли защитить Fail2ban не только SSH, но и сайт?

Да. Для веб-сервера используются фильтры вроде nginx-http-auth или nginx-limit-req, которые включаются в jail.local. Также существуют сторонние фильтры для WordPress, которые блокируют IP при множественных неудачных попытках входа в админку.

 

Fail2ban — один из первых шагов базовой защиты любого VPS. На UFO.Hosting каждый сервер предоставляется с root-доступом, поэтому установить и настроить Fail2ban можно сразу после получения данных для подключения.

Официальная документация: github.com/fail2ban/fail2ban/wiki

Похожее

Все статьи
nginx установка на ubuntu

Nginx: установка и настройка на Ubuntu 22.04 и 24.04

Nginx устанавливается на Ubuntu одной командой и начинает работать сразу после этого. Весь процесс — от чистого сервера до работающего сайта — занимает около десяти минут. Ниже разберём установку, настройку файрвола, создание виртуального хоста и основные команды для повседневной работы.…

2151937262

Apache OFBiz: мощный и требовательный ERP-гигант

Если ваш бизнес — это сложный механизм с уникальными процессами, вы наверняка знаете, как трудно найти готовую программу, которая поможет все упорядочить и ничего не сломает по пути.  Кто-то годами мирится с неудобной системой, кто-то платит за бесконечные доработки. Apache…