Beta-Vorschau — auf dem Weg zu 1.0. Probleme?
API & Entwickler

DDoS-Schutz-API

Vollständige Referenz der Fusiora DDoS-Schutz-REST-API — Authentifizierung, geschützte IPs, Filterprofile, IP-Listen und Angriffsverlauf.

22. Juni 202642 min Lesezeitapiddosauthenticationprotected-ipsfilter-profilesip-listsattack-historyreference

DDoS-Schutz-API — Überblick & Authentifizierung

Die Fusiora DDoS Protection API ist ein Wrapper um den Avoro DDoS Manager. Damit kannst du geschützte IP-Adressen einsehen, den Angriffsverlauf prüfen, Filterprofile an IPs anhängen, wiederverwendbare IP-Listen verwalten und Schutzeinstellungen pro IP konfigurieren.

Damit kannst du:

  • Geschützte IP-Adressen in deinem Konto einsehen.
  • Den Verlauf der Angriffe auf deine IPs prüfen.
  • Filterprofile (Presets + Protokoll-/Port-Bereiche) an IPs anhängen.
  • Wiederverwendbare IP-Listen mit WHITELIST / BLACKLIST / TRUST-Einträgen verwalten.
  • Schutzeinstellungen pro IP konfigurieren: Standardaktion, symmetrischer Modus, ASN blocklist, country blocklist.

Basis-URL

Alle Endpunkte liegen unter:

https://dpm.fusiora.com

Sende jede Anfrage an einen Pfad unter dieser Basis, z. B. https://dpm.fusiora.com/api/attacks.

Endpunktgruppen

Die API ist um die Ressourcen herum organisiert, die du verwaltest:

  • Protected IPs/api/ips/{ip}, /api/ip/{ip}/… — Schutz einer einzelnen IP lesen & konfigurieren.
  • Filter Profiles/api/filters, /api/ip/{ip}/profiles — Presets durchsuchen, sie pro Protokoll+Port-Bereich anhängen/abtrennen.
  • IP Lists/api/iplists, /api/iplists/{id}/entries — Wiederverwendbare CIDR-Listen, auf die Profile verweisen.
  • Attacks/api/attacks, /api/attacks/{id}/stats — Angriffsverlauf und Zeitreihenstatistiken lesen.

Konventionen

  • Request-Bodies sind JSON. Sende bei POST-, PUT- und PATCH-Anfragen immer Content-Type: application/json.
  • Erfolgreiche Antworten geben JSON zurück, außer 204 No Content für Updates und Löschungen, die nichts zurückzugeben haben.
  • Fehler geben JSON mit einem error-Feld zurück, das das Problem beschreibt. Statuscodes findest du in der Referenz.
  • PATCH-Endpunkte unter /api/ip/{ip}/... sind feldbezogen: Sie lesen die aktuelle IP-Konfiguration, ändern nur das angeforderte Feld und schreiben es zurück. Alle anderen Einstellungen bleiben erhalten.

Authentifizierung

Jede Anfrage muss deinen persönlichen API-Schlüssel im HTTP-Header x-api-key enthalten. Anfragen ohne gültigen Schlüssel werden mit 401 Unauthorized abgelehnt.

x-api-key: YOUR_API_KEY

Das war's — kein Bearer-Präfix, keine Signatur, kein Ablaufparameter.

Schnelltest

Ein erfolgreicher Aufruf von /api/attacks bestätigt, dass dein Schlüssel gültig ist:

curl -X GET "https://dpm.fusiora.com/api/attacks" \
  -H "x-api-key: YOUR_API_KEY"

Wenn der Schlüssel falsch ist oder fehlt, erhältst du 401:

{ "error": "Missing or invalid API key" }

Schlüssel verwenden

Sende denselben Header bei jedem Endpunkt:

# GET
curl -X GET "https://dpm.fusiora.com/api/ips/85.239.155.11" \
  -H "x-api-key: YOUR_API_KEY"

# POST with body
curl -X POST "https://dpm.fusiora.com/api/iplists" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name": "officevpn"}'

# PATCH with body
curl -X PATCH "https://dpm.fusiora.com/api/ip/85.239.155.11/default-action" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"defaultAction": "FILTER"}'

Schlüssel geheim halten

  • Committe ihn niemals in ein öffentliches Repository. Behandle ihn wie ein Passwort.
  • Verwende ihn nicht aus clientseitigem JavaScript, das im Browser läuft — leite Aufrufe stattdessen über dein eigenes Backend.
  • Rotiere ihn, wenn du einen Leak vermutest.
  • Verwende möglichst einen Schlüssel pro Umgebung (Produktion / Staging).

Was der Schlüssel kann

Der Schlüssel ist an ein Benutzerkonto und an eine feste Liste von IPs auf der Avoro-Seite gebunden. Er kann alles tun, was diesem Konto erlaubt ist — heute gibt es keine Scopes pro Schlüssel.

Berechtigungen und Besitz

Die API ist mandantenfähig. Jede IP und jede IP-Liste gehört genau einem Konto, und die API lässt dich diese Grenze nie überschreiten.

Wenn du einen Endpunkt aufrufst, prüft die API:

  1. Ist der Schlüssel gültig? (Nein → 401)
  2. Enthält die URL eine IP — ist diese IP in deinem Konto? (Nein → 403)
  3. Enthält die URL eine Listen-ID — wurde diese Liste von deinem Konto erstellt? (Nein → 404)

Warum 403 für IPs, aber 404 für Listen?

