Embedded Linux engineer
0,0
рейтинг
7 июля 2014 в 16:11

Разработка → Tor Relay за пять минут из песочницы

Безопасность и работоспособность сети Tor напрямую зависит от количества узлов, отвечающих за пересылку трафика, — relay nodes. Организация EFF даже открыла соревнование Tor Challenge с целью простимулировать как можно большее число пользователей настроить и запустить такие узлы. Собственно говоря, именно этому нехитрому действию и посвящена статья.

Нам потребуется сервер — машина, на которой Tor Relay будет работать. Можно воспользоваться своим домашним компьютером, можно перенастроить умный роутер. Я предлагаю другой способ — использовать VPS (Virtual Private Server). Программное обеспечение Tor довольно неприхотливо и легко уживается даже на VPS с минимальной конфигурацией. Хватает 256 Mb памяти, скорее всего хватит и 128Mb. Дисковые требования также минимальны: меньше гигабайта. Стоимость такого сервера в месяц близка к стоимости чашки кофе в какой-нибудь кофейне.

Итак, регистрируем себе VPS. Для нас главное, чтобы у нее был честный внешний IP адрес. Мне нравится Yourserver, но можно использовать любой другой VPS с Linux или *BSD на борту. Как правило, после покупки вы получаете сервер, на который уже установлен один из дистрибутивов Linux. Выбирайте сами, какой вам по душе. Я буду рассказывать на примере Debian.

Сначала на VPS надо установить Tor:

# aptitude install tor


По умолчанию Tor будет работать в режиме клиента сети: вы можете им воспользоваться для работы с сетью, но для для других этот экземпляр будет бесполезен. Чужой трафик через него идти не будет. Необходимо включить режим Tor Relay (пересылки пакетов). Еще мы включим Directory Service &mdsah; сервис каталогов, отвечающий за распространение информации о других tor серверах. В принципе, ничто не мешает использовать для пересылки и для каталога произвольные порты. Конфигурационный файл по умолчанию предлагает использовать порт 9001 для пересылки пакетов и 9030 для сервиса каталогов. Но, поскольку этот VPS больше ни для чего использоваться не будет, мы можем чуть схитрить и облегчить жизнь людям, сидящим за строгими межсетевыми экранами. Мы сделаем наш сервер доступным по портам 443 и 80 — по портам, которые обычно используются для www трафика.

Открываем /etc/tor/torrc и вписываем в него следующие строчки:
Nickname MyCoolNick
ContactInfo Person <somebody AT example dot com>
ORPort 443 NoListen
ORPort 9001 NoAdvertise
DirPort 80 NoListen 
DirPort 9030 NoAdvertise
ExitPolicy reject *:* # no exits allowed
ExitPolicy reject6 *:* # no exits allowed


В строчке Nickname вписываем какое-нибудь имя для этого сервера. По нему мы потом сможем контролировать работу сервера через специальные сервисы на TorProject.

В строчку ContactInfo можно вписать свои контактные данные (на случай, если кому-то захочется с вами связаться). А можно ее просто опустить, тогда наш сервер тоже никому не сможет рассказать, кто его владелец.

Последние две строчки запрещают использовать наш сервер в качестве точки выхода (Exit Node) трафика. В противном случае, Tor будет пытаться использовать наш сервер для передачи исходящего трафика сети на внешние сервера. К сожалению, не все используют Tor с благими намерениями, а если трафик покидает Tor через ваш сервер, все проблемы и последствия свалятся в том числе и на вашу голову.

Кроме того, прописанная конфигурация заставляет сервер рассказать остальным участникам сети, что сервер доступен по портам 443 для пересылки пакетов и 80 для сообщения информации о других серверах сети. При этом на самом деле сервер будет ждать сообщений на портах 9001 и 9030. В Debian Tor по умолчанию работает не из-под рута и такая конфигурация позволяет избежать проблем с подключением к портам.

