Быстрый туториал по установке и эксплуатации системы фильтрации ip-адресов crowdsec v.1.0.x

Get Started

Install the Agent

Debian/Ubuntu
RHEL/CentOS/Amazon Linux
Debian (Official)
Docker
FreeBSD
Tarball

  • Debian/Ubuntu

    $ curl -s https://packagecloud.io/install/repositories/crowdsec/crowdsec/script.deb.sh | sudo bash$
    sudo apt-get install crowdsec
    Copy code
    curl -s https://packagecloud.io/install/repositories/crowdsec/crowdsec/script.deb.sh | sudo bash

    sudo apt-get install crowdsec

  • RHEL/CentOS/Amazon Linux

    $ curl -s https://packagecloud.io/install/repositories/crowdsec/crowdsec/script.rpm.sh | sudo bash$
    sudo yum install crowdsec
    Copy code
    curl -s https://packagecloud.io/install/repositories/crowdsec/crowdsec/script.rpm.sh | sudo bash

    sudo yum install crowdsec

  • Debian (Official)

    $ sudo apt-get install crowdsec
    Copy code
    sudo apt-get install crowdsec

  • Docker

    $ docker run -d -v acquis.yaml:/etc/crowdsec/acquis.yaml -e COLLECTIONS=»crowdsecurity/sshd» -v /var/log/auth.log:/var/log/auth.log -v /path/mycustom.log:/var/log/mycustom.log —name crowdsec crowdsecurity/crowdsec
    Copy code
    docker run -d -v acquis.yaml:/etc/crowdsec/acquis.yaml -e COLLECTIONS=»crowdsecurity/sshd» -v /var/log/auth.log:/var/log/auth.log -v /path/mycustom.log:/var/log/mycustom.log —name crowdsec crowdsecurity/crowdsec

  • FreeBSD

    $ pkg install crowdsec
    Copy code
    pkg install crowdsec

  • Tarball

    $ wget -qO — https://github.com/crowdsecurity/crowdsec/releases/latest/download/crowdsec-release.tgz | tar zxvf -$
    cd crowdsec-v* && sudo ./wizard.sh -i
    Copy code
    wget -qO — https://github.com/crowdsecurity/crowdsec/releases/latest/download/crowdsec-release.tgz | tar zxvf —

    cd crowdsec-v* && sudo ./wizard.sh -i

Install a Bouncer

Firewall: Debian/Ubuntu
Firewall: RHEL/CentOS/Amazon Linux
Custom: Debian/Ubuntu
Custom: RHEL/CentOS/Amazon Linux
AWS/GCP
Nginx
Wordpress

  • Firewall: Debian/Ubuntu

    $ curl -s https://packagecloud.io/install/repositories/crowdsec/crowdsec/script.deb.sh | sudo bash$
    sudo apt install crowdsec-firewall-bouncer crowdsec-firewall-bouncer-iptables
    Copy code
    curl -s https://packagecloud.io/install/repositories/crowdsec/crowdsec/script.deb.sh | sudo bash

    sudo apt install crowdsec-firewall-bouncer crowdsec-firewall-bouncer-iptables

  • Firewall: RHEL/CentOS/Amazon Linux

    $ curl -s https://packagecloud.io/install/repositories/crowdsec/crowdsec/script.rpm.sh | sudo bash$
    sudo yum install crowdsec-firewall-bouncer-iptables
    Copy code
    curl -s https://packagecloud.io/install/repositories/crowdsec/crowdsec/script.rpm.sh | sudo bash

    sudo yum install crowdsec-firewall-bouncer-iptables

  • Custom: Debian/Ubuntu

    $ curl -s https://packagecloud.io/install/repositories/crowdsec/crowdsec/script.deb.sh | sudo bash$
    sudo apt install crowdsec-custom-bouncer
    Copy code
    curl -s https://packagecloud.io/install/repositories/crowdsec/crowdsec/script.deb.sh | sudo bash

    sudo apt install crowdsec-custom-bouncer

  • Custom: RHEL/CentOS/Amazon Linux

    $ curl -s https://packagecloud.io/install/repositories/crowdsec/crowdsec/script.rpm.sh | sudo bash$
    sudo yum install crowdsec-custom-bouncer
    Copy code
    curl -s https://packagecloud.io/install/repositories/crowdsec/crowdsec/script.rpm.sh | sudo bash

    sudo yum install crowdsec-custom-bouncer

  • AWS/GCP

    https://hub.crowdsec.net/author/fallard84/bouncers/cs-cloud-firewall-bouncer
    Copy code
    https://hub.crowdsec.net/author/fallard84/bouncers/cs-cloud-firewall-bouncer

  • Nginx

    $ wget -qO — https://github.com/crowdsecurity/cs-nginx-bouncer/releases/latest/download/cs-nginx-bouncer.tgz | tar xvzf -$
    cd cs-nginx-bouncer-v*/$
    sudo ./upgrade.sh && sudo systemctl restart nginx
    Copy code
    wget -qO — https://github.com/crowdsecurity/cs-nginx-bouncer/releases/latest/download/cs-nginx-bouncer.tgz | tar xvzf —

    cd cs-nginx-bouncer-v*/

    sudo ./upgrade.sh && sudo systemctl restart nginx

  • Wordpress

    Click here to download the official plugin
    Copy code
    Click here to download the official plugin

