Banning Foreign Users in Hypergrid/de

From OpenSimulator

Jump to: navigation, search

Bitte beachten Sie, dass keiner der Mechanismen auf dieser Seite narrensicher ist.

Das Sperren einer bestimmten IP-Adresse auf der Firewall kann effektiver sein,

obwohl dann die Gefahr besteht, dass eine große Anzahl von Adressen blockiert wird, die sich hinter einem NAT verstecken.

Contents

Verbot Hypergrid Benutzer

Es ist jetzt möglicherweise möglich, bekannte Hypergrid Benutzernamen (in der Form Joe Bloggs@somegrid.net) direkt in bestimmten Viewer Dialogen von Drittanbietern zu sperren. Dies muss festgestellt werden.

wenn die aktuellen Viewer nicht in der Lage sind, mit fremden Benutzern in den Dialogen umzugehen,

die sie dem Benutzer präsentieren, ist es möglich, bestimmte ausländische Benutzer zu sperren.

Im Moment müssen Sie dies im Backend tun, dh die Datenbank direkt bearbeiten und das Protokoll überprüfen.

Nicht einfach für schwache Nerven, aber jeder Systemadministrator sollte in der Lage sein, dies mit geschlossenen Augen zu tun.

Im Folgenden finden Sie Anweisungen zum Hinzufügen eines ausländischen Benutzers zur Sperrliste des Anwesens.

Über die Datenbank

Beachten Sie, dass dies davon abhängt, dass der fremde Benutzer seine UUID nicht ändert.

Dies ist für einen bestehenden Benutzer schwierig, aber natürlich ist es nicht schwierig,

ein völlig neues Konto zu erstellen.

Das erste, was Sie tun müssen, ist, die UUID und die IP-Adresse des Benutzers herauszufinden,

den Sie sperren möchten. Dazu müssen Sie sich OpenSim.log ansehen. Suchen Sie nach Protokollmeldungen wie diesen:

2009-01-23 03:45:11,995 INFO  - OpenSim.Region.Communications.Hypergrid.HGGridServicesGridMode [HGrid]: Incoming HGrid Agent
Annoying.Person http://problematic.domain.org:9002
2009-01-23 03:45:11,995 DEBUG - OpenSim.Region.Environment.Scenes.Scene [CONNECTION BEGIN]: Region Gateway 3000 told of incoming client
Annoying.Person http://problematic.domain.org:9002 c3c9ecbf-bfb3-43eb-8dce-140afad7995f (circuit code 1896255323)

In diesem Fall benötigen Sie folgende Informationen: UUID = c3c9ecbf-bfb3-43eb-8dce-140afad7995f und IPAddress = problematic.domain.org

Als Nächstes fügen wir diesen fremden Benutzer der Sperrliste hinzu. Beachten Sie,

dass die Grundstücksinformationen und Sperrlisten auf dem Regionsserver gespeichert werden,

nicht in den Robust-Diensten.

Wenn Sie lokalen Speicher für Ihre Regionen verwenden, werden diese Informationen in bin/OpenSim.db gespeichert.

Öffnen Sie diese DB also mit einem beliebigen Tool, mit dem Sie auf Ihre DBs zugreifen. Die Anweisungen hier gehen von einer lokalen SQLite-Datenbank aus;

Wenn Sie MySql oder andere DB-Technologien für die Speicherung der Regionen verwenden, sind die Anweisungen fast identisch, müssen jedoch möglicherweise angepasst werden.

SqlLite wird normalerweise mit einer gewöhnlichen Linux-Installation geliefert. Geben Sie unter Linux einfach Folgendes ein:

 $ sqlite3 OpenSim.db

Unter Windows müssen Sie es von hier. Führen Sie es nach der Installation auf Ihrer OpenSim.db aus, z. B. wie folgt (auf einer Befehlsshell):

 $ C:/Opt/SQLite3/sqlite3.exe OpenSim.db

Sobald Sie mit der Datenbank verbunden sind, können Sie so viel erkunden, wie Sie möchten.

Was folgt, sind die konkreten Interaktionen, die Sie benötigen, um diesen fremden Benutzer zu einer Grundstücksverbotsliste hinzuzufügen.

Ändern Sie die Daten für Ihre Situation.

[opensim@ucigrid04 bin]$ sqlite3 OpenSim.db
  SQLite version 3.3.6
  Enter ".help" for instructions
sqlite> .tables
  estate_groups    estate_users     migrations       regionban
  estate_managers  estateban        primitems        regionsettings
  estate_map       land             prims            terrain
  estate_settings  landaccesslist   primshapes
sqlite> .schema estateban
  CREATE TABLE estateban (
     EstateID int(10) NOT NULL,
     bannedUUID varchar(36) NOT NULL,
     bannedIp varchar(16) NOT NULL,
     bannedIpHostMask varchar(16) NOT NULL,
     bannedNameMask varchar(64) default NULL
  );
  CREATE INDEX estate_ban_estate_id on estateban(EstateID);