С помощью iptables мы сейчас настроим необходимую связь между портами.

Если в выбранном дистрибутиве есть специальные средства настройки сетевого экрана iptables, можно воспользоваться ими. Проще и нагляднее сделать все ручками.

Создаем файл /etc/iptables.save.rules такого содержания:

# Generated by iptables-save v1.4.14 on Sat Jul  5 14:15:04 2014
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [22:1968]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -d 127.0.0.0/8 ! -i lo -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 9001 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 9030 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-port-unreachable
COMMIT
# Completed on Sat Jul  5 14:15:04 2014
# Generated by iptables-save v1.4.14 on Sat Jul  5 14:15:04 2014
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [1:104]
:POSTROUTING ACCEPT [1:104]
-A PREROUTING -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 9001
-A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 9030
COMMIT
# Completed on Sat Jul  5 14:15:04 2014


Этим мы разрешаем работу с нашим сервером tor и доступ к ssh для удаленного администрирования.
Осталось прописать загрузку этих правил. Обычно я прописываю запуск iptables-restore в /etc/network/interfaces:

auto lo
iface lo inet loopback
	pre-up /sbin/iptables-restore /etc/iptables.save.rules


На Yourserver файл /etc/network/interfaces переписывается каждый раз при перезапуске, поэтому можно сделать чуть иначе.
Например, вставить загрузку правил iptables в /etc/rc.local. Для этого в конец файла перед exit 0 вставляем строчку

/sbin/iptables-restore /etc/iptables.save.rules

В заключение перезапускаем сервер tor:
# service tor restart


Проверяем, что мы все сделали правильно. Через некоторое время после перезапуска в файле /var/log/tor/log должна появиться строчки:

Self-testing indicates your ORPort is reachable from the outside. Excellent. Publishing server descriptor.
Tor has successfully opened a circuit. Looks like client functionality is working.
Self-testing indicates your DirPort is reachable from the outside. Excellent.
Performing bandwidth self-test...done.


Примерно через час-два, когда информация в базе данных обновится, можно зайти на globe.torproject.org и, набрав в строке поиска ник своего сервера, убедиться в том, что сеть Tor пополнилась еще одной точкой перераспределения данных.

Поначалу через новый сервер трафик идти не будет. Жизненный путь Tor Relay — это тема отдельной статьи.

UPD: Поскольку в дистрибутивах не всегда лежит последняя версия Tor, имеет смысл подключить специальные репозитории.
Так для Debian и Ubuntu можно подключить официальный репозиторий torproject.org. Для этого в /etc/apt/sources.list.d/ создаем файл torproject.list следующего содержания:
deb http://deb.torproject.org/torproject.org DISTRIBUTION main

