devzone.org.ua/post/vstanovlennia-onion-routera-arti-z-pidkliuchenniam-do-merezi-tor-cherez-yggdrasil.md
2026-02-02 06:27:48 +02:00

14 KiB
Raw Blame History

Встановлення Onion-роутера Arti з підключенням до мережі Tor через Yggdrasil

Arti - це сучасна реалізація Onion-роутера мережі Tor мовою Rust.

Нижче інструкція зі встановлення та налаштування його проксі-сервера з підключенням до мережі через Yggdrasil (у якості VPN). При відповідному налаштуванні клієнтів, це дозволяє приховати факт користування мережею Tor а також підвищує конфіденційність всередині неї, адже вхідні вузли Tor бачитимуть IP адресу провайдера моста (bridge), а міст - бачитиме IPv6 мережі Yggdrasil (до якої в свою чергу, можна підключитися через інші мережі)

Збірка з вихідного коду

При першій збірці програми на Rust, потрібно встановити середовище розробки. Після чого, забираємо початковий код усіх компонентів Arti та компілюємо його з Сargo:

git clone https://gitlab.torproject.org/tpo/core/arti.git
cd arti
cargo build --release
sudo install target/release/arti /usr/local/bin/arti
  • тут ми встановлюємо тільки компонент arti та ставимо його в системну теку для подальшого запуску з systemd; по аналогії можна встановити й інші компоненти (з теки target/release) та налаштувати для них сервіси або ж зібрати тільки потрібний нам -p arti
  • після виконання команди install поточну теку arti можна видалити, щоб звільнити простір

Конфігурація

Тут все просто: на сайті є готовий приклад файлу конфігурації з детальними коментарями до кожної опції. Для підключення до мережі Tor засобами Yggdrasil - достатньо лише вказати потрібні мости, наприклад з цього списку.

У своїй конфігурації, я також явно вказав атрибут enabled, щоб використовувати для підключення тільки мости зі списку bridges:

# Bridges (for anticensorship support)
[bridges]

# Should we use configured bridges?
#     If set to false, we will ignore the configured bridges.
#     If set to "auto", we will use any bridges that are configured.
#     If set to true, bridges must be configured and will be used.
enabled = "true"

bridges = [
    "[218:4feb:a509:9db2:2b34:6e7e:e071:5dee]:1991 F805F6B4E5E203EFE2A7FFB1E5042AFE8BD986B4",
    "[220:f022:cd6c:22a9:5285:79e2:2e19:b66a]:1991 6580023D474DD3C06920027530C3B5E39B89DC03",
    "[219:a32f:307b:8372:25d3:e1d0:c8fb:d2f6]:1991 49A53936AF2895A1612603AAA3C1CF8A01830157",
    "[200:ba50:4b2c:8dc9:9529:38de:5677:57a0]:7918 79F9F7CBD0E2A4458F11B7874008D783BCF5C523",
]

Мости obfs4

В списках мостів бувають і такі, що підтримують обфускацію obfs4:

bridges = [
    "obfs4 [219:a32f:307b:8372:25d3:e1d0:c8fb:d2f6]:1992 49A53936AF2895A1612603AAA3C1CF8A01830157 cert=uVXUO414i8rmHt58SMvdiR0KDxVX7NLmQqLEnINtZxc3g/2B6X+VLLfLZl2m+Mvk6McMHQ iat-mode=0",
    "obfs4 [220:f022:cd6c:22a9:5285:79e2:2e19:b66a]:1992 6580023D474DD3C06920027530C3B5E39B89DC03 cert=pSt9XZ3p/3oxi9knlK4jQY8LFSWZn4hl/PplgnMY5Lra3VaZMbP7F4tuorDV2vXhm8qEAQ iat-mode=0",
    "obfs4 [218:4feb:a509:9db2:2b34:6e7e:e071:5dee]:1992 F805F6B4E5E203EFE2A7FFB1E5042AFE8BD986B4 cert=0GcjnEnZ0rJ8/nfxo4ZSkjMZ0fqHSrvj/MdwEtbbuzx8qgqFTaqHTuWelGw2MxJ5wW2QaQ iat-mode=0",
    "obfs4 [200:ba50:4b2c:8dc9:9529:38de:5677:57a0]:7917 79F9F7CBD0E2A4458F11B7874008D783BCF5C523 cert=3ues7AA498O9YrQ1wsdWyz3/n3YBXN88wXP8mppkE0lTw1YB6FSlDMkm3Ry6jXlj0phzMg iat-mode=0",
]

Щоб використовувати рядки вище, потрібно додатково розкоментувати:

[[bridges.transports]]
    protocols = ["obfs4"]
    path = "/usr/bin/obfs4proxy"

Якщо бекенд obfs4proxy не встановлено:

sudo dnf install obfs4
which obfs4proxy

Перевіряємо транспортний протокол:

ps aux | grep obfs4

Тепер можна перезапустити роутер Arti та спробувати підключитись.

Віддалений сервер

З міркувань безпеки, в конфігурації сокету, можна зустріти наступне повідомлення:

# Set up the Arti program to run as a proxy.
[proxy]
# Default port to use when listening to SOCKS connections. We always
# listen on localhost.

В репозиторії можна знайти пропозиції реалізувати сповіщення з безпеки, при використанні хостів відмінних від localhost. Але бувають ситуації, коли проксі працює на локальному роутері, що відносно безпечно: адже до нього матимуть доступ тільки пристрої локальної мережі; або на віддаленому сервері з відповідним правилом фаєрвол.