Das ist Absicht.

  • IPs haben eine bekannte Form (a.b.c.d). Die Rückgabe von 403 bestätigt, dass die IP irgendwo existiert, nur nicht in deinem Konto. Das ist in Ordnung — IPs sind öffentliche Informationen.
  • IP-Listen-IDs sind interne numerische Handles. Würde man 403 für die Liste einer anderen Person zurückgeben, könnten Angreifer die Listen anderer Nutzer durch sequentielles Ausprobieren von IDs aufzählen. Daher gibt die API 404 Not Found zurück — nicht unterscheidbar von einer Liste, die nie existierte.

Dieselbe Logik für Listeneinträge: Das Löschen eines Eintrags, der zur Liste eines anderen Nutzers gehört, gibt 404 zurück.

Was du kannst und nicht kannst

Du kannst:

  • Jede IP in deinem Konto lesen: GET /api/ips/{ip}.
  • Deine eigenen IP-Listen auflisten, erstellen, aktualisieren, löschen: /api/iplists/....
  • Einträge in deinen eigenen Listen hinzufügen / entfernen: /api/iplists/{id}/entries.
  • Angriffe gegen deine IPs lesen: GET /api/attacks (Ergebnisse werden automatisch auf deine IPs gefiltert).
  • Eine andere deiner eigenen Listen als verschachtelten Eintrag referenzieren.

Du kannst nicht:

  • Eine IP anfassen, die nicht in deinem Konto ist → 403.
  • Eine Liste lesen, ändern oder löschen, die du nicht erstellt hast → 404.
  • Eine fremde Liste in deiner eigenen Liste verschachteln → 400 ("nested list not found").
  • Einen Eintrag über eine Listen-URL löschen, die diesen Eintrag nicht besitzt → 404.

Umfang des Angriffsverlaufs

Der Endpunkt /api/attacks ist besonders: Statt mit 403 zu scheitern, filtert er stillschweigend jeden Angriff heraus, dessen Ziel-IP nicht in deinem Konto ist. Ein leeres Array ist eine gültige Antwort — das macht Pagination + Filterung sicher für den Aufruf aus Hintergrundjobs ohne Besitzprüfung pro Angriff.

Häufige Fallstricke

  • Falscher Schlüssel für die falsche Umgebung. Produktions- und Staging-IPs liegen auf verschiedenen Konten. Das Mischen von Schlüsseln führt zu verwirrenden 403-Fehlern.
  • Kopierte Listen-IDs aus dem Konto eines Teammitglieds. Verwende deine eigenen.
  • Selbstreferenzielle verschachtelte Listen. Das Hinzufügen von Liste 730 als Eintrag in Liste 730 gibt 400 zurück.

Nächste Schritte

  • Protected IPs — Schutz einer einzelnen IP konfigurieren.
  • Filter Profiles — Presets an Protokoll- + Port-Bereiche anhängen.
  • IP Lists — wiederverwendbare CIDR-Listen verwalten.
  • Attack History — Angriffsdatensätze und Statistiken lesen.
  • Reference — Statuscodes, CIDR-Notation, Aktionstypen.

Mit klarer Basis-URL, x-api-key-Authentifizierung und Besitzmodell bist du bereit, den Rest der Dokumentation zu erkunden und den Schutz für deine IPs einzurichten.

Geschützte IPs

Endpoints zum Prüfen und Konfigurieren des DDoS-Schutzes für eine einzelne IP, die Ihrem Konto zugewiesen ist.

Alle PATCH-Endpoints unten sind feldbezogen: Sie lesen die aktuelle IP-Konfiguration, ändern nur das angeforderte Feld und schreiben sie zurück. Schwellenwerte, angehängte Filterprofile und andere Einstellungen bleiben erhalten.

IP-Details abrufen

Gibt die vollständige Konfiguration einer Ihrer geschützten IPs zurück.

GET /api/ips/{ip}

Pfadparameter

  • ip (erforderlich) — IPv4-Adresse, die Ihnen gehört (z. B. 85.239.155.11).

Beispiel

curl -X GET "https://dpm.fusiora.com/api/ips/85.239.155.11" \
  -H "x-api-key: YOUR_API_KEY"

Antwort (200 OK)

{
  "ID": 1234,
  "Ipv4": "85.239.155.11",
  "Description": "Game server #1",
  "Enabled": true,
  "DefaultAction": "FILTER",
  "SymmetricMode": "FULL",
  "CountryBlockMode": 0,
  "CountryBlockList": [],
  "AsnBlockMode": 0,
  "AsnBlockList": [],
  "SynThreshold": 50000,
  "UdpThreshold": 50000
}

In der Antwort können zusätzliche Schutz-Schwellenwerte erscheinen — sie sind hier schreibgeschützt. Nutzen Sie die dedizierten PATCH-Endpoints unten, um einzelne Einstellungen zu ändern.

Fehler: 401 ungültiger Schlüssel · 403 IP nicht in Ihrem Konto · 500 Upstream fehlgeschlagen.

Standardaktion

Die Standardaktion entscheidet, was mit Traffic auf Ports geschieht, die kein bestimmtes Filterprofil haben. Sie ist faktisch die Auffangregel für eine IP.

PATCH /api/ip/{ip}/default-action

Body

{ "defaultAction": "FILTER" }

Werte

  • ACCEPT — DDoS-Schutz deaktiviert. Nur Ports mit einem Filterprofil sind geschützt. Verwenden, wenn Sie den Schutz selbst übernehmen — selten.
  • FILTER — Standardschutz auf jedem Port. Empfohlener Standard. Normale Einstellung für Produktionsserver.
  • DROP — Verwirft sämtlichen Traffic. Nur Ports mit angehängtem Filter lassen Traffic durch. Notausschalter: Vorfallsreaktion, Wartung, Setups mit strikter Zulassungsliste.

Beispiele