где вместо DISTRIBUTION вписываем версию вашего дистрибутива (например, jessie или saucy). Выполняем
# gpg --keyserver keys.gnupg.net --recv 886DDD89
# gpg --export A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89 | apt-key add -
# apt-get update
# apt-get install tor
Дмитрий @lumag
карма
8,0
рейтинг 0,0
Embedded Linux engineer
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (16)

  • 0
    Случайно не знаете, почему параметры NoListen и NoAdvertise начинаются на No? Обычно в конфигурациях пишут «Listen port»
    • 0
      Потому как по умолчанию эти порты Listen и Advertise:
      ORPort 9001
      DirPort 9030
      


      А если нужно специальное поведение, то прописываются флаги No*
  • 0
    А что даёт распространение ссылки yourserver? Можно ли на ней заработать? (я спрашиваю вот про такую: www.yourserver.se/portal/aff.php?aff=045 скриншот)
    • +1
      Хабра же любит реферальные ссылки
    • 0
      Заработать — нет, сэкономить — да. Если по рефералу регистрируются другие пользователи, у меня получится небольшая скидка.
      • 0
        Лучше бы купон дали: TWITTERWELCOME
        30% off.
        • 0
          Не знал.
  • +1
    Цитата:
    «Последние две строчки запрещают использовать наш сервер в качестве точки выхода (Exit Node) трафика… К сожалению, не все используют Tor с благими намерениями, а если трафик покидает Tor через ваш сервер, все проблемы и последствия свалятся в том числе и на вашу голову»

    Может я ошибаюсь, раньше вроде писали, что контролирующий ExitNode-ы — фактически контролирует Tor. А так как это «опасно», то желающих их держать мало, и вполне возможно, что все (большинство) ExitNode-ов уже под контролем.
    И вся возня с кучей релеев тогда теряет смысл? Или нет?

    Блин, ну кто придумал при отрицательной карме лишать возможности форматировать текст!? Уж цитаты бы оставили, остальное — бог с ним…
    • 0
      Во-первых, Tor — это не только анонимизация внешнего трафика, но еще и hidden services. Для доступа к ним не используются ExitNodes.

      Во-вторых, как минимум часть Exit Nodes работают под эгидой самого Tor Project и ряда других «доверяемых» организаций.

      В-третьих, обычный трафик, как известно, тоже могут слушать разные люди. Поэтому, что через Tor, что без него никто HTTPS Everywhere и прочие аналоги никто не отменял.
    • 0
      Не только большинство Exit-нод под контролем, но и релеев тоже. Смотрите BlackHat 2-7 августа, там расскажут, как, имея $3000, можно деанонимизировать любого пользователя или hidden service Tor. Раньше такие атаки тоже проводились.

      Еще нужно помнить, что Tor повышает анонимность, но использование Exit node понижает секретность.
  • +3
    Не имеет прямого отношения к теме, но пару дней назад парню из Австрии, который в 2012 установил Tor exit node у себя дома, вынесли неутешительный приговор — 3 года условно за то, что кто-то через его Exit node распространял детскую порнографию. Объясняли тем, что он знал, что через его Exit node могли совершать противоправные действия, и классифицировали это как пособничество.

    lowendtalk.com/discussion/6283/raided-for-running-a-tor-exit-accepting-donations-for-legal-expenses/p1
    network23.org/blackoutaustria/2014/07/01/to-whom-it-may-concern-english-version/
    rdns.im/court-official-statement-part-1
    www.thelocal.at/20140705/internet-relay-op-convicted-of-child-porn-offenses
  • 0
    На сайте torproject.org, в мануалах, сказано:
    Do not use the packages in Ubuntu's universe. In the past they have not reliably been updated. That means you could be missing stability and security fixes.

    И что-то мне подсказывает, что в репозиториях Debian пакеты с тором тоже не слишком актуальные. Так что, на мой взгляд, лучше подключить репозиторий торпроджекта.
    • 0
      Nice catch. Я по привычке добавлял wheezy-backports, в нем 0.2.4.22
  • 0
    Azure блокирует трафик tor?
    Исходящие соединения вроде работают, входящие с обычных узлов тоже, а вот сеть релея не видит:
    tor.log
    [NOTICE] Tor now sees network activity. Restoring circuit build timeout recording. Network was down for 703 seconds during 1 circuit attempts.
    [NOTICE] Tor has not observed any network activity for the past 698 seconds. Disabling circuit build timeout recording.
    [WARN] Your server (xxx.xxx.xxx.xxx:80) has not managed to confirm that its DirPort is reachable. Please check your firewalls, ports, address, /etc/hosts file, etc. [6 duplicates hidden]
    [WARN] Your server (xxx.xxx.xxx.xxx:443) has not managed to confirm that its DirPort is reachable. Please check your firewalls, ports, address, /etc/hosts file, etc. [6 duplicates hidden]
    • 0
      Могут блокироваться именно 80/443 порты. Или специально обрабатываться. Я бы в этот момент повесил tcpdump и посмотрел, что с портом происходит.
      • 0
        Я не настолько фанат, думал сделать хорошее дело пока есть лишние кредиты в Azure.

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