Перейти к основному содержимому

Антиддос практика: crowdsec + логи nginx (openresty)

Ниже написаны заметки а-ля поток мыслей. В конце сюрприз

Планировалось использовать CrowdSec как средство защиты от DDoS атак. В теории алгоритм был такой:

  • crowdsec читает access.log файл от openresty
  • парсит записи через nginx-logs
  • прогоняет запрос через сценарии (1 | 2)
  • если запрос или запросы вызывают у него подозрения, то IP отлетает в бан через API CloudFlare

Настройка довольно проста, хоть у ClowdSec нет никакого графического интерфейса. После установки CrowdSec и этой коллекции просто в acquis.yaml указать путь к access.log и перезагрузить CrowdSec.

Сразу после подключения nginx лога и рестарта crowdsec можно наблюдать как он читает и обрабатывает существующие логи через cscli metrics

cscli_metrics


  • Помимо nginx может анализировать и реагировать на действия с ssh, docker и вообще любой дичью
  • Сам по себе ничего не сделает. Это просто приложение без веб оболочки. В основном конфиге указываем путь к access.log.
  • При ддос атаках сильно страдает. Дает большую нагрузку на проц. Дешевле через openresty резать без анализа лога

Устанавливаем коллекцию с парсером и сценариями для nginx. Парсер для парсинга файла, сценарий для определения что происходит с запросом (например человек пытался получить доступ к чувствительным данным, например .env или .git). Баунсеры это как реагировать на странные запросы, например банить через CLoudFlare или показывать капчу

После установки коллекции или парсера или сценария, полезно заюзать cscli explain, чтобы проверить что его подхватывает и как реагирает. Можно увидеть, полетит ли запрос бан например

Вот хорошая статья. Когда я пощупал CrowdSec и не понял что к чему, то она склеила мою нецельную картинку во едино.


Мнение спустя пару часов или дней (не помню) возни:

Короче, в жопу этот crowdsec. Настраивать и настраивать, а работает все равно медленно.

медленно

Но их идея с парсингом самого лога вместо внедрения в openresty мне нравится. Чисто чекаешь логи, ищешь там говно и потом это говно кидаешь в CloudFalre. Идея проста, реализация сложная можно написать lua скрипт, который будет читать лог на лету и делать то же самое. Даже openresty не нужен был бы 🙂 через API правила и ограничения выставлять