# Standard protection (recommended)
curl -X PATCH "https://dpm.fusiora.com/api/ip/85.239.155.11/default-action" \
  -H "x-api-key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"defaultAction": "FILTER"}'

# Killswitch
curl -X PATCH "https://dpm.fusiora.com/api/ip/85.239.155.11/default-action" \
  -H "x-api-key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"defaultAction": "DROP"}'

# Disable protection (accept all)
curl -X PATCH "https://dpm.fusiora.com/api/ip/85.239.155.11/default-action" \
  -H "x-api-key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"defaultAction": "ACCEPT"}'

Antwort (200 OK)

{ "success": true, "message": "Default action set to FILTER", "data": {} }

Fehler: 400 ungültiger Wert · 401 ungültiger Schlüssel · 403 IP gehört Ihnen nicht · 500 Upstream fehlgeschlagen.

Symmetrischer Schutz

Zustandsbehafteter Filter, der verlangt, dass sich jede Verbindung in beide Richtungen konsistent verhält. Wirksam gegen gefälschten Traffic, da gefälschte Pakete nie passenden Antwort-Traffic erhalten.

PATCH /api/ip/{ip}/symmetric

Body

{ "symmetricMode": "FULL" }

Werte

  • FULL — Erzwingt symmetrische Prüfung. Asymmetrische Flows werden geprüft oder verworfen. Empfohlen.
  • DISABLED — Erzwingt kein symmetrisches Routing. Nur verwenden, wenn Ihr Netzwerk absichtlich asymmetrisch ist.

Beispiele

# Enable (recommended)
curl -X PATCH "https://dpm.fusiora.com/api/ip/85.239.155.11/symmetric" \
  -H "x-api-key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"symmetricMode": "FULL"}'

# Disable
curl -X PATCH "https://dpm.fusiora.com/api/ip/85.239.155.11/symmetric" \
  -H "x-api-key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"symmetricMode": "DISABLED"}'

Antwort (200 OK)

{ "success": true, "message": "Symmetric mode set to FULL", "data": {} }

Fehler: 400 ungültiger Wert · 401 ungültiger Schlüssel · 403 IP gehört Ihnen nicht · 500 Upstream fehlgeschlagen.

ASN-Sperrliste

Filtert Traffic nach Quell-ASN (Autonomous System Number). Nützlich, um missbräuchliche Netzwerke zu blockieren oder eine IP auf die ASN eines bestimmten Cloud-Anbieters zu beschränken.

Die Liste ist auf 20 ASNs pro IP begrenzt und funktioniert entweder als Blacklist oder Whitelist.

PATCH /api/ip/{ip}/asn-blocklist

Body

{
  "asnBlockMode": 1,
  "asnBlockList": [12345, 67890]
}

Modi

  • 0 — Disabled — ASN-Filterung ist aus. asnBlockList wird ignoriert.
  • 1 — Blacklist — Traffic von gelisteten ASNs wird blockiert. Alles andere ist erlaubt.
  • 2 — Whitelist — Nur Traffic von gelisteten ASNs ist erlaubt. Alles andere wird blockiert.

Senden Sie beide Felder gemeinsam. ASN-Nummern sind Ganzzahlen zwischen 1 und 4,294,967,295. Kein AS-Präfix — senden Sie 13335, nicht "AS13335". Duplikate werden serverseitig entfernt.

Beispiele

# Block two networks
curl -X PATCH "https://dpm.fusiora.com/api/ip/85.239.155.11/asn-blocklist" \
  -H "x-api-key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"asnBlockMode": 1, "asnBlockList": [12345, 67890]}'

# Whitelist only Cloudflare (AS13335)
curl -X PATCH "https://dpm.fusiora.com/api/ip/85.239.155.11/asn-blocklist" \
  -H "x-api-key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"asnBlockMode": 2, "asnBlockList": [13335]}'

# Disable
curl -X PATCH "https://dpm.fusiora.com/api/ip/85.239.155.11/asn-blocklist" \
  -H "x-api-key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"asnBlockMode": 0, "asnBlockList": []}'

Antwort (200 OK)

{ "success": true, "message": "ASN blocklist updated", "data": {} }

Fehler: 400 ungültiger Modus / Liste kein Array / >20 Einträge / ungültige ASN · 401 ungültiger Schlüssel · 403 IP gehört Ihnen nicht · 500 Upstream fehlgeschlagen.

Länder-Sperrliste

Filtert Traffic nach Quellland (GeoIP). Die Liste ist auf 20 Länder pro IP begrenzt und verwendet ISO 3166-1 alpha-2-Codes.

PATCH /api/ip/{ip}/country-blocklist

Body

{
  "countryBlockMode": 1,
  "countryBlockList": ["CN", "RU", "KP"]
}

Modi

  • 0 — Disabled — Länderfilterung ist aus. countryBlockList wird ignoriert.
  • 1 — Blacklist — Traffic aus gelisteten Ländern wird blockiert. Alles andere ist erlaubt.
  • 2 — Whitelist — Nur Traffic aus gelisteten Ländern ist erlaubt. Alles andere wird blockiert.

Codes sind bei der Eingabe nicht case-sensitiv und werden in Großbuchstaben gespeichert ("cz" wird zu "CZ"). Duplikate werden serverseitig entfernt.

Beispiele

# Block three countries
curl -X PATCH "https://dpm.fusiora.com/api/ip/85.239.155.11/country-blocklist" \
  -H "x-api-key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"countryBlockMode": 1, "countryBlockList": ["CN", "RU", "KP"]}'

# Whitelist Czechia and Slovakia only
curl -X PATCH "https://dpm.fusiora.com/api/ip/85.239.155.11/country-blocklist" \
  -H "x-api-key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"countryBlockMode": 2, "countryBlockList": ["CZ", "SK"]}'