<?xml version=»1.0″ encoding=»UTF-8″?>AFEB9F8A-65D8-49C4-BF47-4958C484D8C8
Download v1.1.1

Generic *nix & containers :¶

  • Some users download the tarball directly and
  • Some users use the docker hub image
  • And the most adventurous might want to
  • And some might even want to
  • Or use it with docker-compose

Required resources

Crowdsec agent itself is rather light, and in a small to medium setup should use less than 100Mb of memory.
During intensive logs processing, CPU is going to be the most used resource, and memory usage shouldn’t really grow.

However, running metabase (the dashboard deployed by ) requires 1-2Gb of RAM.

Install on debian using crowdsec repository

On debian and ubuntu, packages are hosted on packagecloud.io.

Crowdsec distributes their own pragmatic debian packages that closely follow the development stream (packages are automatically published on release), and are suitable for those that want to keep up with the latest changes of crowdsec.

Баланс защиты и производительности

У нашего плагина есть два режима поддержания связи с серверной частью CrowdSec.

Первый режим по умолчанию — «Live mode». Это режим, в котором баунсер при обращении к сайту нового пользователя в режиме реального времени обращается к API сервера для получения информации. В том числе, в этом режиме, IP посетителя сайта проверяется и по общему бан-листу CrowdSec, который генерируется с нашей стороны как разработчиков. После этого сервер передает информацию обратно баунсеру в плагине и он уже банит/не банит пользователя, или показывает ему капчу.

Этот мод обеспечивает наибольшую защиту вашего сайта, но, как можно понять, влияет на производительность сайта и, при большом трафике, создает нагрузку на серверную часть CrowdSec, генерируя поток трафика.

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

Он называется «Stream Mode» — и работает по обратному принципу, нежели «Live Mode». При включении режима поточной работы, главным инициатором выгрузки бан-листа становится серверная часть, которая с определенной периодичностью просто обновляет списки на стороне баунсера, позволяя тому работать с большей автономией.

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

Если вы используете CDN, обратный прокси или балансировщик нагрузки, вы сможете указать в настройках баунсера диапазоны IP-адресов этих устройств. Это позволит вам проверять IP-адреса ваших пользователей. Для других IP-адресов баунсер не будет доверять заголовку X-Forwarded-For.

Установка CrowdSec

С уста­нов­кой CrowdSec все про­сто. Есть несколь­ко вариантов:

  1. Для deb дис­три­бу­ти­вов есть репозиторий.
  2. Для всех осталь­ных бинар­ни­ки с инстал­ля­то­ром. Rpm паке­та, к сожа­ле­нию, нет.
  3. Сбор­ка и уста­нов­ка из исходников.
  4. Уста­нов­ка в docker.

