Neonode.cc - Mind space blog
open main menu
Part of series: crowdsec

Динамическое увеличение времени блокировки в CrowdSec кратно трём

/ 3 min read

Динамическое увеличение времени блокировки в CrowdSec кратно трём

Занимаясь настройкой Crowdsec, я вспоминил функцию для f2ban, которая позволяла увеличивать прогрессивно время бана для повторных инцидентов с одного IP, и благодаря Deniom мы разобрались как это сделать.

По умолчанию в CrowdSec можно настроить динамическое время блокировки через параметр duration_expr/

Изменение параметра duration_expr

Параметр duration_expr в CrowdSec позволяет задавать динамическое время блокировки, основываясь на количестве предыдущих решений для конкретного IP-адреса или диапазона.

Для корректировки этого параметра мне нужно было изменить файл /etc/crowdsec/profiles.yaml.

Вот как выглядело моя версия этой строки:

duration_expr: Sprintf('%dh', 8 * (3 ^ GetDecisionsCount(Alert.GetValue())))

Что делает эта строка?

  • GetDecisionsCount(Alert.GetValue()) — функция, которая возвращает количество предыдущих решений для данного IP-адреса или диапазона.
  • 3 ^ GetDecisionsCount(Alert.GetValue()) — здесь 3 возводится в степень, равную количеству предыдущих решений. Это позволяет увеличить время блокировки в три раза с каждым новым инцидентом.
  • 8 * (...) — базовое время блокировки составляет 8 часов, и оно умножается на результат возведения 3 в степень, что дает прогрессирующее увеличение времени блокировки.

Таким образом, первая блокировка длится 8 часов, вторая — 24 часа (8 * 3), третья — 72 часа (8 * 9) и так далее.

Зачем это нужно?

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

Где вносить изменения?

Изменения нужно внести в файл профилей /etc/crowdsec/profiles.yaml. Откройте файл с помощью любимого текстового редактора (например, nano):

sudo nano /etc/crowdsec/profiles.yaml

Найдите блок, где определяется duration_expr, и замените его на строку, указанную выше. После сохранения файла перезапустите службу CrowdSec:

sudo systemctl restart crowdsec

Если после перезапуска не возникло никаких ошибок, значит все выполнено успешно!

Полный пример моего файла /etc/crowdsec/profiles.yaml:

name: default_ip_remediation
#debug: true
filters:
 - Alert.Remediation == true && Alert.GetScope() == "Ip"
decisions:
 - type: ban
   duration: 12h

duration_expr: Sprintf('%dh', 8 * (3 ^ GetDecisionsCount(Alert.GetValue())))

on_success: break
---
name: default_range_remediation
#debug: true
filters:
 - Alert.Remediation == true && Alert.GetScope() == "Range"
decisions:
 - type: ban
   duration: 12h

duration_expr: Sprintf('%dh', 8 * (3 ^ GetDecisionsCount(Alert.GetValue())))


on_success: break

Проверка изменений

Чтобы убедиться, что все работает корректно, можно проверить логи CrowdSec и убедиться, что новые блокировки применяются с нужной длительностью.

sudo journalctl -u crowdsec -f

Это даст вам возможность в реальном времени видеть, как CrowdSec применяет блокировки, и убедиться в правильности настроек.

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

Для этого нужна команда:

sudo cscli decisions list

Настройка увеличения времени блокировки в CrowdSec — это отличный способ сделать вашу защиту более адаптивной и надежной. Если у вас есть идеи, как еще можно усилить защиту, или вопросы по настройке, делитесь ими в комментариях!