Дружим Crowdsec Blocklists и Mikrotik

CrowdSec Blocklists - это списки IP-адресов, подозреваемых или подтверждённых в злонамеренной активности (взлом, сканирование, спам, брутфорс и т.д.), которые CrowdSec предлагает для автоматической защиты серверов, сетей и приложений.

Так воспользуемся же этим коллективных иммунитетом, чтобы защитить ваши публичные сервисы за микротами.

План такой:

  • поднимаем crowdsec в LXC самым быстрым способом
  • устанавливаем и настраиваем blocklist mirror bouncer
  • импортируем список скриптом в микрот и добавляем в планировщик
  • настраиваем firewall
  • смотрим счетчики, радуемся

Официальная документация, если кому надо

Установка crowdsec
Создаем LXC контейнер на дебиане, используем в консоли контейнера скрипт из Proxmox VE Helper-Scripts
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/addon/crowdsec.sh)"

Установка и настройка blocklist mirror bouncer
apt install crowdsec-blocklist-mirror
проверяем

> cscli bouncers list

редактируем
nano /etc/crowdsec/bouncers/crowdsec-blocklist-mirror.yaml
в нем меняем строчки
format: mikrotik
> "listen_uri: server_local_IP:41412", тут должен быть локальный ip вашего сервера, а не 127.0.0.1

Перезапуск
systemctl restart crowdsec-blocklist-mirror

Проверяем выгрузкой
apt install curl
curl http://server_local_IP:41412/security/blocklist

Создаем скрипт в микроте

/system script
add dont-require-permissions=no name=crowdsec_import policy=\
    ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=":local name \"[crowdsec]\"\
    \n:local url \"http://server_local_IP:41412/security/blocklist\"\
    \n:local fileName \"blocklist.rsc\"\
    \n:log info \"\$name fetch blocklist from \$url\"\
    \n/tool fetch url=\"\$url\" mode=http dst-path=\$fileName\
    \n:if ([:len [/file find name=\$fileName]] > 0) do={\
    \n    :log info \"\$name import;start\"\
    \n    /import file-name=\$fileName\
    \n    :log info \"\$name import:done\"\
    \n} else={\
    \n    :log error \"\$name failed to fetch the blocklist\"\
    \n}"

Добавляем в планировщик

/system scheduler
add interval=1h name=schedule1 on-event="system/script/run crowdsec_import"

Добавляем правила в ФВ|

/ip firewall filter
add action=drop chain=forward comment="Drop from Crowdsec Lists" src-address-list=CrowdSec
add action=drop chain=input comment="Drop from Crowdsec Lists" src-address-list=CrowdSec
2 лайка

Отличная статья, но есть вопросики :wink:

Я начал разворачивание crowdsec, но столкнулся с тем, что для начала надо поднять графану и локи, поэтому пока на паузе.

Обычно я находил вариант с баунсером микротика, когда прописывается команда добавления IP в address list на определенное время. Получается, что crowdsec получил решение заблочить IP и отправляет команду на блокировку.

У Вас же crowdsec генерирует скрипт, который микротик импортирует, видится, что

  1. выше нагрузка за счет перезаписывания полностью вписка блокировок
  2. задержка в получении обновлений т.к. скрипт импортируется раз в час
  3. насилование флешки т.к. без доп тюнинга это использует ресурсы флешки, что актуально на устройствах с 16 МБ памяти, но раз в час не так уж и сильно будет грузить.

Подскажите, пожалуйста, почему именно такой вариант выбрали? Не критикую, а пытаюсь разобраться т.к. пока плаваю в этой теме и еще не настроил полноценную систему у себя.

я посмотрел списки, там минимальный таймер блока прилетает 2 часа, в оф доках предлагается обновлять списки раз в 10 минут, что лично мне кажется избыточным, раз в час норм, но можно и до двух увеличить.
Некоторые ip могут попадать в список ошибочно, поэтому нужно перезаписывать, а не держать в бане половину интернета за вирус, который они давно вылечили.
Насчет флешки я особо не парюсь, CHR. Желающие могут переписать адрес-лист в ОЗУ.

А вы используете публичные списки блокировок или анализируете логи ssh и веб сервисов?

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

Пожелание по оформлению (надо еще кавычки поправить)

Установка crowdsec

  1. Создаем LXC контейнер на дебиане, используем в консоли контейнера скрипт из Proxmox VE Helper-Scripts
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/addon/crowdsec.sh)"
  1. Установка и настройка blocklist mirror bouncer
apt install crowdsec-blocklist-mirror
  1. проверяем
cscli bouncers list
  1. редактируем
nano /etc/crowdsec/bouncers/crowdsec-blocklist-mirror.yaml

в нем меняем строчку

"listen_uri: server_local_IP:41412",

тут должен быть локальный ip вашего сервера, а не 127.0.0.1

  1. Перезапуск
systemctl restart crowdsec-blocklist-mirror
  1. Проверяем выгрузкой
apt install curl
curl http://server_local_IP:41412/security/blocklist

Настраиваем mikrotik

  1. Создаем скрипт в микроте
/system script
add dont-require-permissions=no name=crowdsec_import policy=
ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=":local name "[crowdsec]"
\n:local url "http://server_local_IP:41412/security/blocklist"
\n:local fileName "blocklist.rsc"
\n:log info "$name fetch blocklist from $url"
\n/tool fetch url="$url" mode=http dst-path=$fileName
\n:if ([:len [/file find name=$fileName]] > 0) do={
\n :log info "$name import;start"
\n /import file-name=$fileName
\n :log info "$name import:done"
\n} else={
\n :log error "$name failed to fetch the blocklist"
\n}"
  1. Добавляем в планировщик
/system scheduler
add interval=1h name=schedule1 on-event="system/script/run crowdsec_import"
  1. Добавляем правила в ФВ
/ip firewall filter
add action=drop chain=forward comment="Drop from Crowdsec Lists" src-address-list=CrowdSec
add action=drop chain=input comment="Drop from Crowdsec Lists" src-address-list=CrowdSec

ну тогда действительно нет смысла в частом обновлении.