sqlite> select EstateID, EstateName from estate_settings;
  100|My Estate
  101|My Estate
  102|My Estate
  103|My Estate
sqlite> insert into estateban values (100, 'c3c9ecbf-bfb3-43eb-8dce-140afad7995f', 'problematic.domain.org', ' ', ' ');
sqlite> insert into estateban values (101, 'c3c9ecbf-bfb3-43eb-8dce-140afad7995f', 'problematic.domain.org', ' ', ' ');
sqlite> insert into estateban values (102, 'c3c9ecbf-bfb3-43eb-8dce-140afad7995f', 'problematic.domain.org', ' ', ' ');
sqlite> insert into estateban values (103, 'c3c9ecbf-bfb3-43eb-8dce-140afad7995f', 'problematic.domain.org', ' ', ' ');
sqlite> select * from estateban;
  100|c3c9ecbf-bfb3-43eb-8dce-140afad7995f|problematic.domain.org||
  101|c3c9ecbf-bfb3-43eb-8dce-140afad7995f|problematic.domain.org||
  102|c3c9ecbf-bfb3-43eb-8dce-140afad7995f|problematic.domain.org||
  103|c3c9ecbf-bfb3-43eb-8dce-140afad7995f|problematic.domain.org||
sqlite> .quit

Sobald diese Daten eingegeben sind, müssen Sie OpenSim neu starten, damit es geladen wird.

Über die Robust Konfiguration

Es werden hierfür in der Robust.HG.ini oder der Robust.ini folgende konfigurationen eingestellt.

Allow banning via hashed MAC und/oder ID0 muss sowohl in [GatekeeperService] als auch in [LoginService] gesetzt sein

Beispiel:

;; Allow banning via hashed MAC and/or ID0 must be set in both [GatekeeperService] and [LoginService] LoginService
DeniedMacs = "5574234b1336a4523b6acb803737b608"
DeniedID0s = "d1fdb346d01a3bda2dcb82322bd88456"
;DeniedMacs = "YOURLONGMACSTSING ANOTHERMAC"
;DeniedID0s = "YOURLONGID0STRING ANOTHERID0"

Auf Netzwerkebene

Hinweis: Dies ist ein Verbot nach MAC-Adresse auf Firewall-Ebene. Fortgeschrittene Benutzer können ihre MAC-Adresse ändern.

Die folgende Anleitung ist ein Auszug aus dem full article at Wizardry and Steamworks. Das Prinzip ist,

dass alle Viewer eine MAC-Adresse senden sollen, die mit einem Hex-Digest-Algorithmus gehasht wird. Da iptables unter Linux nur MAC-Adressen versteht,

können wir ipt_string verwenden, um die MAC-Adresse abzugleichen.

Wenn sich ein Benutzer beispielsweise mit einem Grid verbindet, unabhängig davon,

ob es sich um eine direkte Anmeldung oder einen Hypergrid-Teleport handelt,

wird eine Zeichenfolge wie die folgende angezeigt:

OpenSim.Services.HypergridService.GatekeeperService [GATEKEEPER SERVICE]: 
Login request for Jaine Mariolack @ http://virtualrealmsgrid.com:8002/ 
(0a009e79-7c56-11e2-b122-000c76240986) at VIBE using viewer 
Imprudence 1.3.2.0, channel Imprudence, 
IP 109.112.128.89, 
Mac d6812bb4d7625027d53c2e9715410caf, 
Id0 dd76693a887c545f4d65c2ff2da3a4d7 
Teleport Flags 0

Das Segment, das d6812bb4d7625027d53c2e9715410caf liest, ist die gehashte MAC-Adresse, die vom Betrachter gesendet wird.

Wir können das mit iptables blockieren:

iptables -A INPUT -m string --string 'd6812bb4d7625027d53c2e9715410caf' --algo bm -p tcp --dport 9000 -j DROP

Darüber hinaus können wir den Agenten sogar anhand seines Vor- und Nachnamens blockieren:

iptables -A INPUT -m string --string 'Jaine' --algo bm -m string --string 'Mariolack' --algo bm -p tcp --dport 9000 -j DROP

Das Ergebnis ist, dass der Betrachter beim Versuch, sich zu teleportieren oder sich anzumelden, eine Zeitüberschreitung erleidet.

Linux Bash Skript

Es muss gegebenenfalls iptables nachinstalliert werden.

apt install iptables

Aufruf Beispiel:

./macme.sh John Doe

macme.sh

#!/bin/bash

# Author Manfred Aabye 2023 - Getestet mit: Ubuntu 22.04 Minimal Server - MIT Lizenz.
# Aufruf Beispiel: ./macme.sh John Doe

FIRSTNAME=$1
LASTNAME=$2
DIELOGDATEI="/opt/robust/bin/Robust.log"

# Sperren auf der Netzwerkschicht
# Suchen wir nun den Angreifer, so können wir das Protokoll nach der MAC-Adresse durchsuchen:

