Bandit

Определяем пользователей Tor у себя на сайте (2015)

В теме 2 сообщения

Всем привет!

Сейчас мы поговорим о том, как можно определить зашёл ли пользователь через Tor к нам на сайт, и если да - как лучше перенаправить его на Tor домен.

На ум приходит только два простых варианта, а именно:

Первый это делать запрос вида

 

Code:
https://exonerator.torproject.org/?ip=USER_IP&timestamp=date (где дата в формате "Y-m-d")
и там регуляркой(или просто вхождением подстроки в строку) искать слово "positive", при нахождении которого считать что пользователь пришёл через Tor и редиректить его на Tor домен.

Минусы такого способа очевидны, один из них заключается в том, что редирект нельзя будет осуществить силами самого веб-сервера, а только каким либо языком программирования.

А второй, это получить список всех выходных нод и добавить правило редиректа в конфиг самого веб сервера(так же можно получать ip пользователя на каком либо языке программирования, искать его вхождение в списке, и если таковое найдено делать редирект).

Второй способ как я думаю более интересный и универсальный, по этому реализацию именного его мы и рассмотрим в данной статье.

В качестве подопытных будет использоваться NGINX(для редиректами силами веб-сервера), Python 2.7(для получения списка нод и приведения его к такому виду, по которому легко осуществлять поиск) и PHP(для редиректа со страницы сайта).

 

И так, приступим.

Первое что необходимо сделать это получить список всех нод и привести его к "нормальному" виду:

 

Code:
# -*- coding: utf-8 -*-import urllibimport re# Получаем список нодr = urllib.urlopen("https://check.torproject.org/exit-addresses")    nodes_list = r.read()# Приводим список нод к "нормальному" видуnodes_ips = re.findall("d{1,3}.d{1,3}.d{1,3}.d{1,3}", nodes_list)    # Пишем в файлwith open('tor_nodes.txt', 'w') as f:    f.write("n".join(nodes_ips) + "n")
Как получить список мы знаем, теперь разберёмся как на PHP проверить если в списке нод IP пользователя и если есть сделать редирект:

 

Code:
<?php$tor = "https://B16B00B5.onion/";    // Наш домен в тор$ip = $_SERVER["REMOTE_ADDR"];         // Проверять достаточно только "REMOTE_ADDR", тк нам не интересно за прокси юзер или нет    if( strpos(file_get_contents("./tor_nodes.txt"), $ip) !== false) {            header('Location: '.$tor); // Ага, тор, делаем редирект    }?>
конечно же менее русурсозатратно будет читать файл по строчно и сверять, но тут мы просто разбираем принцип, а не пишем эталонный код

 

Ну вот, редирект на PHP работает, теперь осталось разобратся как это сделать усилиями NGINX для этого нам понадобится модуль Geo - http://nginx.org/ru/docs/http/ngx_http_geo_module.html

После того как он установлен, поправим не много скипт для получения списка нод таким образом, что бы на выходе был конфиг для модуля NGINX Geo:

 

Code:
# -*- coding: utf-8 -*-import urllibimport retor = "https://B16B00B5.onion/"    # Наш домен в тор# Получаем список нодr = urllib.urlopen("https://check.torproject.org/exit-addresses")    nodes_list = r.read()# Приводим список нод к "нормальному" видуnodes_ips = re.findall("d{1,3}.d{1,3}.d{1,3}.d{1,3}", nodes_list)    # Пишем в файлwith open('tor_nodes.txt', 'w') as f:    f.write("geo $bad_user {n" + "/32 1;n".join(["t" + nodes_ip for nodes_ip in nodes_ips])+ "n}n")    f.write("server {n  if ($bad_user) {n    rewrite ^ " + tor + ";n  }n}n")
Ну вот собственно и всё

 

2015 darknet © 0xB16B00B5

Поделиться сообщением


Ссылка на сообщение

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти