В связи с тем, что множество пользователей раскусили преимущества «portable Tor Browser», для установки которого не нужны админские права, было решено задавить возможность использования Tor во всех возможных вариантах.
Сразу оговорюсь, что речь пойдёт о связке FreeBSD + pf.
Схема инициализации Tor сервиса проста до безобразия.
Есть несколько корневых серверов на которых регистрируются клиенты. Эти же клиенты скачивают с техже самых серверов список таких же клиентов как и они, и согласно этого списка получают информацию через какого клиента ходить можно или нельзя, а также другую служебную информацию.
обычный URL запроса списка клиентов к корневому серверу выглядит вот так:
Содержимое выдаваемого сервером файла примерно таково:
Начальный кусок страницы содержит служебную информацию о сервере и времени генерации списка. Ниже идут строки идентифицирующие клиентов, а также их характеристики.
Нас будут интересовать строки начинающиеся с буквы «r», ну и естественно IP адрес клиента. Всё остальное в принципе не особенно важно.
Берем wget + awk + grep + sort + uniq и получаем нужный нам список ip адресов.
остаётся добавить несколько строк в pf.conf
Сразу оговорюсь, что речь пойдёт о связке FreeBSD + pf.
Схема инициализации Tor сервиса проста до безобразия.
Есть несколько корневых серверов на которых регистрируются клиенты. Эти же клиенты скачивают с техже самых серверов список таких же клиентов как и они, и согласно этого списка получают информацию через какого клиента ходить можно или нельзя, а также другую служебную информацию.
обычный URL запроса списка клиентов к корневому серверу выглядит вот так:
http://128.31.0.34:9031/tor/status/all
Содержимое выдаваемого сервером файла примерно таково:
network-status-version 2
dir-source 128.31.0.34 128.31.0.34 9031
fingerprint FFCB46DB1339DA84674C70D7CB586434C4370441
contact 1024D/28988BF5 arma mit edu
published 2009-09-07 18:24:08
dir-options Names BadExits Versions
client-versions 0.2.0.34,0.2.0.35,0.2.1.19,0.2.2.1-alpha
server-versions 0.2.0.34,0.2.0.35,0.2.1.19,0.2.2.1-alpha
dir-signing-key
-----BEGIN RSA PUBLIC KEY-----
MIGJAoGBAMHa0ZC/jo2Q2DrwKYF/6ZbmZ27PFYG91u4gUzzmZ/VXLpZ8wNzEV3oW
nt+I61048fBiC1frT1/DZ351n2bLSk9zJbB6jyGZJn0380FPRX3+cXyXS0Gq8Ril
xkhMQf5XuNFUb8UmYPSOH4WErjvYjKvU+gfjbK/82Jo9SuHpYz+BAgMBAAE=
-----END RSA PUBLIC KEY-----
r Unnamed AFFku1nT3UiV4dsIC0ze+1KD738 YSYH74y8ohTu5Uhvk3Yl0WU8DqI 2009-09-07 11:44:12 94.50.173.6 443 9030
s Exit V2Dir Valid
opt v Tor 0.2.0.35
r tbreg AHKeOQzTsS4dKu6jY5dGrCtY3aE h+oWM86K3Z6yb2z4ZpPd++i7yZo 2009-09-07 02:10:50 202.109.188.97 9001 0
s Exit Valid
opt v Tor 0.2.1.2-alpha (r15383)
r abcdefg ALW6RdYFJ9/JA7MuCkcEUbE+L1I xkVjcAgH+zVB/dcg7NYBDXGWA1g 2009-09-07 17:19:54 84.179.91.68 443 0
s Exit Named Valid
opt v Tor 0.2.0.35
Начальный кусок страницы содержит служебную информацию о сервере и времени генерации списка. Ниже идут строки идентифицирующие клиентов, а также их характеристики.
Нас будут интересовать строки начинающиеся с буквы «r», ну и естественно IP адрес клиента. Всё остальное в принципе не особенно важно.
Берем wget + awk + grep + sort + uniq и получаем нужный нам список ip адресов.
wget 128.31.0.34:9031/tor/status/all -q -O - | grep -E '^r' | awk '{print $7}' | sort | uniq > /etc/pf/tor.list
остаётся добавить несколько строк в pf.conf
int_if="em0"
ext_if="em1"
table persist file "/etc/pf/tor.list"
block in log quick on { $int_if $ext_if } from any to <tor> label TOR_IN
block out log quick on { $int_if $ext_if } from <tor> to any label TOR_OUT
И скормить измененный конфиг pf.
теперь через tcpdump на интерфейсе pflog можно вычислить человека который пытался пользоваться Tor и сказать «ай яй яй». Скрипт обновления списка Tor клиентов можно запускать сколь угодно часто(в зависимости от предоплаченного Вашей компанией трафика). Обычный размер файла клиентов около 1.5 Мегабайт. Поэтому насколько част�� его обновлять решать Вам и только Вам. Я дёргаю файл раз в 10 минут(безлимитный трафик).
Для любителей perl решений есть модуль
search.cpan.org/~ajdixon/Net-Tor-Servers-0.02/lib/Net/Tor/Servers.pm
который в связке с pftabled perl client позволит менять таблицу pf налету не вызывая скрипт синхронизации и перечитывания таблицы Tor клиентов.
Желающие могут привязать таблицу Tor клиентов к другим межсетевым экранам.
(C) Aborche 2009
![]()
