Bandit 289 Жалоба Опубликовано 12 июля, 2016 Всем привет! Сейчас мы поговорим о том, как можно определить зашёл ли пользователь через Tor к нам на сайт, и если да - как лучше перенаправить его на Tor домен. На ум приходит только два простых варианта, а именно: Первый это делать запрос вида Code: https://exonerator.torproject.org/?ip=USER_IP×tamp=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 Поделиться сообщением Ссылка на сообщение
GetFly 36 Жалоба Опубликовано 13 июля, 2016 Хоpоший гайд, + Поделиться сообщением Ссылка на сообщение