Auto-blocking Angreifer mit BGP – ein IDS, das Black-Hole-Routen bekannt macht
Der sauberste Ort, um einen Angreifer zu stoppen, ist nicht der Server – es ist die Grenze des Netzwerks, bevor die Pakete Ihnen irgendetwas kosten. Suri Defender tut genau das: Er wandelt „Diese IP greift uns an“ in eine BGP-Ankündigung um, die die Quelle an den Grenzen blackholet, während der MikroTik und der Core Router nie eine einzige Blackhole-Route tragen müssen.
Die Idee: Erkennung → eine Route
Mit iptables zu blockieren funktioniert auf einem Gerät. Aber wenn man ein autonomes System (AS 48756 hier) betreibt, ist das richtige Primitive RTBH – Remote-Triggered Black Hole. Man kündigt den betreffenden /32 über iBGP mit einer blackhole Community (48756:666) an; jeder Border Router, der dies hört, wirft den Verkehr zu diesem Ziel ab. Eine Ankündigung, überall abgefeuert, mit Line Rate.
Das gesamte Design ist also eine Pipeline, die in einem BGP announce endet:
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 parst die Logs und führt Erkennungsszenarien aus, wodurch ein Entscheidungsstrom entsteht.
- fail2ban kümmert sich um seine eigenen Jails (SSH, VPN, nginx, mail) und hängt gebannte
/32s in eine einfache Datei ein – eine absichtlich dumme, file-only Aktion, keinvtysh. - Ein kleines FastAPI + SQLite Service hält die Quelle der Wahrheit, wendet TTLs an und regeneriert die Prefix-Datei.
- ExaBGP liest die Vereinigung dieser Dateien (abzüglich einer Whitelist) und emittiert
announce/withdrawan FRR, was die Routen weitergibt.
Warum ein Route-Injector besser ist als ein Reconciler
Die erste Version behielt Blackholes als statische Routen plus eine prefix-list und redistribute static bei, mit einem Reconciler, der versuchte, sie synchron zu halten. Unter FRR 10.6 kämpfte das ständig mit dem Management Daemon: prefix-list trie desyncs, Phantomrouten, datastore-lock contention, eine 2.6 MB frr.conf.
Der Wechsel zu einem ExaBGP route-injector eliminierte den lokalen Routing-Status vollständig – der Core hält jetzt keine Blackhole-Routen mehr. „Geblockt“ und „angekündigt“ wurden zum gleichen Fakt durch Konstruktion, nicht zu zwei Zuständen, die ein Reconciler verfolgen muss. Das ist die Art von Invariante, die einem System verhindert, um 3 Uhr morgens überraschend zu sein.
Außerordentlich leicht
Es ersetzte einen schweren Suricata + OpenSearch + Dashboards + Filebeat + EveBox Stack – etwa 2.7 GB RAM – durch eine Handvoll kleiner Prozesse mit insgesamt wenigen hundert Megabyte. Dieselbe Aufgabe, um Größenordnungen weniger Gewicht und eine einzige Web-UI, um zu sehen, was gerade blackholet ist und warum.
Erkennung ist ein quasi gelöstes Problem; der interessante Teil ist die Reaktion – und für ein Netzwerk ist die eleganteste Reaktion eine Route.
Transparenz: Die meisten Beiträge werden mit KI-Unterstützung verfasst, und die nicht-englischen Versionen werden von einem lokalen LLM maschinell übersetzt und anschließend geprüft. Fehler entdeckt? Bitte gib mir Bescheid.