Schutz von SA:MP-Servern gegen Flood-Angriffe und gefälschte Pakete in Pawn

Ein technischer Leitfaden zur Absicherung von SA:MP-Servern vor Paket-Flooding, Dialog-Spam und unzulässigem Fahrzeug-Spawning mittels Pawn.RakNet und Nex-AC.

20.05.2026 Deutsch

Schutz von SA:MP-Servern gegen Flood-Angriffe und gefälschte Pakete in Pawn

Die Netzwerk-Engine von SA:MP basiert auf einer veralteten Version der RakNet-Bibliothek. Die größte Schwachstelle dieser Architektur liegt darin, dass der Server clientseitigen Datenpaketen blind vertraut. Cheat-Programme (schadhafte Lua-Skripte, кастомные RakBots, Damage-Changer-Tools oder Flooder) nutzen dieses Vertrauen schamlos aus, um den Server direkt über das Spielprotokoll anzugreifen. Sie simulieren massenhaftes Fahrzeug-Spawning, senden tausende gefälschte Pickup-Aufrufe pro Sekunde oder überfluten den Server mit Registrierungspaketen, was die Server-TPS gegen Null treibt und Verbindungsabbrüche bei echten Spielern verursacht.

Standardmäßige Pawn-Callbacks (wie OnPlayerPickUpPickup) werden erst *nachdem* der Server bereits wertvolle CPU-Zyklen für die Verarbeitung des Netzwerkpakets aufgewendet hat, ausgelöst. Der einzige Weg für eine effektive Verteidigung ist das frühzeitige Abfangen und Filtern böswilliger RPC-Pakete mittels des Plugins Pawn.RakNet oder eines umfassenden Anti-Cheats wie Nex-AC. In diesem Artikel zeigen wir, wie Sie einen solchen Schutz implementieren.

Das Netzwerk-Prinzip verstehen: RPCs vs. Pakete

Die Kommunikation zwischen dem Client und dem Server in SA:MP unterteilt sich in zwei Datentypen:

  • Pakete (Packets): Low-Level-Netzwerkdaten, die physische Informationen enthalten (Spielerkoordinaten, Rotationswinkel, Fahrzeuggeschwindigkeit). Diese werden kontinuierlich dutzende Male pro Sekunde übertragen.
  • RPC (Remote Procedure Call): Entfernte Prozeduraufrufe. Diese Pakete teilen dem Server eine spezifische Aktion des Spielers mit: Chatnachrichten, Tastendrücke, das Betreten eines Interieurs, das Einsteigen in ein Auto oder das Aufheben eines Pickups.

Anatomie eines Flood-Angriffs: Ein Cheater aktiviert ein Skript, welches den Server mit RPC_PickedUpPickup (ID: 131) und einer Frequenz von 5.000 Abfragen pro Sekunde flutet. Der Server versucht, jeden Aufruf zu verarbeiten, was eine Kette von Abfragen im Mod auslöst. Die CPU des Hostings wird zu 100 % ausgelastet, und der Server reagiert nicht mehr auf reguläre Spieleranfragen.


Teil 1: Low-Level-Paketfilterung via Pawn.RakNet

Das Plugin Pawn.RakNet ermöglicht das Abfangen von RPCs, bevor diese die eigentliche Spiel-Engine belasten können. Wir können das Paket verwerfen und den Angreifer umgehend kicken.

Schutz vor Pickup-Flooding und manipuliertem Fahrzeug-Spawning:

Fügen Sie diesen Code in Ihren Spielmodus ein, um die Sendefrequenz kritischer RPC-Kanäle pro Spieler-Slot zu überwachen:

#include <Pawn.RakNet>

#define RPC_PICKED_UP_PICKUP      131
#define RPC_VEHICLE_CREATE        22

static last_pickup_tick[MAX_PLAYERS];
static pickup_flood_count[MAX_PLAYERS];

public OnIncomingRPC(playerid, rpcid, BitStream:bs)
{
    if(rpcid == RPC_PICKED_UP_PICKUP)
    {
        new current_tick = GetTickCount();
        
        if(current_tick - last_pickup_tick[playerid] < 200)
        {
            pickup_flood_count[playerid]++;
            if(pickup_flood_count[playerid] > 5)
            {
                printf("[Schutz] Spieler ID %d wurde wegen Pickup-Flooding gekickt.", playerid);
                Kick(playerid);
                return 0;
            }
        }
        else
        {
            pickup_flood_count[playerid] = 0;
        }
        last_pickup_tick[playerid] = current_tick;
    }

    if(rpcid == RPC_VEHICLE_CREATE)
    {
        if(GetPlayerAdminLevel(playerid) == 0)
        {
            printf("[Schutz] Illegaler Fahrzeug-Spawn-Versuch von Client ID %d blockiert.", playerid);
            Kick(playerid);
            return 0;
        }
    }
    return 1;
}

Teil 2: Absicherung von Verbindungs- und Autorisierungs-Schleifen