# Disable
curl -X PATCH "https://dpm.fusiora.com/api/ip/85.239.155.11/country-blocklist" \
  -H "x-api-key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"countryBlockMode": 0, "countryBlockList": []}'

Antwort (200 OK)

{ "success": true, "message": "Country blocklist updated", "data": {} }

Gängige Ländercodes

Häufig verwendete ISO 3166-1 alpha-2 Codes:

  • CZ — Tschechien
  • RU — Russland
  • SK — Slowakei
  • CN — China
  • DE — Deutschland
  • UA — Ukraine
  • US — Vereinigte Staaten
  • IN — Indien
  • GB — Vereinigtes Königreich
  • BR — Brasilien
  • FR — Frankreich
  • JP — Japan
  • PL — Polen
  • KR — Südkorea
  • NL — Niederlande
  • AU — Australien

Fehler: 400 ungültiger Modus / Liste kein Array / >20 Einträge / ungültiger Code · 401 ungültiger Schlüssel · 403 IP gehört Ihnen nicht · 500 Upstream fehlgeschlagen.

Kombinieren Sie diese Endpoints, um den Schutz pro IP abzustimmen — setzen Sie eine sinnvolle Standardaktion, erzwingen Sie symmetrische Prüfung und verschärfen Sie den Zugriff mit ASN- und Länderlisten, wie es Ihr Traffic erfordert.

Filterprofile

Ein Filter-Preset ist ein benannter Regelsatz, der von Fusiora vorbereitet wurde (abgestimmt auf FiveM, Web-Traffic, DNS usw.). Um eines zu nutzen, bindest du es als Filterprofil an eine IP, gebunden an ein bestimmtes Protokoll und einen Portbereich.

Ein Profil ist die Kombination aus:

  • Einem Preset (dem Regelsatz).
  • Einem Protokoll (UDP, TCP, ICMP).
  • Einem Ziel-Portbereich (minDstPortmaxDstPort, beide inklusive).

Du kannst viele Profile an eine einzelne IP binden — eines pro Dienst.

Verfügbare Presets auflisten

GET /api/filters

Keine Pfad- oder Query-Parameter.

Beispiel

curl -X GET "https://dpm.fusiora.com/api/filters" \
  -H "x-api-key: YOUR_API_KEY"

Antwort (200 OK)

[
  { "id": 42, "name": "GameUDP", "protocol": "UDP" },
  { "id": 43, "name": "WebTCP",  "protocol": "TCP" },
  { "id": 44, "name": "DNS",     "protocol": "UDP" }
]

Jeder Eintrag liefert genau das, was du zum Binden eines Profils brauchst:

  • id — verwende dies als presetId beim Binden.
  • name — Anzeigename, nützlich für Logs und Dashboards.
  • protocol — Protokoll, für das dieses Preset gebaut ist. Muss mit dem gesendeten protocol übereinstimmen.

Fehler: 401 ungültiger Schlüssel · 500 Upstream-Fehler.

An eine IP gebundene Profile auflisten

GET /api/ip/{ip}/profiles

Beispiel

curl -X GET "https://dpm.fusiora.com/api/ip/85.239.155.11/profiles" \
  -H "x-api-key: YOUR_API_KEY"

Antwort (200 OK)

[
  {
    "ID": 5511,
    "PresetID": 42,
    "PresetName": "GameUDP",
    "Protocol": "UDP",
    "MinDstPort": 30120,
    "MaxDstPort": 30130,
    "Notes": "FiveM"
  }
]

Fehler: 401 ungültiger Schlüssel · 403 IP gehört dir nicht · 500 Upstream-Fehler.

Ein Profil binden

POST /api/ip/{ip}/profiles

Body

{
  "presetId": 42,
  "protocol": "UDP",
  "minDstPort": 30120,
  "maxDstPort": 30130,
  "notes": "FiveM server"
}
  • presetId (erforderlich) — ID aus GET /api/filters.
  • protocol (erforderlich) — Protokollname, typischerweise UDP, TCP oder ICMP. Muss mit dem Protokoll des Presets übereinstimmen.
  • minDstPort (erforderlich) — untere Grenze der Zielports, inklusive (065535).
  • maxDstPort (erforderlich) — obere Grenze, inklusive (065535). Muss >= minDstPort sein.
  • notes (optional) — freie Notiz (String, kann leer sein).

Beispiel — FiveM-Gameserver

curl -X POST "https://dpm.fusiora.com/api/ip/85.239.155.11/profiles" \
  -H "x-api-key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{
    "presetId": 42,
    "protocol": "UDP",
    "minDstPort": 30120,
    "maxDstPort": 30130,
    "notes": "FiveM"
  }'

Antwort (200 OK)

{
  "ID": 5512,
  "PresetID": 42,
  "Protocol": "UDP",
  "MinDstPort": 30120,
  "MaxDstPort": 30130,
  "Notes": "FiveM server"
}

Speichere die ID — du brauchst sie, um das Profil später zu löschen.

Fehler: 401 ungültiger Schlüssel · 403 IP gehört dir nicht · 500 Upstream abgelehnt — ungültiges Preset, überlappendes Profil, nicht passendes Protokoll. Die Fehlermeldung enthält den Upstream-Grund.

Ein Profil löschen

DELETE /api/ip/{ip}/profiles/{profileId}

Das Profil muss zur IP in der URL gehören — Profile, die an eine andere IP gebunden sind, können über diesen Pfad nicht gelöscht werden.

Beispiel

curl -X DELETE "https://dpm.fusiora.com/api/ip/85.239.155.11/profiles/5512" \
  -H "x-api-key: YOUR_API_KEY"