Я буду ста­вить на Centos 8, так что ска­чаю бинар­ни­ки и уста­нов­лю инстал­ля­то­ром. Быст­рее было бы запу­стить в доке­ре, но мне не нра­вит­ся, что туда надо мапить логи. Да и в целом не вижу смыс­ла в уста­нов­ке подоб­но­го соф­та через докер. Это же не раз­ра­бот­ка, когда надо по 5 рели­зов в день с авто­те­ста­ми выка­ты­вать. Один раз поста­вил и поль­зу­ешь­ся, ино­гда обнов­ля­ешь. Что бинар­ни­ки, что кон­тей­нер обно­вить одно и то же вре­мя надо.

Для Debian / Ubuntu уста­нав­ли­ва­ем CrowdSec так:

# wget -qO — https://s3-eu-west-1.amazonaws.com/crowdsec.debian.pragmatic/crowdsec.asc |sudo apt-key add — && sudo apt-add-repository «https://s3-eu-west-1.amazonaws.com/crowdsec.debian.pragmatic/$(lsb_release -cs) $(lsb_release -cs) main»
# apt update
# apt install crowdsec

В Centos уста­нов­ка выгля­дит сле­ду­ю­щим обра­зом. Идем в репо­зи­то­рий https://github.com/crowdsecurity/crowdsec/releases и кача­ем послед­нюю версию.

# wget https://github.com/crowdsecurity/crowdsec/releases/download/v1.0.9/crowdsec-release.tgz

# tar xvzf crowdsec-release.tgz

# cd crowdsec-v1.0.9/

!!!!!!ВАЖНО ПОРТ 8080 ДОЛЖЕН БЫТЬ СВОБОДЕН

Запус­ка­ем инсталлятор:

# ./wizard.sh -i

Он сра­зу же опре­де­лил основ­ные сер­ви­сы, за лога­ми кото­рых будет сле­дить. В моем слу­чае это систем­ные логи linux, лог авто­ри­за­ций ssh и логи nginx. Далее он уточ­нит, какие имен­но лог фай­лы будет пар­сить. По умол­ча­нию он про­ве­ря­ет дефолт­ные дирек­то­рии. Если что-то не нашел, то потом в кон­фи­гу­ра­ци­он­ных фай­лах смо­же­те вруч­ную доба­вить нуж­ные фай­лы с логами.

Далее нуж­но будет выбрать пред­на­стро­ен­ные кон­фи­ги для раз­лич­ных служб. Они есть для наи­бо­лее попу­ляр­ных сер­ви­сов. Тут все по ана­ло­гии с Fail2ban сде­ла­но. В моем слу­чае кон­фи­ги для веб сер­ве­ра nginx, сай­тов на wordpress, систем­ных логов linux и sshd:

  • crowdsecurity/nginx
  • crowdsecurity/sshd
  • crowdsecurity/wordpress
  • crowdsecurity/linux

Далее уста­нов­щик сооб­щит, что создал кон­фиг с белым спис­ком адре­сов, вклю­ча­ю­щим все серые подсети.

Даль­ше вам будет ска­за­но, что ни одно­го bouncer не уста­нов­ле­но, так что ниче­го реаль­но забло­ки­ро­ва­но не будет.

для выпол­не­ния каких-то дей­ствий, тре­бу­ют­ся отдель­ные ком­по­нен­ты систе­мы в виде bouncers. Далее я рас­ска­жу, как их ста­вить и настраивать.

На этом уста­нов­ка CrowdSec закон­че­на. В кон­це вы уви­ди­те спи­сок основ­ных cli команд для вза­и­мо­дей­ствия с локаль­ной службой.

Може­те их поза­пус­кать и посмот­реть, как все это рабо­та­ет. Сама уста­нов­ка CrowdSec выпол­не­на. Пере­хо­дим к настройке.

Баланс защиты и производительности

У нашего плагина есть два режима поддержания связи с серверной частью CrowdSec.

Первый режим по умолчанию — «Live mode». Это режим, в котором баунсер при обращении к сайту нового пользователя в режиме реального времени обращается к API сервера для получения информации. В том числе, в этом режиме, IP посетителя сайта проверяется и по общему бан-листу CrowdSec, который генерируется с нашей стороны как разработчиков. После этого сервер передает информацию обратно баунсеру в плагине и он уже банит/не банит пользователя, или показывает ему капчу.

