Tor and NodeFamily

Друзья, хотел настроить Tor не использовать в построении цепочек узлы из одних и тех же стран. Например не допускать построения цепочек RU-RU-RU (очень маловероятный сценарий, но все же благодаря ТСПУ можно считать что в РФ есть глобальный наблюдатель) или DE-DE-DE (встречается ну очень часто).
Из актуального мануала решаю воспользоваться NodeFamily.
В torrc торбраузера вставляю все страны из iso и неопределенные страны, но результата нет, строит как и раньше

...
NodeFamily {AD}
NodeFamily {AE}
NodeFamily {AF}
NodeFamily {AG}
NodeFamily {AI}
NodeFamily {AL}
NodeFamily {AM}
NodeFamily {AO}
NodeFamily {AQ}
NodeFamily {AR}
NodeFamily {AS}
NodeFamily {AT}
NodeFamily {AU}
NodeFamily {AW}
NodeFamily {AX}
NodeFamily {AZ}
NodeFamily {BA}
NodeFamily {BB}
NodeFamily {BD}
NodeFamily {BE}
NodeFamily {BF}
NodeFamily {BG}
NodeFamily {BH}
NodeFamily {BI}
NodeFamily {BJ}
NodeFamily {BL}
NodeFamily {BM}
NodeFamily {BN}
NodeFamily {BO}
NodeFamily {BQ}
NodeFamily {BR}
NodeFamily {BS}
NodeFamily {BT}
NodeFamily {BV}
NodeFamily {BW}
NodeFamily {BY}
NodeFamily {BZ}
NodeFamily {CA}
NodeFamily {CC}
NodeFamily {CD}
NodeFamily {CF}
NodeFamily {CG}
NodeFamily {CH}
NodeFamily {CI}
NodeFamily {CK}
NodeFamily {CL}
NodeFamily {CM}
NodeFamily {CN}
NodeFamily {CO}
NodeFamily {CR}
NodeFamily {CU}
NodeFamily {CV}
NodeFamily {CW}
NodeFamily {CX}
NodeFamily {CY}
NodeFamily {CZ}
NodeFamily {DE}
NodeFamily {DJ}
NodeFamily {DK}
NodeFamily {DM}
NodeFamily {DO}
NodeFamily {DZ}
NodeFamily {EC}
NodeFamily {EE}
NodeFamily {EG}
NodeFamily {EH}
NodeFamily {ER}
NodeFamily {ES}
NodeFamily {ET}
NodeFamily {FI}
NodeFamily {FJ}
NodeFamily {FK}
NodeFamily {FM}
NodeFamily {FO}
NodeFamily {FR}
NodeFamily {GA}
NodeFamily {GB}
NodeFamily {GD}
NodeFamily {GE}
NodeFamily {GF}
NodeFamily {GG}
NodeFamily {GH}
NodeFamily {GI}
NodeFamily {GL}
NodeFamily {GM}
NodeFamily {GN}
NodeFamily {GP}
NodeFamily {GQ}
NodeFamily {GR}
NodeFamily {GS}
NodeFamily {GT}
NodeFamily {GU}
NodeFamily {GW}
NodeFamily {GY}
NodeFamily {HK}
NodeFamily {HM}
NodeFamily {HN}
NodeFamily {HR}
NodeFamily {HT}
NodeFamily {HU}
NodeFamily {ID}
NodeFamily {IE}
NodeFamily {IL}
NodeFamily {IM}
NodeFamily {IN}
NodeFamily {IO}
NodeFamily {IQ}
NodeFamily {IR}
NodeFamily {IS}
NodeFamily {IT}
NodeFamily {JE}
NodeFamily {JM}
NodeFamily {JO}
NodeFamily {JP}
NodeFamily {KE}
NodeFamily {KG}
NodeFamily {KH}
NodeFamily {KI}
NodeFamily {KM}
NodeFamily {KN}
NodeFamily {KP}
NodeFamily {KR}
NodeFamily {KW}
NodeFamily {KY}
NodeFamily {KZ}
NodeFamily {LA}
NodeFamily {LB}
NodeFamily {LC}
NodeFamily {LI}
NodeFamily {LK}
NodeFamily {LR}
NodeFamily {LS}
NodeFamily {LT}
NodeFamily {LU}
NodeFamily {LV}
NodeFamily {LY}
NodeFamily {MA}
NodeFamily {MC}
NodeFamily {MD}
NodeFamily {ME}
NodeFamily {MF}
NodeFamily {MG}
NodeFamily {MH}
NodeFamily {MK}
NodeFamily {ML}
NodeFamily {MM}
NodeFamily {MN}
NodeFamily {MO}
NodeFamily {MP}
NodeFamily {MQ}
NodeFamily {MR}
NodeFamily {MS}
NodeFamily {MT}
NodeFamily {MU}
NodeFamily {MV}
NodeFamily {MW}
NodeFamily {MX}
NodeFamily {MY}
NodeFamily {MZ}
NodeFamily {NA}
NodeFamily {NC}
NodeFamily {NE}
NodeFamily {NF}
NodeFamily {NG}
NodeFamily {NI}
NodeFamily {NL}
NodeFamily {NO}
NodeFamily {NP}
NodeFamily {NR}
NodeFamily {NU}
NodeFamily {NZ}
NodeFamily {OM}
NodeFamily {PA}
NodeFamily {PE}
NodeFamily {PF}
NodeFamily {PG}
NodeFamily {PH}
NodeFamily {PK}
NodeFamily {PL}
NodeFamily {PM}
NodeFamily {PN}
NodeFamily {PR}
NodeFamily {PS}
NodeFamily {PT}
NodeFamily {PW}
NodeFamily {PY}
NodeFamily {QA}
NodeFamily {RE}
NodeFamily {RO}
NodeFamily {RS}
NodeFamily {RU}
NodeFamily {RW}
NodeFamily {SA}
NodeFamily {SB}
NodeFamily {SC}
NodeFamily {SD}
NodeFamily {SE}
NodeFamily {SG}
NodeFamily {SH}
NodeFamily {SI}
NodeFamily {SJ}
NodeFamily {SK}
NodeFamily {SL}
NodeFamily {SM}
NodeFamily {SN}
NodeFamily {SO}
NodeFamily {SR}
NodeFamily {SS}
NodeFamily {ST}
NodeFamily {SV}
NodeFamily {SX}
NodeFamily {SY}
NodeFamily {SZ}
NodeFamily {TC}
NodeFamily {TD}
NodeFamily {TF}
NodeFamily {TG}
NodeFamily {TH}
NodeFamily {TJ}
NodeFamily {TK}
NodeFamily {TL}
NodeFamily {TM}
NodeFamily {TN}
NodeFamily {TO}
NodeFamily {TR}
NodeFamily {TT}
NodeFamily {TV}
NodeFamily {TW}
NodeFamily {TZ}
NodeFamily {UA}
NodeFamily {UG}
NodeFamily {UM}
NodeFamily {US}
NodeFamily {UY}
NodeFamily {UZ}
NodeFamily {VA}
NodeFamily {VC}
NodeFamily {VE}
NodeFamily {VG}
NodeFamily {VI}
NodeFamily {VN}
NodeFamily {VU}
NodeFamily {WF}
NodeFamily {WS}
NodeFamily {YE}
NodeFamily {YT}
NodeFamily {ZA}
NodeFamily {ZM}
NodeFamily {ZW}
NodeFamily {??}
UseBridges 1