Antwort (200 OK)

{
  "success": true,
  "message": "Profile 5512 deleted from IP 85.239.155.11",
  "data": {}
}

Fehler: 401 ungültiger Schlüssel · 403 IP gehört dir nicht · 404 Profil gehört nicht zu dieser IP · 500 Upstream-Fehler.

Filterprofile sind die Art, wie du Fusioras Schutzregeln genau dort anwendest, wo du sie brauchst — Dienst für Dienst, über jede deiner IPs hinweg.

IP-Listen

IP-Listen sind wiederverwendbare, benannte Sammlungen von CIDR-Adressen, die du aus DDoS-Schutzprofilen referenzieren kannst. Anstatt denselben Satz an IPs über viele Filter zu duplizieren, pflegst du eine Liste und aktualisierst sie an einer Stelle.

Warum sie nützlich sind

  • DRY. Eine Änderung aktualisiert jeden Filter, der die Liste referenziert.
  • Kombinierbar. Listen können andere Listen als Einträge enthalten — baue eine Hierarchie auf (z. B. partnersacme-corp + globex).
  • Ablauf pro Eintrag. Adresseinträge können sich nach N Sekunden selbst entfernen — perfekt für zeitlich begrenzte Sperren.

Aktionstypen

Jeder Eintrag hat eine ipListAction. Sie entscheidet, was die Schutzebene tut, wenn Traffic übereinstimmt.

  • WHITELIST — Traffic wird immer durchgelassen, selbst wenn andere Regeln ihn blockieren würden. Für vertrauenswürdige Partner oder Monitoring-Dienste. Standard, wenn du keinen festlegst.
  • BLACKLIST — Traffic wird immer verworfen. Für bekannte Angreifer oder feingranulare Sperren, bei denen Länder-/ASN-Filterung zu grob ist.
  • TRUST — Traffic überspringt die gesamte DDoS-Filterung vollständig. Nur für interne Infrastruktur oder Netzwerke verwenden, über die du volle Kontrolle hast.
Vorsicht mit TRUST. Es ist ein Bypass, nicht nur eine Erlaubnisregel. Sparsam verwenden.

Eigentum

  • Jede Liste gehört dem Benutzer, der sie erstellt hat.
  • Du kannst nur Listen sehen, ändern oder löschen, die du erstellt hast.
  • Listen anderer Benutzer werden als 404 Not Found gemeldet — nicht als 403 — sodass Listen-IDs nicht aufgezählt werden können.
  • Verweise auf verschachtelte Listen müssen auf eine Liste zeigen, die ebenfalls dir gehört.

Verschachtelung

Eine Liste kann eine andere Liste als Eintrag enthalten:

{ "listId": 729, "ipListAction": "BLACKLIST" }

Zwei wichtige Regeln:

  1. Keine Selbstreferenz. Das Hinzufügen von Liste 730 als Eintrag von Liste 730 liefert 400.
  2. Keine benutzerübergreifenden Verweise. Die verschachtelte Liste muss dir gehören.

Wenn du eine Liste löschst, die von einer anderen deiner Listen referenziert wurde, wird der Verweis inaktiv — die übergeordnete Liste gibt keinen Fehler aus, sie stimmt nur nicht mehr mit dem überein, was die untergeordnete früher beitrug.

Grenzen und Kontingente

  • Max. Einträge pro Liste: 11,000,000, konfigurierbar über maxEntries. Standard ist 1000.
  • Format des Listennamens: nur 1-64 alphanumerische Zeichen — keine Leerzeichen, Bindestriche oder Unterstriche.
  • Listenbeschreibung: bis zu 500 Zeichen.

Eine Liste erstellen

POST /api/iplists

Body

{
  "name": "officevpn",
  "description": "Allowed IPs for office VPN",
  "maxEntries": 1000
}
  • name (erforderlich) — 1-64 alphanumerische Zeichen (a-z, A-Z, 0-9). Keine Leerzeichen, Bindestriche oder Unterstriche.
  • description (optional) — Freitext bis zu 500 Zeichen.
  • maxEntries (optional) — 11,000,000. Standard ist 1000.

Beispiele

# Minimal
curl -X POST "https://dpm.fusiora.com/api/iplists" \
  -H "x-api-key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"name": "officevpn"}'

# Full
curl -X POST "https://dpm.fusiora.com/api/iplists" \
  -H "x-api-key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"name": "blockedasns", "description": "Known bad networks", "maxEntries": 5000}'

Antwort (201 Created)

{
  "ID": 730,
  "Name": "officevpn",
  "Description": "Allowed IPs for office VPN",
  "MaxEntries": 1000,
  "EntryCount": 0,
  "CreatedAt": "2026-05-13T10:00:00Z"
}

Speichere die ID — du benötigst sie für jede andere Operation an dieser Liste.

Deine Listen auflisten

GET /api/iplists

Query-Parameter

  • includeItems (optional) — "true", um die Einträge inline einzuschließen. Weglassen oder "false" für nur Metadaten.

Beispiele

# Metadata only
curl -X GET "https://dpm.fusiora.com/api/iplists" \
  -H "x-api-key: YOUR_API_KEY"

# With entries
curl -X GET "https://dpm.fusiora.com/api/iplists?includeItems=true" \
  -H "x-api-key: YOUR_API_KEY"

Antwort (200 OK)

[
  {
    "ID": 730,
    "Name": "officevpn",
    "Description": "Allowed IPs for office VPN",
    "MaxEntries": 1000,
    "EntryCount": 3,
    "CreatedAt": "2026-05-13T10:00:00Z",
    "UpdatedAt": "2026-05-13T10:05:00Z"
  }
]