Этот мод обеспечивает наибольшую защиту вашего сайта, но, как можно понять, влияет на производительность сайта и, при большом трафике, создает нагрузку на серверную часть CrowdSec, генерируя поток трафика.

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

Он называется «Stream Mode» — и работает по обратному принципу, нежели «Live Mode». При включении режима поточной работы, главным инициатором выгрузки бан-листа становится серверная часть, которая с определенной периодичностью просто обновляет списки на стороне баунсера, позволяя тому работать с большей автономией.

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

Если вы используете CDN, обратный прокси или балансировщик нагрузки, вы сможете указать в настройках баунсера диапазоны IP-адресов этих устройств. Это позволит вам проверять IP-адреса ваших пользователей. Для других IP-адресов баунсер не будет доверять заголовку X-Forwarded-For.

CrowdSec vs Fail2ban

Для начала рассмотрим основные отличия CrowdSec от Fail2ban:

  1. Crowdsec более производительный, так как написан на Go, в отличие от Fail2ban, который на Python.
  2. У crowdsec современный yaml формат конфигов.
  3. В качестве парсера лог файлов crowdsec использует фильтры grok, хорошо известные тем, кто активно использует elk stack. Мне лично этот фильтр нравится. Я научился на нем писать правила парсинга.
  4. У crowdsec есть готовая web панель, с помощью которой можно управлять защитой и просматривать статистику.
  5. Есть готовые контейнеры docker, которые призваны упростить установку и запуск. На практике особого упрощения нет, так как надо прокидывать в контейнеры все лог файлы для анализа. Тем не менее, кому актуален докер, не надо будет самому делать контейнеры.
  6. CrowdSec собирает глобальную статистику по заблокированным ip адресам и предоставляет возможность настроить у себя списки блокировки на основе этой статистики. Как по мне, инициатива сомнительная, так как получится то же самое, что и с подобными списками в почте. Потом употеешь себя из этих списков убирать или разбираться, почему кто-то из клиентов не может получить доступ к твоему сервису. Более того, через ботнет доверенных хостов crowdsec можно умышленно банить какие-то ip адреса.
  7. С локальной службой защиты можно взаимодействовать через встроенное API, что открывает безграничные возможности для интеграции.
  8. Из коробки работает экспорт всех основных метрик в формате Prometheus. То есть мониторинг вообще настраивать не надо, он сразу готов.

По сравнению видно, что авторы CrowdSec взяли тот же принцип анализа лог файлов, что и Fail2ban, но развили его и адаптировали под современные реалии.

Мониторинг

Мониторинг — это всегда ключевой момент в построении периметра безопасности и обеспечении работы систем. И кроме классического «tail the logfile» мы предлагаем использовать еще два инструмента — metabase dashboard и метрики prometheus.

Панель мониторинга

Вездесущий cscli позволяет задеплоить нашу панель на основе metabase и docker. 

Для начала рекомендуем ознакомиться с официальной документацией по установке docker. 

cscli dashboard setup разворачивает новую панель мониторинга metabase на докере, генерируя попутно случайный пароль. Ну а дальше все относительно понятно и красиво:

Мониторинг: Prometheus

Если вам не по душе все эти графики, кнопки и веб-интерфейсы, и вы вообще предпочитаете работать через консоль, то для вас подойдет Prometheus вместо metabase. 

Один из способов получить данные, это вызвать cscli metrics:

Важно понимать, что cscli metrics раскрывают только часть потенциала Prometheus. Более подробное описание, что же можно извлечь из показателей, вы получите (внезапно!) в официальной документации по Prometheus в CrowdSec

Если провести быстрый экскурс, то с помощью Prometheus вы можете получить информацию о следующих участках системы и метриках:

— Buckets: как много было создано и какого типа, заполнились/были переполнены с момента запуска демона;

— Acquisition: сколько строк/событий было прочитано из каждого из указанных источников, были ли они проанализированы и/или перемещены позже в корзины;

— Parser: сколько строк/событий было доставлено к каждому парсеру и удалось ли ему обработать упомянутые события;

— Local API: сколько раз был использован каждый маршрут и т. д.

Но как бы не было удобно работать в консоли через cscli, этого недостаточно. Так что рекомендуем использовать Prometheus в связке с Grafana. Вот как это выглядит на практике:

