Оба инструмента читают логи и банят адреса, и на первый взгляд CrowdSec — это Fail2ban поновее. Разница между ними существеннее и лежит не в возрасте кода, а в том, откуда берётся решение о блокировке.

Устройство

Fail2ban — один процесс, который читает логи, считает совпадения по регулярным выражениям и вызывает команду фаервола. Всё решение принимается на вашей машине по вашим счётчикам. Ничего никуда не отправляется, зависимостей нет, настройка — текстовые файлы.

CrowdSec разделён на две части, и это главное, что надо понять до установки. Сам агент только обнаруживает: разбирает логи, применяет сценарии и записывает решение в свою базу. Применяет решение отдельная программа — bouncer. Без установленного bouncer'а CrowdSec работает, показывает алерты, ведёт список решений — и не блокирует ничего.

Это самое частое разочарование при первом знакомстве: инструмент установлен, атаки видны, а трафик идёт как шёл.

sudo apt install crowdsec
sudo apt install crowdsec-firewall-bouncer-iptables
sudo cscli bouncers list

Последняя команда должна показать хотя бы одну зарегистрированную запись. Если список пуст — блокировки нет.

Вторая разница: общая репутация

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

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

Здесь же и то, о чём стоит знать заранее: обмен данными двусторонний. Наружу уходят адреса нарушителей и типы сработавших сценариев. Работать полностью локально можно — без регистрации в облачной консоли, — но тогда и общий список вам недоступен, и главное преимущество исчезает. Это осознанный выбор, а не мелочь настройки.

Команды на каждый день

sudo cscli metrics
sudo cscli alerts list
sudo cscli decisions list
sudo cscli decisions delete --ip 203.0.113.25

metrics отвечает на вопрос, читаются ли логи вообще: если разобранных строк ноль, значит, коллекция для вашего веб-сервера не установлена или путь к логам не тот. Это второй по частоте случай «стоит и не работает».

sudo cscli collections list
sudo cscli collections install crowdsecurity/nginx

Ресурсы

CrowdSec написан на Go и держит своё состояние в базе. Расход памяти — порядка сотни мегабайт, плюс bouncer. Для сервера с гигабайтом памяти это ощутимо, для двух и выше — незаметно. Fail2ban легче, но и делает меньше.

Стоит ли держать оба

Они не конфликтуют: один пишет свои правила в фаервол, другой — свои, и двойная блокировка одного адреса ничему не вредит. Разумное разделение выглядит так.

CrowdSec берёт на себя массовое: перебор SSH, сканирование веб-сервера, известные плохие адреса из общего списка. Fail2ban остаётся там, где у вас есть свой лог со своим форматом, для которого проще написать регулярное выражение, чем сценарий, — самописное приложение, редкая служба, специфичная форма входа.

Если же выбирать один, ориентир такой: на сервере с сайтом, который постоянно перебирают, CrowdSec даёт больше за счёт общего списка. На сервере, доступном только вам по SSH с ключами, разница между ними невелика — там вообще большая часть работы сделана отключением паролей.

Общее ограничение

Ни один из них не защищает от уязвимости в приложении. Оба работают с частотой обращений и с репутацией адреса, и запрос, эксплуатирующий дыру в плагине с первой попытки и с чистого адреса, пройдёт мимо обоих. Это работа других инструментов — WAF на уровне запросов и своевременных обновлений. Блокировка адресов убирает фон, а не причину.

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