it-swarm.com.de

Kann man Tor-Benutzer blockieren?

Wäre es möglich, Tor-Benutzer zu blockieren? ( https://www.torproject.org/ )

Aufgrund der Art der Website, die ich betreibe, sollte ich alles tun, um mehrere Konten zu stoppen und bestimmte Standorte zu blockieren. Tor ist schlimmer als Stellvertreter - ein totaler Alptraum ...

34
domino

Tor ist viel einfacher zu blockieren als andere offene Proxys, da die Liste der Exit-IP-Adressen bekannt ist und veröffentlicht wird. Lesen Sie die Antwort unter https://www.torproject.org/docs/faq-abuse.html.en#Bans . Wenn Sie weiterhin verhindern möchten, dass Benutzer auf Ihre Website zugreifen, können Sie https: // verwenden. www.torproject.org/projects/tordnsel.html.de oder das Exporttool für Massenexitlisten. 

Wenn Sie das Exporttool für Massenexitlisten verwenden, stellen Sie sicher, dass Sie häufig eine neue Liste erhalten und die alten Blöcke verwerfen, da sich die Liste der IP-Adressen ändert. 

39
Johan Nilsson

Blocking Tor ist falsch, da (ab) Benutzer und IP-Adressen nicht identisch sind. Durch das Blockieren von Tor blockieren Sie außerdem rechtmäßige Benutzer und harmlose beschränkte Tor-Exit-Knoten, die mit konservativen Exit-Richtlinien konfiguriert sind.

Wenn Sie sich beispielsweise Sorgen über Angriffe auf SSH (Port 22) machen, kann das Blockieren von Tor nur wenig zur Erhöhung der Sicherheit beitragen. Was Sie wirklich brauchen könnten, ist eine dynamisch synchronisierte Blacklist wie http://denyhosts.sourceforge.net/ , die Straftäter aufspüren, die ihre Zugehörigkeit zu Tor missachten. 

Denyhosts blockieren automatisch Tor-Exit-Knoten, über die Tor auf Port 22 zugreifen kann, ohne den anonymen Benutzer und Betreiber von Tor-Exit-Knoten, die niemals zulassen, dass Angreifer Ihre SSH-Dienste angreifen, unnötig den Zugriff zu verweigern.

18
Onlyjob

Das Tor-Projekt bietet hier tatsächlich eine eigene Liste:

https://check.torproject.org/exit-addresses

7
Chad Scira

In .NET ist es möglich und einfach. Ich habe es auf meiner Website implementiert.

Nehmen wir an, Ihre Site hat eine externe IP-Adresse von 192.168.0.5, um der Argumentation willen. Echte TOR-IP-Adresse zum Zeitpunkt der Veröffentlichung: 95.215.44.97

Imports System.Net
Imports System.Net.Sockets
Imports System.Web

Private Function IsTorExitNode(sIP As String) As Boolean

    ' Reverse your IP (97.44.215.95) then pass to the string, I have just created it as one for this example
    Try
        Dim strTor As String = "97.44.215.95.80.5.0.168.192.ip-port.exitlist.torproject.org"
        Dim Host As IPHostEntry = Dns.GetHostEntry(strTor)

        If Host.AddressList.Length = 0 Then
            Return False
        Else
            If Host.AddressList(0).ToString() = "127.0.0.2" Then
                Return True
            Else
                Return False
            End If
        End If
    Catch ex As SocketException
        Return False
    End Try
End Function

Nervenzusammenbruch

Umgekehrte IP-Adresse: 97.44.215.95
Port: 80
Umgekehrte IP-Adresse: (Ihre externe Site-IP-Adresse)

Wenn die Adresse ein TorExitNode ist, wird 127.0.0.2 zurückgegeben.

In Ihrer Global.asax-Datei können Sie Application_Start verwenden, um zu prüfen, ob die IP-Adresse den Wert true zurückgibt, und sie anschließend von Ihrer Site umzuleiten:

If IsTorExitNode("97.44.215.95") = True Then Response.Redirect("http://www.google.co.uk")

Sobald sie Ihre Website erreichen, werden sie von dieser Seite umgeleitet.

TOR hat eine Liste von IP-Adressen , aber offensichtlich ändern sie sich ständig, so dass die Verwendung meiner Funktion der beste Weg ist, da es immer in Echtzeit ist.

6
user3767204

Es ist eine Tatsache, dass die beste Schutzfunktion für Anwendungen Code und Sicherheit sind, keine Firewall-Sperrliste. Wenn es für Sie unerlässlich ist, echte Benutzer zu haben, müssen Sie Zwei-Faktor-Authentifizierung verwenden. Blocklisten sind heutzutage völlig nutzlos.

3
Alexey Vesnin

Here (siehe https://github.com/RD17/DeTor ) ist eine einfache REST - API, um zu bestimmen, ob eine Anforderung vom TOR-Netzwerk gestellt wurde oder nicht. 

Die Anforderung lautet: curl -X GET http://detor.ambar.cloud/.

Die Antwort lautet: { "sourceIp": "104.200.20.46", "destIp": "89.207.89.82", "destPort": "8080", "found": true }

Als Bonus können Sie Ihrer Website einen Ausweis hinzufügen, um festzustellen, ob ein Benutzer von TOR stammt oder nicht:

<img src="http://detor.ambar.cloud/badge" />

2
SochiX
function isTorExitNode() {
    $serverPort = $_SERVER['SERVER_PORT'];
    $remoteAddr = reverseIp(getClientIp());
    $serverAddr = reverseIp($_SERVER['SERVER_ADDR']);
    $placeholders = '%s.%s.%s.ip-port.exitlist.torproject.org';
    $name = sprintf($placeholders, $remoteAddr, $serverPort, $serverAddr);
    return ( gethostbyname($name) === '127.0.0.2' );
}

function getClientIp() {
    if (isset($_SERVER['HTTP_CF_CONNECTING_IP'])) {
        return $_SERVER['HTTP_CF_CONNECTING_IP'];
    }
    return $_SERVER['REMOTE_ADDR'];
}

function reverseIp($ip) {
    $ipParts = explode('.', $ip);
    return $ipParts[3] . '.' . $ipParts[2] . '.' .
            $ipParts[1] . '.' . $ipParts[0];
}

if(!isTorExitNode()) {
    // Do nothing
} else {
    Die("Sorry, You cannot use TOR network!!!");
}
1
Cem Arslan

Die Erkennung des Tor-Verkehrs ist ziemlich einfach. Die Hauptmethode hierfür ist das Überwachen der Tor-Exit-Knotenliste und das Vergleichen der IP-Adresse mit der Liste. 

Ich musste vor kurzem so etwas tun und baute einen kleinen Ruby-Edelstein, um die Liste der Exit-Knoten auf dem neuesten Stand zu halten und eine einfache Möglichkeit zum Erkennen von Exit-Knoten bereitzustellen. Ich habe auch eine kleine ausführbare Datei geschrieben, die Sie zum Erkennen von Exit-Knoten verwenden können.

Der Edelstein ist Open Source und kann hier gefunden werden: tor-guard

Die Installation des Edelsteins ist einfach genug:

$ gem install tor-guard

Die Verwendung der Bibliothek in Ihrem eigenen Ruby-Code kann folgendermaßen erfolgen:

require 'tor-guard'

if TorGuard.exit_node?('108.56.199.13')
    puts "Yep, it's an exit node!"
end

Die ausführbare Datei ist auch einfach zu bedienen:

$ tg 108.56.199.13 && echo "Yep, it's an exit node"

1
user427390

Ich fand eine Liste aller Tor-Knoten, die jede halbe Stunde aktualisiert wurden: https://www.dan.me.uk/tornodes

Dies sollte den Exit, die Einträge und Bridge-Knoten enthalten, die zum Verbinden und Durchsuchen von Tor verwendet werden.

Verwenden Sie dieses Perl-Skript, um die IP-Adressen von einer heruntergeladenen Webseite abzurufen:

Perl -lne 'print $& if /(\d+\.){3}\d+/' downloadedwebpage.html > listofips.out

Sie erhalten eine Liste von IP-Adressen, eine pro Zeile. Ich habe versucht, etwas zu finden, das dies ohne das Perl-Skript tun würde, aber nach vielen Stunden des Suchens konnte ich keine finden.

Ich hoffe das hilft.

Ich habe auch auf dieser Website auch einige gute Informationen gefunden: https://www.dan.me.uk/dnsbl

1
user2740751

Ja, und tatsächlich ist hier ein Skript, das dies für alle Ihre Windows-Computer erledigt. Wie andere oben erwähnte ist es so einfach wie das Blockieren aller Exit-Knoten, aber das erfordert ein wenig Arbeit.

https://github.com/Austin-Src/BlockTor

0
Don Austin

Es ist möglich, dass das tor-Projekt eine Liste von Exit-Proxies veröffentlicht.

Die Liste der Exit-Proxys kann direkt aus dem Projekt unter https://check.torproject.org/exit-addresses in durch Leerzeichen getrennten Textform heruntergeladen werden.

Ich habe ein Python-Skript geschrieben, um iptables-Regeln für alle Exit-Knoten hinzuzufügen, die alle Pakete von ihnen ablehnen. Sie finden das Skript auf github hier: https://github.com/vab/torblock

Wenn das Tor-Projekt jemals entscheidet, die Veröffentlichung einer Liste von Exit-Knoten zu beenden, können diese blockiert werden. Code muss nur geschrieben werden, um eine Verbindung zum Tor-Netzwerk herzustellen und die Exit-Knoten zu ermitteln.

0
V. Alex Brennen

(Dies wurde für eine PHP - spezifische Frage geschrieben, die anschließend gelöscht und hier als Duplikat verlinkt wurde).

Haftungsausschluss: Berücksichtigen Sie die Auswirkungen der Blockierung aller Tor-Benutzer, wie in der besten Antwort hier aufgezeigt. Berücksichtigen Sie nur Sperrfunktionen wie Registrierung, Zahlung, Kommentare usw. und nicht einen pauschalen Block für alles.

-

Hier sind zwei reine PHP -Lösungen. Die erste lädt und speichert eine Tor-Knotenliste und vergleicht die Besucher-IP mit der Liste. Der zweite verwendet das Tor-DNS-Ausgangsliste -Projekt, um zu ermitteln, ob der Besucher Tor über DNS-Lookups verwendet.

Methode Nr. 1 (Überprüfung der IP-Adresse anhand einer Tor-Relay-Liste):

Mit den folgenden Funktionen können Sie feststellen, ob eine IP-Adresse zum Tor-Netzwerk gehört, indem Sie sie gegen eine dynamische list prüfen, die 10 Minuten lang heruntergeladen und zwischengespeichert wird. Fühlen Sie sich frei, diese Liste zu verwenden, aber wenn möglich, 10 Minuten cachen.

Wo Sie die Tor-Prüfung erzwingen möchten, können Sie einfach Folgendes verwenden:

$isTorUser = isTorUser($_SERVER['REMOTE_ADDR']);

if ($isTorUser) {
    // blocking action
}

Hier ist der Code, den Sie in eine separate Funktionsdatei einfügen können, wenn Sie die Prüfung ausführen möchten. Beachten Sie, dass Sie einige davon anpassen möchten, um den Pfad zur Cachedatei zu ändern.

<?php

function isTorUser($ip)
{
    $list = getTorExitList();

    if (arrayBinarySearch($ip, $list) !== false) {
        return true;
    } else {
        return false;
    }
}

function getTorExitList()
{
    $path = __DIR__ . '/tor-list.cache';

    if ( file_exists($path) && time() - filemtime($path) < 600 ) {
        $list = include $path;
        if ($list && is_array($list)) {
            return $list;
        }
    }

    $data = file('https://openinternet.io/tor/tor-node-list.txt');
    if (!$data) {
        return array();
    }

    $list = array();

    foreach($data as $line) {
        $line = trim($line);
        if ($line == '' || $line[0] == '#') continue;

        list($nick, $ip) = explode("\t", $line);
        $list[] = $ip;
    }

    sort($list);

    file_put_contents($path, sprintf("<?php return %s;", var_export($list, true)));

    return $list;
}

/**
 * Perform binary search of a sorted array.
 * Credit: http://php.net/manual/en/function.array-search.php#39115
 *
 * Tested by VigilanTor for accuracy and efficiency
 *
 * @param string $needle String to search for
 * @param array $haystack Array to search within
 * @return boolean|number false if not found, or index if found
 */
function arrayBinarySearch($needle, $haystack)
{
    $high = count($haystack);
    $low = 0;

    while ($high - $low > 1){
        $probe = ($high + $low) / 2;
        if ($haystack[$probe] < $needle){
            $low = $probe;
        } else{
            $high = $probe;
        }
    }

    if ($high == count($haystack) || $haystack[$high] != $needle) {
        return false;
    } else {
        return $high;
    }
}

Methode Nr. 2 (Überprüfung der IP-Adresse anhand des Projekts "Tor-DNS-Ausgangsliste"):

Die DNS-Exit-Überprüfung ist etwas robuster, da sie die Exit-Richtlinie des Relays berücksichtigt und prüft, auf welcher IP-Adresse und an welchem ​​Port des Clients sich der Client befindet, und wenn ein solcher Exit-Verkehr zulässig ist, wird eine Übereinstimmung zurückgegeben. Der potenzielle Untergang besteht darin, dass bei einem vorübergehenden Ausfall des DNS-Projekts DNS-Anforderungen hängen bleiben können, bevor die Zeitüberschreitung abgebremst wird.

In diesem Beispiel verwende ich eine Klasse aus einer Bibliothek, die ich geschrieben und verwaltet habe, und zwar TorUtils .

Zuerst müssen Sie es mit Composer mit composer require dapphp/torutils installieren und den Standardcode vendor/autoloader.php in Ihre Anwendung aufnehmen.

Der Code für die Prüfung: $ IsTor = false;

try {
    // check for Tor using the remote (client IP), server IP, and server Port (e.g. 80, 443).
    $isTor = TorDNSEL::IpPort(
        $_SERVER['SERVER_ADDR'],
        $_SERVER['SERVER_PORT'],
        $_SERVER['REMOTE_ADDR']
    );
} catch (\Exception $ex) {
    // This would likely be a timeout, or possibly a malformed DNS response
    //echo $ex->getMessage() . "\n";
}

if ($isTor) {
    // blocking action
}

Weitere Überlegungen

Wenn Ihre Anwendung PHP - Sitzungen verwendet, würde ich dringend empfehlen, die Antwort "isTorUser" (zusammen mit der Quell-IP) in die Sitzung zu cachen, und die Überprüfung nur anfangs oder bei einer Änderung der IP-Adresse (z. B. $_SERVER['REMOTE_ADDR'] != $_SESSION['last_remote_addr']) durchführen führen Sie viele Duplikate durch. Obwohl sie versuchen, sehr effizient zu sein, ist es immer wieder eine Verschwendung für dieselbe IP.

0
drew010