В инструкции указано, что можно создать кластер мониторинга. Как это сделать?

  1. Создаём хост в ADCM, на который будут установлены сервисы мониторинга (см. выше в примере с SSH-бандлом).
  2. Далее переходим на вкладку Clusters и кликаем на Create Cluster. В появившемся окне, в поле Bundle нужно выбрать Monitoring, в поле Cluster name указать Monitoring и нажать Save:
  3. Далее — кликнуть на созданный кластер мониторинга, перейти на вкладку Services. Нажать кнопку Add service, выбрать сервисы Grafana и Graphite и нажать Add:
  4. Кликнуть на сервис Grafana, перейти на вкладку Configuration, заполнить поле Password и нажать Save.
  5. Перейти на вкладку Hosts и добавить хост в состав кластера мониторинга:
  6. Перейти на вкладку Host — Components и связать две роли Grafana и Graphite с сервером мониторинга. Для этого поочерёдно для каждой роли кликнуть сначала на роль, потом на сервер. Сохранить, нажав на Save:
  7. Поле Configuration, Status и Import оставить без изменений.
  8. Для запуска установки системы мониторинга нажать кнопку Run Action в правом верхнем углу и кликнуть Install. После того как установка завершится, консоль Grafana будет доступна по адресу http://<mon-server>:3000.

Что будет дальше™

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

Новый плагин мы протестировали на большинстве версий WordPress, которые сейчас актуальны в мире. В общей сложности, тестами мы покрыли 90%, если верить статистике использования WP по миру. Также мы проводили тестирование на PHP версий 7.2, 7.3, 7.4 и 8, чтобы исключить конфликты на уровне языка, на котором написан WordPress. Само собой, с выходом новых версий как движка, так и языка программирование, мы продолжим работу в этом направлении.

Повторимся, что плагин выпущен под лицензией MIT — самой свободной и широкой бесплатной лицензией в мире. Исходный код плагина полностью доступен на GitHub, как и исходный код CrowdSec.

Устанавливаем haproxy на worknodes

Теперь мы имеем рабочий кластер с тремя master нодами и тремя worker нодами.
Проблема в том, что сейчас наши worker ноды не имеют HA режима.
Если посмотреть на конфиг файл kubelet, то мы увидим, что наши worker ноды обращаются только к одной master ноде из трех.

После того, как HAproxy, установлен нам нужно создать для него конфиг.
Если на worker нодах нет каталога с конфиг файлами, то клонируем его

И запускаем скрипт конфига с флагом haproxy

Скрипт сконфигурирует и перезапустит haproxy.
Проверим, что haproxy стал слушать порт 6443.

Теперь нам нужно сказать kubelet, чтобы он обращался на localhost вместо master ноды. Для этого нужно отредактировать значение server в файлах /etc/kubernetes/kubelet.conf и /etc/kubernetes/bootstrap-kubelet.conf на всех worker нодах.

Значение server должно принять вот такой вид:

После внесения изменений нужно перезапустить службы kubelet и docker

Проверим, что все ноды работают исправно

Пока что у нас нет приложений в кластере, чтобы проверить работу HA. Но мы можем остановить работу kubelet на первой master ноде и убедится, что наш кластер остался дееспособным.

Проверяем со второй master ноды

Все ноды функционируют нормально, кроме той, на которой мы остановили службы.
Не забываем включить обратно службы kubernetes на первой master ноде

Установка CrowdSec

Для начала давайте установим последнюю версию CrowdSec (ну или можете забрать ее из нашего репозитория на GitHub):

В первую очередь, укажем, на какой машине мы работаем и что будем мониторить

Наш мастер установки позволяет выбрать сервисы для мониторинга обычными чекбоксами. Мы будем наблюдать за стандартным набором из nginx, sshd и самой Linux-системой. 

Мастер установки еще и сканирует систему на ассоциированные лог-файлы и предлагает пользователю указать их для мониторинга:

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

Например, коллекция Crowdsecurity/sshd используется для анализа журнала sshd и обнаружения брутфорса ssh или перебора пользователей. 

