Автоматичне блокування зловмисників за допомогою BGP — система виявлення вторгнень (IDS), яка анонсує маршрути чорних отворів
Найчистіше місце для "скидання" зловмисника — це не сервер, а край мережі, до того, як пакети коштуватимуть вам грошей. Suri Defender робить саме це: він перетворює "цей IP атакує нас" на оголошення BGP, яке чорнить джерело на кордових точках, а MikroTik при цьому ніколи не передає жодного маршруту blackhole у ядро.
Ідея: виявлення → маршрут
Блокування за допомогою iptables працює на одному боксі. Але коли ви запускаєте автономну систему (AS 48756 тут), правильним примітивом є RTBH — Remote-Triggered Black Hole. Ви оголошуєте порушний /32 через iBGP, позначений спільнотою black-hole (48756:666); кожен граничний маршрутизатор, який це чує, відкидає трафік до цього призначення. Одне оголошення, відкинуте всюди, на швидкості лінії.
Отже, увесь дизайн — це конвеєр, що закінчується оголошенням BGP:
SSH / nginx / syslog / FortiGate logs
│ │
CrowdSec scenarios fail2ban jails
│ decisions │ file-only action
▼ ▼
source-of-truth DB + prefix files
│ union − whitelist
▼
ExaBGP route-injector → FRR (bgpd) → borders / MikroTik
announce /32 · community 48756:666
- CrowdSec парсить логи та запускає сценарії виявлення, надаючи потік рішень.
- fail2ban обробляє свої власні в'язниці (SSH, VPN, nginx, mail) та додає заблоковані
/32у звичайний файл — навмисно дурна дія лише з файлами, безvtysh. - Невелика служба FastAPI + SQLite зберігає джерело істини, застосовує TTL та регенерує файл префіксів.
- ExaBGP читає об'єднання цих файлів (за вирахуванням білого списку) та надсилає
announce/withdrawдо FRR, який відображає маршрути далі.
Чому route-injector кращий за reconciler
Перша версія зберігала blackholes як статичні маршрути плюс prefix-list та redistribute static, з реконсилювачем, який намагався їх синхронізувати. Під FRR 10.6 це постійно конфліктувало з демоном керування: розсинхронізація триє префіксів, фантомні маршрути, конкуренція за datastore-lock, frr.conf обсягом 2.6 МБ.
Перехід на ExaBGP route-injector повністю усунув локальний стан маршрутизації — ядро тепер не має жодних маршрутів blackhole. "Заблоковано" та "оголошено" стали одним і тим же фактом за конструкцією, а не двома станами, за якими мусить гнатися реконсилювач. Це та інваріантність, яка змушує систему переставати вас дивувати о 3-й ночі.
Легше також
Він замінив важний стек Suricata + OpenSearch + Dashboards + Filebeat + EveBox — близько 2.7 ГБ оперативної пам'яті — жменю невеликих процесів загальною вагою кількох сотень мегабайт. Та сама робота, на порядок менша вага та єдиний веб-інтерфейс для перегляду того, що зараз black-holed і чому.
Виявлення — це проблема, яку майже вирішено; цікава частина — це відповідь — а для мережі найбільш елегантна відповідь — це маршрут.
Прозорість: більшість дописів тут створено за допомогою ШІ, а неанглійські версії перекладені локальною LLM і вичитані. Помітили помилку? Напишіть мені.