42 votes

Est-il possible de bloquer les utilisateurs de Tor ?

Serait-il possible de bloquer les utilisateurs de Tor ? ( https://www.torproject.org/ )

En raison de la nature du site que je gère, je dois faire tout ce qui est en mon pouvoir pour empêcher les comptes multiples et bloquer certains emplacements. Tor est pire que les proxies - un cauchemar total...

42voto

Johan Nilsson Points 703

Tor est beaucoup plus facile à bloquer que les autres proxys ouverts puisque la liste des adresses IP de sortie est connue et publiée. Lisez la réponse à https://www.torproject.org/docs/faq-abuse.html.en#Bans et si vous voulez toujours bloquer l'accès des utilisateurs à votre site, vous pouvez utiliser https://www.torproject.org/projects/tordnsel.html.en ou l'outil d'exportation de la liste des sorties en vrac.

Si vous utilisez l'outil d'exportation de listes de sortie en vrac, veillez à obtenir souvent une nouvelle liste et à faire expirer les anciens blocs, car la liste des adresses IP change.

21voto

Onlyjob Points 1244

Bloquer Tor est une erreur car les (ab)utilisateurs et les adresses IP ne sont pas les mêmes. En bloquant Tor, vous bloquez également les utilisateurs légitimes et les inoffensifs nœuds de sortie Tor restreints configurés avec des politiques de sortie conservatrices.

Par exemple, si vous êtes préoccupé par les attaques sur SSH (port 22), le fait de bloquer uniquement Tor ne contribuera guère à améliorer la sécurité. Ce dont vous avez vraiment besoin est une liste noire dynamique synchronisée comme http://denyhosts.sourceforge.net/ qui traquent les délinquants sans tenir compte de leur affiliation à Tor.

Denyhosts bloquera automatiquement les nœuds de sortie Tor qui permettent à Tor d'accéder au port 22 sans refuser inutilement l'accès aux utilisateurs anonymes et aux opérateurs des nœuds de sortie Tor qui ne laissent jamais les délinquants attaquer vos services SSH.

7voto

Chad Scira Points 1839

Le projet Tor fournit en fait sa propre liste ici :

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

6voto

En .NET, c'est possible et simple. Je l'ai mis en œuvre sur mon site.

Disons que votre site a une adresse IP externe de 192.168.0.5, pour les besoins de la discussion. Adresse IP TOR réelle au moment de la publication : 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

Ventilation

Adresse IP inversée : 97.44.215.95
Port : 80
Adresse IP inversée : (l'adresse IP de votre site externe)

Si l'adresse est un TorExitNode, il retournera 127.0.0.2.

Dans votre fichier Global.asax, vous pouvez utiliser l'Application_Start pour vérifier si l'adresse IP renvoie vrai et ensuite les rediriger loin de votre site :

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

Maintenant, dès qu'ils arrivent sur votre site, ils sont redirigés ailleurs.

TOR a une liste de Adresses IP Mais il est évident qu'ils changent tout le temps. Utiliser ma fonction serait donc la meilleure solution car elle est toujours en temps réel.

3voto

Cem Arslan Points 41

Vous pouvez utiliser le Service TorDNSEL pour effectuer une requête en direct afin de savoir si une adresse IP spécifique est un nœud de sortie Tor. Vous interrogez le service via une requête DNS spécialement formée.

Voici un exemple de code PHP qui effectue la recherche :

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!!!");
}

Notes importantes :

  • Cet exemple ne prend en charge que les adresses IPv4, pas IPv6.

  • L'obtention d'une réponse peut prendre quelques secondes. Veillez donc à ne pas introduire de délais dans le rendu de votre site.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X