Ein weiterer gängiger Angriffsvektor sind Botnets (wie RakDroid oder generische RakBots), bei denen sich 100–200 Bot-Accounts gleichzeitig mit dem Server verbinden. Diese Sitzungen durchlaufen die eigentliche Spawn-Phase nicht, sondern verbleiben in der Autorisierungsphase, während sie ununterbrochen gefälschte Login-Pakete oder Skin-Ausвоhl-Anfragen (Class Requests) senden, um die Netzwerkbandbreite zu blockieren.

Drosselung von Dialog-Antworten und Class-Requests:

Nutzen Sie die RPC-Abfangfunktionen, um die maximale Interaktionsrate für noch nicht autorisierte Spieler-Slots strikt zu limitieren:

#define RPC_DIALOG_RESPONSE       62
#define RPC_REQUEST_CLASS         129

public OnIncomingRPC(playerid, rpcid, BitStream:bs)
{
    if(PlayerInfo[playerid][pIsLoggedIn] == false)
    {
        if(rpcid == RPC_DIALOG_RESPONSE)
        {
            static last_dialog_tick[MAX_PLAYERS];
            if(GetTickCount() - last_dialog_tick[playerid] < 150)
            {
                Kick(playerid);
                return 0;
            }
            last_dialog_tick[playerid] = GetTickCount();
        }

        if(rpcid == RPC_REQUEST_CLASS)
        {
            static class_requests[MAX_PLAYERS];
            class_requests[playerid]++;
            if(class_requests[playerid] > 10)
            {
                Kick(playerid);
                return 0;
            }
        }
    }
    return 1;
}

Teil 3: Integrierte Nex-AC Bereitstellung (Anleitung)

Wenn Sie nicht jeden RPC manuell filtern möchten, empfiehlt sich die Installation des bewährten Anti-Cheats Nex-AC. Dieses Framework verfügt über einen integrierten Schutz gegen die meisten bekannten Server-Schwachstellen, einschließlich Paket-Flood-Angriffen (NOP-Skripte, CarShot, FlyHack, Connection-Floods).

  1. Laden Sie die Include-Datei nex-ac.inc sowie die passende Binärdatei nex-ac.so (für Linux-Hosting) herunter.
  2. Platzieren Sie das Plugin im Ordner plugins/ und die Include-Datei im Verzeichnis pawno/include/.
  3. Binden Sie das Include ganz oben in Ihrem Spielmodus ein, direkt nach dem Aufruf von a_samp:
    #include <a_samp>
    #include <nex-ac>
  4. Öffnen Sie die Konfigurationsdatei scriptfiles/nex-ac_settings.cfg, die nach dem ersten Start generiert wird, und passen Sie die Netzwerklamits an Ihre Hosting-Leistung an:
anti_flood_connect 5      # Maximale Verbindungsanzahl pro IP und Sekunde
max_ping 500              # Maximal zulässiger Ping (Schutz vor Lag-Floodern)
kick_on_flood 1           # Kicken von Spielern bei Erkennung von Paket-Flooding
minify_object_bullet 1    # Optimierte Paketverarbeitung für Schussdaten (RapidFire-Schutz)
Angriffs-Typ / Cheater Auswirkung auf den Server Abwehr-Werkzeug
Pickup Flood / Dialog Flood Überlastet die Hosting-CPU durch endlose Aufrufe der Mod-Logik. Pawn.RakNet (Abfangen von RPC 131 und RPC 62)
Car Crasher / Unoccupied Flood Teleportiert herrenlose Fahrzeuge massenhaft, was Physik-Lags verursacht. Nex-AC oder benutzerdefiniertes Abfangen von ID_VEHICLE_SYNC-Paketen
Brute-Force / Spawn-Bots Blockieren Server-Slots, überlasten die Datenbank mit gefälschten Login-Anfragen. Autorisierungs-Timeout (wird nach 2 Min. nicht eingeloggt — Kick(playerid))

Fazit: Der Schutz eines SA:MP-Servers muss proaktiv erfolgen. Blockieren Sie anomale Pakete auf Plugin-Ebene, bevor diese die rechenintensiven Skripte Ihres Spielmodus erreichen. Dies garantiert stabile 50.0 TPS, selbst während aggressiver Flood-Attacken.

Ähnliche Artikel

Unsichtbare Spieler Bug und Desynchronisation virtueller Welten beheben

Eine technische Analyse des Unsichtbare-Spieler-Glitches sowie der Desynchronisation virtueller Welten in SA:MP/CRMP-Servern inklusive eines sicheren Teleportations-Algorithmus.

Weiterlesen

Bekämpfung von Speicherlecks (Memory Leaks) in AMX-Skripten

Ein technischer Leitfaden zur Erkennung und Behebung von Speicherlecks in SA:MP/CRMP-Server-Skripten. Behandelt MySQL-Cache-Freigabe, Streamer-Entitäten und Heap-Bereinigungen.

Weiterlesen

Daten-Caching im RAM mit Pawn: Optimierung der PlayerInfo-Struktur

Ein technischer Leitfaden zur Erstellung einer performanten RAM-Caching-Architektur mittels PlayerInfo-Arrays in Pawn, um die Festplatten-E/A-Last zu minimieren.

Weiterlesen