Listen, die anderen Benutzern gehören, werden niemals zurückgegeben.

Eine Liste abrufen

GET /api/iplists/{id}

Gibt die vollständigen Details und Einträge einer einzelnen Liste zurück, die dir gehört.

curl -X GET "https://dpm.fusiora.com/api/iplists/730" \
  -H "x-api-key: YOUR_API_KEY"

Gibt 404 zurück, wenn die Liste nicht existiert oder wenn sie nicht dir gehört.

Eine Liste aktualisieren

PUT /api/iplists/{id}

Aktualisiert name, description oder maxEntries der Liste. Um die Einträge selbst zu ändern, nutze die untenstehenden Einträge-Endpunkte.

Body

{
  "name": "officevpn",
  "description": "Updated description",
  "maxEntries": 2000
}

Beispiele

# Rename
curl -X PUT "https://dpm.fusiora.com/api/iplists/730" \
  -H "x-api-key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"name": "officevpnv2"}'

# Increase capacity
curl -X PUT "https://dpm.fusiora.com/api/iplists/730" \
  -H "x-api-key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"name": "officevpn", "maxEntries": 5000}'

Antwort: 204 No Content. Der Body ist bei Erfolg leer.

Eine Liste löschen

DELETE /api/iplists/{id}

Löscht die Liste und alle ihre Einträge dauerhaft. Jeder Profil- oder Verweis auf eine verschachtelte Liste wird inaktiv, prüfe daher zuerst die Verwendung.

curl -X DELETE "https://dpm.fusiora.com/api/iplists/730" \
  -H "x-api-key: YOUR_API_KEY"

Antwort: 204 No Content.

Einträge auflisten

GET /api/iplists/{id}/entries
curl -X GET "https://dpm.fusiora.com/api/iplists/730/entries" \
  -H "x-api-key: YOUR_API_KEY"

Antwort (200 OK)

[
  {
    "ID": 4501,
    "address": "203.0.113.5/32",
    "ipListAction": "WHITELIST",
    "expireAfterSec": 0,
    "ipListID": 730
  },
  {
    "ID": 4502,
    "address": "198.51.100.0/24",
    "ipListAction": "BLACKLIST",
    "ipListID": 730
  }
]

Einen Eintrag hinzufügen

POST /api/iplists/{id}/entries

Ein Eintrag ist entweder eine Adresse (CIDR) oder eine verschachtelte Liste (listId). Gib genau eines dieser Felder pro Eintrag an — niemals beide, niemals keines.

Body — IP/CIDR-Eintrag

{
  "address": "203.0.113.5/32",
  "ipListAction": "WHITELIST",
  "expireAfterSec": 3600
}

Body — Verweis auf verschachtelte Liste

{
  "listId": 729,
  "ipListAction": "BLACKLIST"
}
  • address (eines von address/listId) — Ein gültiges CIDR. Einzelne IPs müssen /32 (IPv4) oder /128 (IPv6) sein. Führende Nullen werden abgelehnt (01.2.3.4/32 ist ungültig).
  • listId (eines von address/listId) — ID einer anderen IP-Liste, die dir gehört. Darf nicht der übergeordneten Liste entsprechen. Darf keine Liste referenzieren, die dir nicht gehört.
  • ipListAction (optional) — WHITELIST, BLACKLIST oder TRUST. Standard ist WHITELIST.
  • expireAfterSec (optional, nur Adresse) — Entfernt den Eintrag automatisch nach N Sekunden. Nicht-negative Ganzzahl. Wird bei verschachtelten Listeneinträgen ignoriert.

Beispiele

# Allow a single IP forever
curl -X POST "https://dpm.fusiora.com/api/iplists/730/entries" \
  -H "x-api-key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"address": "203.0.113.5/32", "ipListAction": "WHITELIST"}'

# Block a /24 subnet
curl -X POST "https://dpm.fusiora.com/api/iplists/730/entries" \
  -H "x-api-key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"address": "198.51.100.0/24", "ipListAction": "BLACKLIST"}'

# Temporary block — auto-expires in 1 hour
curl -X POST "https://dpm.fusiora.com/api/iplists/730/entries" \
  -H "x-api-key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"address": "192.0.2.10/32", "ipListAction": "BLACKLIST", "expireAfterSec": 3600}'

# Include another of your lists (nested)
curl -X POST "https://dpm.fusiora.com/api/iplists/730/entries" \
  -H "x-api-key: YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"listId": 729, "ipListAction": "BLACKLIST"}'

Antwort (201 Created)

{
  "ID": 4503,
  "address": "203.0.113.5/32",
  "ipListAction": "WHITELIST",
  "expireAfterSec": 3600,
  "ipListID": 730
}

Einen Eintrag löschen

DELETE /api/iplists/{id}/entries/{entryId}

Der Eintrag muss zur in der URL genannten Liste gehören — selbst wenn du eine Eintrags-ID aus einer anderen Liste kennst (deiner eigenen oder der einer anderen Person), kann er nicht über das falsche übergeordnete Element gelöscht werden.

curl -X DELETE "https://dpm.fusiora.com/api/iplists/730/entries/4503" \
  -H "x-api-key: YOUR_API_KEY"

Antwort: 204 No Content.

Häufige Fehler

  • 400 — Ungültige Listen-ID, Namensformat, Beschreibungslänge oder maxEntries-Bereich.
  • 400 — Sowohl address als auch listId gesendet — oder keines. Sende genau eines.
  • 400address ist kein gültiges CIDR — prüfe führende Nullen.
  • 400ipListAction ist nicht WHITELIST / BLACKLIST / TRUST.
  • 400expireAfterSec ist negativ oder keine Ganzzahl.
  • 400listId entspricht der ID der übergeordneten Liste — Selbstreferenz.
  • 400 — Die referenzierte verschachtelte Liste existiert nicht oder gehört nicht dir.
  • 401 — Fehlender oder ungültiger API-Schlüssel.
  • 404 — Liste existiert nicht oder gehört nicht dir — dieselbe Antwort mit Absicht, siehe Erste Schritte.

