← Blog

Автоматичне блокування зловмисників за допомогою BGP — система виявлення вторгнень (IDS), яка анонсує маршрути чорних отворів

DEENESRUUK

Найчистіше місце для "скидання" зловмисника — це не сервер, а край мережі, до того, як пакети коштуватимуть вам грошей. 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 і вичитані. Помітили помилку? Напишіть мені.