Коллекция — это специальный набор конфигураций, который разрабатывался для различных кейсов и сценариев защиты системы и всего вашего стека. Например, коллекция Crowdsecurity/sshd используется для анализа журнала sshd и обнаружения брутфорса ssh или перебора пользователей. 

После того, как службы и связанные файлы журналов будут правильно идентифицированы (что очень важно, поскольку именно отсюда CrowdSec будет получать информацию), мастер предложит коллекции. Все коллекции основываются на нашем видении того, как и по каким направлениям стоит защищать систему (то есть никто не запрещает вам заняться ручной конфигурацией периметра, это просто костыль быстрой настройки). 

Все коллекции основываются на нашем видении того, как и по каким направлениям стоит защищать систему (то есть никто не запрещает вам заняться ручной конфигурацией периметра, это просто костыль быстрой настройки). 

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

Это важно, потому что решение о блокировки принимает администратор системы, а не CrowdSec. Мы в этом случае просто предоставляем рекомендации

После завершения установки CrowdSec готов к работе. 

CrowdSec vs Fail2ban

Для начала рассмотрим основные отличия CrowdSec от Fail2ban:

  1. Crowdsec более производительный, так как написан на Go, в отличие от Fail2ban, который на Python.
  2. У crowdsec современный yaml формат конфигов.
  3. В качестве парсера лог файлов crowdsec использует фильтры grok, хорошо известные тем, кто активно использует elk stack. Мне лично этот фильтр нравится. Я научился на нем писать правила парсинга.
  4. У crowdsec есть готовая web панель, с помощью которой можно управлять защитой и просматривать статистику.
  5. Есть готовые контейнеры docker, которые призваны упростить установку и запуск. На практике особого упрощения нет, так как надо прокидывать в контейнеры все лог файлы для анализа. Тем не менее, кому актуален докер, не надо будет самому делать контейнеры.
  6. CrowdSec собирает глобальную статистику по заблокированным ip адресам и предоставляет возможность настроить у себя списки блокировки на основе этой статистики. Как по мне, инициатива сомнительная, так как получится то же самое, что и с подобными списками в почте. Потом употеешь себя из этих списков убирать или разбираться, почему кто-то из клиентов не может получить доступ к твоему сервису. Более того, через ботнет доверенных хостов crowdsec можно умышленно банить какие-то ip адреса.
  7. С локальной службой защиты можно взаимодействовать через встроенное API, что открывает безграничные возможности для интеграции.
  8. Из коробки работает экспорт всех основных метрик в формате Prometheus. То есть мониторинг вообще настраивать не надо, он сразу готов.

По сравнению видно, что авторы CrowdSec взяли тот же принцип анализа лог файлов, что и Fail2ban, но развили его и адаптировали под современные реалии. Я читал, что они работают над интеграцией своего продукта с Kubernetes и его Ingress Controller.

Баланс™ защиты™ и производительности

У нашего плагина есть два режима поддержания связи с серверной частью CrowdSec.

Первый режим по умолчанию — «Live mode». Это режим, в котором баунсер при обращении к сайту нового пользователя в режиме реального времени обращается к API сервера для получения информации. В том числе, в этом режиме, IP посетителя сайта проверяется и по общему бан-листу CrowdSec, который генерируется с нашей стороны как разработчиков. После этого сервер передает информацию обратно баунсеру в плагине и он уже банит/не банит пользователя, или показывает ему капчу.

Этот мод обеспечивает наибольшую защиту вашего сайта, но, как можно понять, влияет на производительность сайта и, при большом трафике, создает нагрузку на серверную часть CrowdSec, генерируя поток трафика.

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

Он называется «Stream Mode» — и работает по обратному принципу, нежели «Live Mode». При включении режима поточной работы, главным инициатором выгрузки бан-листа становится серверная часть, которая с определенной периодичностью просто обновляет списки на стороне баунсера, позволяя тому работать с большей автономией.

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

Если вы используете CDN, обратный прокси или балансировщик нагрузки, вы сможете указать в настройках баунсера диапазоны IP-адресов этих устройств. Это позволит вам проверять IP-адреса ваших пользователей. Для других IP-адресов баунсер не будет доверять заголовку X-Forwarded-For.

Мониторинг