это баг или я не разобрался?

Также не будет работать строчка с адресом, без указания узла.
Узел идентифицируется отпечатком, не страной или адресом.
Код ищет указание на узел в строке NodeFamily, затем добавляет в семью все остальное в т.ч. все ноды со страной (странами).

NodeFamily исправляет недостаток информации для конкретного узла, а не все другое сразу.

Считаете это багом? Создайте тикет.
Но это скорей всего фича, а новую стоит риквестировать сразу в арти.

Против глобального наблюдателя сепарировать лучше по AS. Поищите по трекеру, в т.ч. закрытым тикетам, или рассылкам, там где-то обсуждалось. [1] [2]

вот описание из man

[[NodeFamily]] **NodeFamily** __node__,__node__,__...__::
    The Tor servers, defined by their identity fingerprints,
    constitute a "family" of similar or co-administered servers, so never use
    any two of them in the same circuit. Defining a NodeFamily is only needed
    when a server doesn't list the family itself (with MyFamily). This option
    can be used multiple times; each instance defines a separate family.  In
    addition to nodes, you can also list IP address and ranges and country
    codes in {curly braces}. See <<ExcludeNodes,ExcludeNodes>> for more
    information on how to specify nodes.

синтаксис

[[ExcludeNodes]] **ExcludeNodes** __node__,__node__,__...__::
    A list of identity fingerprints, country codes, and address
    patterns of nodes to avoid when building a circuit. Country codes are
    2-letter ISO3166 codes, and must
    be wrapped in braces; fingerprints may be preceded by a dollar sign.
    (Example:
    ExcludeNodes ABCD1234CDEF5678ABCD1234CDEF5678ABCD1234, \{cc}, 255.254.0.0/8) +
     +
    This option can appear multiple times: the values from multiple lines are
    spliced together. +
     +
    By default, this option is treated as a preference that Tor is allowed
    to override in order to keep working.
    For example, if you try to connect to a hidden service,
    but you have excluded all of the hidden service's introduction points,
    Tor will connect to one of them anyway.  If you do not want this
    behavior, set the StrictNodes option (documented below).  +
     +
    Note also that if you are a relay, this (and the other node selection
    options below) only affects your own circuits that Tor builds for you.
    Clients can still build circuits through you to any node.  Controllers
    can tell Tor to build circuits through any node. +
     +
    Country codes are case-insensitive. The code "\{??}" refers to nodes whose
    country can't be identified. No country code, including \{??}, works if
    no GeoIPFile can be loaded. See also the <<GeoIPExcludeUnknown,GeoIPExcludeUnknown>> option below.