Перечитавши реалізацію парсера цієї опції, вияснив, що вона таки підтримує вибіркові хости, при чому можна вказати декілька (вектором). Для цього, потрібно вказати хост і порт "рядком" з лапками, у форматі адреси сокета:

socks_listen = "xxx.xxx.xxx.xxx:9150"

Якби навіть цієї опції не було, я все одно обійшов би обмеження "без-програмним" рецептом. Наприклад, зовнішнім проксі на базі Nginx:

stream {
    server {
        listen a.a.a.a:9150;
        proxy_pass b.b.b.b:9150;
    }
}
  • a.a.a.a - сервер Nginx
  • b.b.b.b - сервер Arti

Порт на "зовнішньому" хості потрібно обов'язково обмежити засобами iptables, дозволивши потрібний явно (а краще - використовуючи й не стандартний порт)

ufw allow from a.a.a.a to b.b.b.b port 9150 proto tcp
  • a.a.a.a - хост клієнта
  • b.b.b.b - хост сервера

Системний сервіс

Сервіс systemd я пускаю від окремого користувача, до теки якого складатиму журнали і файл конфігурації:

sudo useradd -m arti

Приклад конфігурації для Debian є в репозиторії, але в мене вона інша:

[Unit]
Description=System Tor Service (Arti)
After=network.target
Wants=network.target

[Service]
Type=simple

User=arti
Group=arti

ExecStart=/usr/local/bin/arti --config /home/arti/config.toml -l warn proxy
ExecReload=/bin/kill -HUP ${MAINPID}

KillSignal=SIGINT
LimitNOFILE=16384

NoNewPrivileges=yes
PrivateTmp=yes
PrivateDevices=yes
ProtectHome=yes
ProtectSystem=full
CapabilityBoundingSet=CAP_NET_BIND_SERVICE

StandardOutput=file:///home/arti/debug.log
StandardError=file:///home/arti/error.log

[Install]
WantedBy=multi-user.target
  • systemctl restart arti - (пере)запустити сервер:
  • systemctl enable arti - авто-запуск при старті системи
  • systemctl status arti - перевірити статус служби

Підключення клієнтських застосунків

В клієнтах IRC, браузерах та інших застосунках - достатньо вказати (SOCKS5) хост/порт проксі-сервера Arti, стандартно:

  • 127.0.0.1:9150
  • [::1]:9150
  • або хост:порт віддаленого сервера з файлу конфігурації (socks_listen)

Налаштування браузера засобами PAC

Якщо метою користування Tor є анонімізація, то для фільтрації прямих з'єднань на Інтернет зручно встановити окремий браузер, вказавши в ньому єдиний проксі. Або/і скористатись маршрутизацією PAC. Вона дозволяє гнучко налаштовувати потрібні правила для окремих URL засобами JS. Варіант налаштування PAC у браузерах сімейства FireFox - описував на прикладі налаштувань проксі-сервера Yggstack.

Таким чином, вдається уникнути ідентифікації користувача Tor (або іншого проксі) в ареалах, де використання такого може бути заборонено. Наприклад, шляхом вбудованого на сайт зображення, файлу скриптів або стилів у код на сайті.

Утім, описаний вище спосіб запобігає лише одному способу виявлення з поміж багатьох. В цьому плані, браузер Tor - є більш привабливим, адже включає з коробки й інші засоби маскування відбитків пальців: динамічний розміру екрану, шрифти, політику cookies, JS, заголовків HTTP тощо.

Ізоляція середовища

Для більш фундаментальної ізоляції застосунків від спроби зловмисником спровокувати прямий запит в Інтерент, дивіться наступні матеріали:

Описані вище рішення дозволяють безпечно користуватись застосунками, які від початку не розроблялись з метою приватності: більшість клієнтів BitTorrent, криптографічних гаманців, та інші, що працюють за принципом Peer-to-Peer і реалізують технології DNS та PEX.

Тестування з'єднань

Перевірити роботу роутера можна запустивши його в терміналі з аргументом відлагодження:

arti --config /path/to/config.toml --log-level debug proxy

Перевірити активні порти:

netstat -tulpn | grep arti

Підключитись до потрібного вузла:

curl --socks5-hostname 127.0.0.1:9150 -I http://acetonemadzhxzi2e5tomavam6xpucdfwn2g35vrsz6izgaxv5bmuhad.onion/index.html

Контроль витоків трафіку

Реалізації журналів я не довіряю і додатково перевіряю трафік графічною утилітою Etherape:

apt install etherape
sudo etherape

Діагностика проблем

Якщо ви змінили мости і вони виявились не робочими - не поспішайте шукати нові. З коробки, Arti кешує попередні налаштування.

Переглядаючи журнал в режимі як мінімум INFO, можна побачити повідомлення:

INFO arti::subcommands::proxy: Sufficiently bootstrapped; proxy now functional. WARN tor_dirmgr::bootstrap: error while downloading error=error: Problem downloading directory object: Error while getting a circuit: Tried to find or build a tunnel 6 times, but all attempts failed

Тому я вирішив проблему скидання кешу видаленням директорії профілю:

rm -rf ~/.local/share/arti
  • у вас цей шлях може різнитися, в залежності від способу запуску роутера

Ймовірно, існує спосіб вимкнення кешування у файлі конфігурації (наприклад, оперуючи cache_dir і state_dir) але це сповільнить запуск роутера. Сподіваюсь, дана незручність є тимчасовістю версії 1.9.0, адже проєкт Arti - все ще перебуває в розробці.