Pull to refresh

Блокируем Tor на корпоративном firewall

Reading time2 min
Views27K
В связи с тем, что множество пользователей раскусили преимущества «portable Tor Browser», для установки которого не нужны админские права, было решено задавить возможность использования Tor во всех возможных вариантах.
Сразу оговорюсь, что речь пойдёт о связке 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
Tags:
Hubs:
Total votes 22: ↑10 and ↓12-2
Comments25

Articles