echo "Suche nach: $FIRSTNAME"'.'"$LASTNAME" # Kontrollausgabe

ANGREIFERABFRAGE=$(cat $DIELOGDATEI | grep 'Login request' | grep "$FIRSTNAME"'.'"$LASTNAME" | awk -F ',' '{ print $5 }' | sort -u | sed 's/ //') # Den Nippel durch die Lasche ziehen
ANGREIFERERGEBNIS="${ANGREIFERABFRAGE:4}" # Nur die Mac Adresse.

# Abfrage ob Variable Leer ist
if [ -z "$ANGREIFERERGEBNIS" ]
then
    echo "Die Suche nach $FIRSTNAME"'.'"$LASTNAME ergab keine Treffer"
else
    echo "Mac Adresse des Angreifers entdeckt: $ANGREIFERERGEBNIS"

    # Jetzt, können wir ipt_stringmatch verwenden, 
    # um die MAC-Adresse zu erkennen und den Agenten zu verbieten:

    # Der --dport = 9000 oder 8002 oder welchen auch immer.
    #iptables -A INPUT -m string --string "$ANGREIFERERGEBNIS" --algo bm -p tcp --dport 8002 -j DROP

    # Nicht nur das, wir können den Benutzer auch sperren:

    #iptables -A INPUT -m string --string "$FIRSTNAME" --algo bm -m string --string "$LASTNAME" --algo bm -p tcp --dport 8002 -j DROP

    # Das Ergebnis ist, dass der Betrachter keine Verbindung herstellen kann und auf dem Anmeldebildschirm eine Zeitüberschreitung anzeigt.
fi

attacker.sh

#!/bin/bash

# Aufruf Beispiel: ./attacker.sh John Doe

# Author Manfred Aabye 2023 MIT Lizens

FIRSTNAME=$1; LASTNAME=$2;
DIELOGDATEI="/opt/robust/bin/Robust.log";

# Suchen wir nun den Angreifer.

echo "Suche nach: $FIRSTNAME"'.'"$LASTNAME" # Kontrollausgabe

VIEWER2=$(cat $DIELOGDATEI | grep 'Login request' | grep "$FIRSTNAME"'.'"$LASTNAME" | awk -F ',' '{ print $3 }' | sort -u | sed 's/ //')
VIEWERERGEBNIS2="${VIEWER2:8}" # Nur der Viewer.
if [ -z "$VIEWERERGEBNIS2" ];then echo "Die Viewer Suche nach $FIRSTNAME"'.'"$LASTNAME ergab keine Treffer"
else echo "Der benutzte Viewer: $VIEWERERGEBNIS2"; fi

GENUTZTEIP=$(cat $DIELOGDATEI | grep 'Login request' | grep "$FIRSTNAME"'.'"$LASTNAME" | awk -F ',' '{ print $4 }' | sort -u | sed 's/ //')
GENUTZTEIPERGEBNIS="${GENUTZTEIP:3}" # Nur die IP Adresse.
if [ -z "$GENUTZTEIPERGEBNIS" ];then echo "Die IP Suche nach $FIRSTNAME"'.'"$LASTNAME ergab keine Treffer"
else echo "Die IP des Angreifers: $GENUTZTEIPERGEBNIS"; fi

ANGREIFERABFRAGEMAC=$(cat $DIELOGDATEI | grep 'Login request' | grep "$FIRSTNAME"'.'"$LASTNAME" | awk -F ',' '{ print $5 }' | sort -u | sed 's/ //')
ANGREIFERERGEBNISMAC="${ANGREIFERABFRAGEMAC:4:32}" # Nur die Mac Adresse.
if [ -z "$ANGREIFERERGEBNISMAC" ];then echo "Die MAC Suche nach $FIRSTNAME"'.'"$LASTNAME ergab keine Treffer"
else echo "Die MAC des Angreifers: $ANGREIFERERGEBNISMAC"; fi

ANGREIFERABFRAGEID=$(cat $DIELOGDATEI | grep 'Login request' | grep "$FIRSTNAME"'.'"$LASTNAME" | awk -F ',' '{ print $6 }' | sort -u | sed 's/ //')
ANGREIFERERGEBNISID="${ANGREIFERABFRAGEID:4:32}" # Nur die id0 Adresse.
if [ -z "$ANGREIFERERGEBNISID" ];then echo "Die ID0 Suche nach $FIRSTNAME"'.'"$LASTNAME ergab keine Treffer"
else echo "Die ID0 des Angreifers: $ANGREIFERERGEBNISID"; fi

Die Bildschirmausgabe:

Suche nach: John.Doe
Der benutzte Viewer: Darkviewer 6.6.3.67470
Die IP des Angreifers: 3.245.54.69
Die MAC des Angreifers: c6dc8e262930d73002f65260f9df4f2c
Die ID0 des Angreifers: d7f69c50d4f44bcff51eb0656341fe30
Personal tools
General
About This Wiki