Mit IP-Listen zentralisierst du die Verwaltung vertrauenswürdiger und blockierter Adressen an einem einzigen wiederverwendbaren Ort und hältst deine Schutzprofile sauber und konsistent.

Angriffsverlauf

Lies den Verlauf der Angriffe auf deine geschützten IPs und rufe Zeitreihen-Statistiken für jeden bestimmten Angriff ab.

Die Ergebnisse werden automatisch eingegrenzt auf die deinem Konto zugewiesenen IPs — du kannst diese Endpunkte frei aufrufen, ohne dir Sorgen über das Durchsickern von Daten anderer Mandanten zu machen.

Angriffsverlauf abrufen

Gibt die Liste der Angriffe zurück, die deine geschützten IPs getroffen haben.

GET /api/attacks

Query-Parameter

  • page (nein) — Seitennummer für die Paginierung.
  • query (nein) — Freitextfilter, der an Avoro weitergeleitet wird (z. B. Angriffstyp oder IP).

Beispiele

# Latest attacks (page 1)
curl -X GET "https://dpm.fusiora.com/api/attacks" \
  -H "x-api-key: YOUR_API_KEY"

# Paginated
curl -X GET "https://dpm.fusiora.com/api/attacks?page=2" \
  -H "x-api-key: YOUR_API_KEY"

# Filtered (e.g. only UDP floods)
curl -X GET "https://dpm.fusiora.com/api/attacks?query=UDP" \
  -H "x-api-key: YOUR_API_KEY"

Antwort (200 OK)

[
  {
    "ID": 88123,
    "DstAddressString": "85.239.155.11",
    "Type": "UDP_FLOOD",
    "Bps": 12500000000,
    "Pps": 8500000,
    "StartedAt": "2026-05-13T09:14:22Z",
    "EndedAt": "2026-05-13T09:18:55Z"
  }
]

Jedes Element ist ein separates Angriffsereignis:

  • ID — Damit rufst du die Statistiken ab (nächster Abschnitt).
  • DstAddressString — Die angegriffene IP. Immer eine von deinen.
  • Type — Angriffsklassifizierung (z. B. UDP_FLOOD, SYN_FLOOD, …).
  • Bps — Spitzenbandbreite in Bit pro Sekunde.
  • Pps — Spitzenpaketrate in Paketen pro Sekunde.
  • StartedAt — ISO-8601-Zeitstempel, wann der Angriff begann.
  • EndedAt — ISO-8601-Zeitstempel, wann der Angriff endete.

Ein leeres Array ist eine völlig gültige Antwort — es bedeutet einfach, dass keine Angriffe übereinstimmten.

Fehler: 401 ungültiger Schlüssel · 500 Upstream-Fehler (der Body enthält eine debugId — gib sie in Support-Tickets an).

Angriffsstatistiken abrufen

Gibt Zeitreihen-Statistiken zurück — Bandbreiten- und Paketraten-Samples — für ein bestimmtes Angriffsereignis. Nutze sie, um darzustellen, wie ein Angriff hochfuhr und wieder abebbte.

GET /api/attacks/{id}/stats
  • id (ja) — Numerische Angriffs-ID aus GET /api/attacks.

Beispiel

curl -X GET "https://dpm.fusiora.com/api/attacks/88123/stats" \
  -H "x-api-key: YOUR_API_KEY"

Antwort (200 OK)

{
  "AttackID": 88123,
  "Samples": [
    { "T": "2026-05-13T09:14:22Z", "Bps": 8000000000,  "Pps": 6500000 },
    { "T": "2026-05-13T09:14:32Z", "Bps": 12500000000, "Pps": 8500000 }
  ]
}

Jedes Sample ist eine einzelne Beobachtung:

  • T — ISO-8601-Zeitstempel des Samples.
  • Bps — Bandbreite in diesem Moment, in Bit pro Sekunde.
  • Pps — Paketrate in diesem Moment, in Paketen pro Sekunde.

Der Abstand zwischen den Samples hängt von der Angriffsdauer und dem Upstream-Sampling ab — gehe beim Graphen nicht von festen Intervallen aus.

Fehler: 401 ungültiger Schlüssel · 500 Upstream-Fehler.

Mit diesen beiden Endpunkten kannst du sowohl die Übersicht der jüngsten Angriffe als auch das Minute-für-Minute-Detail eines jeden einzelnen rekonstruieren.

API-Referenz

Nachschlagematerial, das den Rest der API-Dokumentation ergänzt: die HTTP-Statuscodes, die die API zurückgibt, und die CIDR-Notation, die in jedem IP-Eintrag verwendet wird.

HTTP-Statuscodes

Die Fusiora-API verwendet standardmäßige HTTP-Statuscodes. Nachfolgend: jeder Code, den die API zurückgibt, wann er auftritt und was zu tun ist.

Erfolg

  • 200 OK — Anfrage erfolgreich. Der Antworttext enthält das Ergebnis.
  • 201 Created — Eine neue Ressource wurde erstellt. Wird von POST /api/iplists und POST /api/iplists/{id}/entries zurückgegeben.
  • 204 No Content — Aktualisierung oder Löschung erfolgreich. Der Antworttext ist leer — versuche nicht, ihn als JSON zu parsen.

