Динамическое увеличение времени блокировки в CrowdSec кратно трём
Динамическое увеличение времени блокировки в 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 — это отличный способ сделать вашу защиту более адаптивной и надежной. Если у вас есть идеи, как еще можно усилить защиту, или вопросы по настройке, делитесь ими в комментариях!
- Наше сообщество Openode.XYZ OpeNode.xyz
- Aeza VPS (+15% к пополнению) Aeza.net
- Лучший Евро-хостер VPS (+1 месяц бесплатно на 100$) Kamatera.com
- VPS hosting - 4vps.su (-10% скидка!) 4VPS.su
- TG Channel TG-Channel Neonode.cc