очень жаль, из описания сложилось другое впечатление

Кстати, MyFamily работает только при перекрестных ссылках. Иначе bad узел, попав в цепочку, может исключить произвольно другие узлы, создав условие для атаки.

Вообще можно написать патч, он должен быть не сложный. Возможно где-то уже существует такой. Но его не примут в код, придется собирать самим для каждой новой версии. Шифропанк своими руками.

к сожалению не силен в тикетах и реквестах, поэтому мое наблюдение останется не востребованным

как вариант Tor Control Panel


отдельно настраиваются ВХОД / ВЫХОД / “middle”

Также можно управлять построением цепочек и туннелей вручную через ControlPort, добавив параметр __LeaveStreamsUnattached 1 в конфиг. Каждое соединение будет генерировать событие в ControlPort, соединение нужно присоединять к circuit’у самостоятельно (программно).

Circuit можно построить произвольной длины и с указанием конкретных релеев.

Вот так, с помощью нехитрых приспособлений буханку белого (или черного) хлеба можно превратить в троллейбус…

countries.patch (1.3 KB)

Спасибо. Попробую подтянуть гит, си и компиляцию приложений.

Патч как пример, там исключен добавленный код для исполнения. Кроме того, есть типы цепочек (HS, ускорение) которые принципиально не учитывают families (ips, subnets), а только отпечатки. У вас может возникнуть ситуация когда в цепочке используются разные узлы с одним адресом. Это не ошибка, это документированное использование. Я не знаю, что с этим делать.

Вот попалось, вроде и не заметно что оба сервера из Германии.

eu

От куда EU вообще взялось? Нет такого кода в ISO3166.

Используют IPFire Location Database

Exceptionally reserved code elements are codes reserved at the request of national ISO member bodies, governments and international organizations, which are required in order to support a particular application, as specified by the requesting body and limited to such use

Reserved on request of ISO 4217/MA for the European monetary unit Euro Extended for ISO 6166 “Securities – International securities identification numbering system (ISIN)” in March 1998 Extended for any application needing to represent the name European Union in August 1999

Можно добавить в ExcludeNodes вместе с {??} как не несущие географической информации.