Client-Fehler

  • 400 Bad Request — Der Anfragetext oder die Abfrage ist fehlerhaft. Das Feld error beschreibt, was falsch ist. Korrigiere die Nutzlast. Prüfe Enums, Array-Größen und Wertformate (CIDR, ISO-Ländercodes).
  • 401 Unauthorized — Der Header x-api-key fehlt oder ist unbekannt. Füge den Header hinzu. Prüfe den Schlüssel auf nachgestellte Leerzeichen oder die falsche Umgebung.
  • 403 Forbidden — Der Schlüssel ist gültig, aber die IP in der URL ist nicht deinem Konto zugewiesen. Verwende nur IPs, die deinem Konto zugewiesen sind.
  • 404 Not Found — Die Ressource existiert nicht — oder gehört dir nicht. Eigentumsfehler bei IP-Listen werden bewusst als 404 gemeldet, um die ID-Aufzählung zu verhindern. Überprüfe, ob die Ressource existiert und ob du sie erstellt hast.

Serverfehler

  • 500 Internal Server Error — Die vorgelagerte Avoro-API ist fehlgeschlagen. Das Feld error enthält Details. Fehler im Angriffsverlauf enthalten eine debugId. Erneut versuchen mit exponentiellem Backoff. Wenn es weiterhin auftritt, kontaktiere den Support mit der debugId.
  • 502 Bad Gateway — Das vorgelagerte Avoro hat eine unerwartete Antwort zurückgegeben. Erneut versuchen. Wenn es weiterhin auftritt, kontaktiere den Support.

Schneller Entscheidungsbaum

Wenn du eine nicht erfolgreiche Antwort erhältst:

  1. 400? Lies das Feld error — es nennt dir den genauen Validierungsfehler. Wiederhole nicht, ohne die Nutzlast zu korrigieren.
  2. 401? Nicht wiederholen — korrigiere deinen Header.
  3. 403? Die IP gehört dir nicht. Prüfe die URL.
  4. 404? Die Ressource fehlt oder gehört dir nicht. Überprüfe die ID erneut.
  5. 500 / 502? Erneut versuchen mit exponentiellem Backoff. Kontaktiere den Support, wenn es weiterhin auftritt.

Form der Fehlerantwort

Alle Fehler haben dieselbe JSON-Form:

{ "error": "Description of what went wrong" }

Einige 500-Antworten enthalten zusätzliche Felder:

{
  "error": "Upstream API failed",
  "debugId": "abc123-xyz"
}

Gib die debugId an, wenn du den Support kontaktierst — so können wir deinen konkreten Fehler am schnellsten nachschlagen.

CIDR-Notation

Jeder IP-Eintrag in der Fusiora-API wird in CIDR-Notation (Classless Inter-Domain Routing) angegeben: address/prefix. Das Präfix ist die Anzahl der führenden Bits, die die Adresse teilt.

Eine einzelne IP ist /32 für IPv4 oder /128 für IPv6. Es gibt kein "nacktes IP"-Format; gib immer das Präfix an.

IPv4-Kurzreferenz

  • 1.2.3.4/32 — nur 1.2.3.4 — 1 Adresse.
  • 192.168.1.0/24192.168.1.0192.168.1.255 — 256 Adressen.
  • 10.0.0.0/1610.0.0.010.0.255.255 — 65 536 Adressen.
  • 10.0.0.0/810.0.0.010.255.255.255 — ~16,7 Mio. Adressen.
  • 0.0.0.0/0 — Gesamtes IPv4 — äußerste Vorsicht.

IPv6-Kurzreferenz

  • 2001:db8::1/128 — Eine einzelne IPv6-Adresse.
  • 2001:db8::/32 — Eine typische ISP-Zuteilung — Millionen von /48s.
  • 2001:db8::/48 — Ein einzelner Standort / Kunde.

Von der API durchgesetzte Regeln

  • Gib immer das Präfix an. Selbst einzelne IPs brauchen /32 oder /128. 1.2.3.4 allein wird abgelehnt.
  • Keine führenden Nullen in Oktetten. 01.2.3.4/32 ist ungültig. Verwende 1.2.3.4/32.
  • IPv6 muss gültige RFC-4291-Form haben. Die kompakte ::-Kurzform ist in Ordnung; Hex-Ziffern in Groß- oder Kleinschreibung werden beide akzeptiert.

Häufige Muster

  • Statische IP deines Büros erlauben203.0.113.5/32
  • Ein ganzes missbräuchliches /24 blockieren198.51.100.0/24
  • Deinen gesamten AWS-VPC-Bereich erlauben10.0.0.0/16
  • Einzelner IPv6-Host2001:db8::1/128

Wo CIDR in der API erscheint

CIDR-Strings erscheinen im Feld address von IP-Listeneinträgen — siehe IP-Listen.

Länder- und ASN-Filterung verwendet stattdessen Ländercodes und ASN-Nummern — sie akzeptieren kein CIDR. Siehe dazu Geschützte IPs.

Merkhilfe

Je kleiner die Präfixzahl, desto größer der Bereich:

  • /32 = 1 Adresse (kleinstmöglich).
  • /24 = 256 Adressen (ein typisches "Class C"-Subnetz).
  • /16 = 65 536 Adressen.
  • /8 = ~16,7 Millionen Adressen.
  • /0 = das gesamte Internet.

Im Zweifelsfall verwende einen Online-CIDR-Rechner, um deinen Bereich zu überprüfen.

War dieser Artikel hilfreich?

Sei der Erste, der bewertet

Wir verwenden Cookies

Wir verwenden Cookies, um Ihre Erfahrung zu verbessern, den Datenverkehr zu analysieren und Inhalte zu personalisieren.