Установка и настройка cs-mikrotik-bouncer для CrowdSec и MikroTik

cs-mikrotik-bouncer — это bouncer-компонент для CrowdSec, который передаёт заблокированные IP-адреса на MikroTik через API и добавляет их в firewall address-list. После этого MikroTik может блокировать вредоносные адреса на уровне input и forward chain.

Установка и настройка cs-mikrotik-bouncer для CrowdSec и MikroTik

cs-mikrotik-bouncer — это bouncer для CrowdSec, который передаёт заблокированные IP-адреса на MikroTik. CrowdSec выявляет подозрительные адреса по логам, а MikroTik блокирует их на уровне firewall через address-list.

Схема работы простая:

Логи серверов → CrowdSec → decision ban → cs-mikrotik-bouncer → MikroTik address-list → firewall drop

Такой вариант полезен, если MikroTik стоит на границе сети и через него проходит входящий трафик к серверам, VPN, веб-сервисам или клиентским подсетям.


Что потребуется

Для работы нужны:

CrowdSec
MikroTik RouterOS
Docker / Docker Compose
Включенный API на MikroTik
API-ключ bouncer в CrowdSec
Firewall-правила на MikroTik

Важно: репозиторий funkolab/cs-mikrotik-bouncer архивирован, поэтому для production лучше заранее учитывать риски поддержки.


Включаем API на MikroTik

На MikroTik включаем API:

/ip/service/enable api

Обычный API использует порт:

8728

API SSL использует порт:

8729

Лучше разрешить доступ к API только с сервера, где будет работать bouncer.

Пример:

/ip/firewall/filter
add chain=input action=accept protocol=tcp src-address=10.100.3.10 dst-port=8728 comment="Allow MikroTik API from CrowdSec bouncer"
add chain=input action=drop protocol=tcp dst-port=8728 comment="Drop MikroTik API from others"

Создаём пользователя MikroTik

Не стоит использовать основного администратора. Лучше создать отдельного пользователя:

/user/group/add name=crowdsec-api policy=read,write,api
/user/add name=crowdsec group=crowdsec-api password="password"

Создаём API-ключ bouncer в CrowdSec

На сервере CrowdSec выполняем:

sudo cscli bouncers add mikrotik-bouncer

CrowdSec выдаст API key. Его нужно сохранить и указать в .env.

Проверить bouncer-ы:

sudo cscli bouncers list

Готовим каталог

sudo mkdir -p /opt/crowdsec-mikrotik-bouncer
cd /opt/crowdsec-mikrotik-bouncer

Создаём .env:

sudo nano .env

Пример:

CROWDSEC_BOUNCER_API_KEY=PASTE_API_KEY_HERE
CROWDSEC_URL=http://10.100.3.10:8080/
MIKROTIK_HOST=ipaddress
MIKROTIK_USER=crowdsec
MIKROTIK_PASS=password
MIKROTIK_TLS=false
MIKROTIK_IPV6=false
LOG_LEVEL=1

Закрываем файл с секретами:

sudo chmod 600 .env

Docker Compose

Создаём docker-compose.yml:

sudo nano docker-compose.yml

Содержимое:

services:
cs-mikrotik-bouncer:
image: ghcr.io/funkolab/cs-mikrotik-bouncer:latest
container_name: cs-mikrotik-bouncer
restart: unless-stopped
env_file:
- .env

Запускаем:

sudo docker compose up -d

Проверяем:

sudo docker ps | grep cs-mikrotik-bouncer
sudo docker logs -f cs-mikrotik-bouncer

Настраиваем firewall на MikroTik

Bouncer добавляет IP в address-list crowdsec, но блокировать их должен firewall.

Для защиты самого MikroTik:

/ip/firewall/filter
add chain=input action=drop src-address-list=crowdsec in-interface-list=WAN place-before=0 comment="crowdsec drop input"

Для защиты сетей за MikroTik:

/ip/firewall/filter
add chain=forward action=drop src-address-list=crowdsec in-interface-list=WAN place-before=0 comment="crowdsec drop forward"

Если WAN interface-list ещё не создан:

/interface/list/add name=WAN
/interface/list/member/add list=WAN interface=ether1

ether1 заменить на свой внешний интерфейс.


Проверка работы

Добавляем тестовую блокировку в CrowdSec:

sudo cscli decisions add --ip 1.2.3.4 --duration 10m --type ban

Проверяем на MikroTik:

/ip/firewall/address-list/print where list=crowdsec

Должен появиться IP:

1.2.3.4

Проверяем счётчики firewall:

/ip/firewall/filter/print stats where comment~"crowdsec"

Удаляем тестовую блокировку:

sudo cscli decisions delete --ip 1.2.3.4

Что мониторить

Минимально стоит контролировать:

контейнер cs-mikrotik-bouncer запущен
LAST API PULL в cscli bouncers list обновляется
IP появляются в MikroTik address-list crowdsec
firewall-счётчики растут
CPU MikroTik не перегружен

Команды:

sudo cscli bouncers list
sudo cscli decisions list
sudo docker logs cs-mikrotik-bouncer

На MikroTik:

/ip/firewall/address-list/print count-only where list=crowdsec
/system/resource/print

Важные замечания

Не стоит сразу заливать на MikroTik огромные community blocklist. На слабых моделях большое количество address-list записей может создать нагрузку.

Лучше начинать с локальных decisions CrowdSec, проверить CPU, firewall-счётчики и только потом расширять правила.

Также API MikroTik нельзя открывать наружу. Доступ должен быть только с сервера bouncer или через доверенную management-сеть.


Итог

cs-mikrotik-bouncer позволяет использовать CrowdSec не только для обнаружения атак, но и для блокировки вредоносных IP прямо на MikroTik.

Это удобная схема для edge-маршрутизатора:

CrowdSec обнаруживает атакующих
bouncer передаёт IP на MikroTik
MikroTik блокирует трафик на границе сети

Решение простое, быстро внедряется и хорошо подходит как дополнительный уровень защиты для серверов и сетей за MikroTik.

Действия с записью
Назад в блог

Комментарии

Комментариев пока нет.

Войдите, чтобы оставить комментарий.