Мониторинг — это всегда ключевой момент в построении периметра безопасности и обеспечении работы систем. И кроме классического «tail the logfile» мы предлагаем использовать еще два инструмента — metabase dashboard и метрики prometheus.

Панель мониторинга

Вездесущий cscli позволяет задеплоить нашу панель на основе metabase и docker. 

Для начала рекомендуем ознакомиться с официальной документацией по установке docker. 

cscli dashboard setup разворачивает новую панель мониторинга metabase на докере, генерируя попутно случайный пароль. Ну, а дальше все относительно понятно и красиво:

Мониторинг: Prometheus

Если вам не по душе все эти графики, кнопки и веб-интерфейсы, и вы вообще предпочитаете работать через консоль, то для вас подойдет Prometheus вместо metabase. 

Один из способов получить данные, это вызвать cscli metrics:

Важно понимать, что cscli metrics раскрывают только часть потенциала Prometheus. Более подробное описание, что же можно извлечь из показателей, вы получите (внезапно!) в официальной документации по Prometheus в CrowdSec

Если провести быстрый экскурс, то с помощью Prometheus вы можете получить информацию о следующих участках системы и метриках:

— Buckets: как много было создано и какого типа, заполнились/были переполнены с момента запуска демона;

— Acquisition: сколько строк/событий было прочитано из каждого из указанных источников, были ли они проанализированы и/или перемещены позже в корзины;

— Parser: сколько строк/событий было доставлено к каждому парсеру и удалось ли ему обработать упомянутые события;

— Local API: сколько раз был использован каждый маршрут и т. д.

Но как бы не было удобно работать в консоли через cscli, этого недостаточно. Так что рекомендуем использовать Prometheus в связке с Grafana. Вот как это выглядит на практике:

Архитектура решения

CrowdSec состо­ит из сле­ду­ю­щих компонентов:

  • Локаль­ная служ­ба, кото­рая зани­ма­ет­ся пар­син­гом логов и име­ет свой API.
  • CLI интер­фейс для вза­и­мо­дей­ствия со служ­бой через консоль.
  • Раз­лич­ные моду­ли инте­гра­ции (Bouncers) для выпол­не­ния каких-то дей­ствий на осно­ве пар­син­га. Напри­мер, бло­ки­ров­ка ip адре­сов с помо­щью firewall.
  • База дан­ных для хра­не­ния сво­ей инфор­ма­ции. В самом про­стом слу­чае исполь­зу­ет­ся sqlite, кото­рая уста­нав­ли­ва­ет­ся авто­ма­ти­че­ски и не тре­бу­ет отдель­ной настройки.
  • Пуб­лич­ная база дан­ных с ip адре­са­ми и репу­та­ци­ей. С ней мож­но вза­и­мо­дей­ство­вать через API.

Исхо­дя из архи­тек­ту­ры, у вас есть как мини­мум 2 раз­ных спо­со­ба исполь­зо­ва­ния CrowdSec у себя. Воз­мож­на пол­но­стью локаль­ная уста­нов­ка, ана­лиз локаль­ных логов и выпол­не­ние опре­де­лен­ных дей­ствий на осно­ве ана­ли­за. Вза­и­мо­дей­ствия с пуб­лич­ной базой дан­ных может не быть.

Вто­рой, про­ти­во­по­лож­ный вари­ант, когда вы вооб­ще не ана­ли­зи­ру­е­те свои логи, а исполь­зу­е­те пуб­лич­ную репу­та­ци­он­ную базу дан­ных адре­сов и выпол­ня­е­те какие-то дей­ствия с ними с помо­щью Bouncers. Напри­мер, всем ip адре­сам из базы пока­зы­ва­е­те каптчу.

Воз­мож­на ком­би­на­ция этих режи­мов. Напри­мер, ана­ли­зи­ро­вать и свои логи, и брать инфор­ма­цию об ip из репу­та­ци­он­ной базы. Как я уже ска­зал, мне подоб­ная база видит­ся сомни­тель­ной ини­ци­а­ти­вой, так что я ее исполь­зо­вать не буду. Настрою локаль­ную служ­бу и ана­лиз сво­их лог фай­лов. То есть пол­ный ана­лог Fail2ban.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Техноарена
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: