gemlog/public/uk/arti-onion-router-with-tor-connection-over-yggdrasil.gmi
2026-02-02 05:33:51 +02:00

224 lines
No EOL
13 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Встановлення Onion-роутера Arti з підключенням до мережі Tor через Yggdrasil
Arti - це сучасна реалізація Onion-роутера мережі Tor мовою Rust:
=> https://gitlab.torproject.org/tpo/core/arti
Нижче інструкція зі встановлення та налаштування його проксі-сервера з підключенням до мережі через Yggdrasil (у якості VPN). При відповідному налаштуванні клієнтів, це дозволяє приховати факт користування мережею Tor а також підвищує конфіденційність всередині неї, адже вхідні вузли Tor бачитимуть IP адресу провайдера моста (bridge), а міст - бачитиме IPv6 мережі Yggdrasil (до якої в свою чергу, можна підключитися через інші мережі)
## Збірка з вихідного коду
При першій збірці програми на Rust, потрібно встановити середовище розробки:
=> install-latest-rust-version-on-linux.gmi Встановлення останньої версії Rust в Linux
Після чого, забираємо початковий код усіх компонентів Arti та компілюємо його з Сargo:
``` bash
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` можна видалити, щоб звільнити простір
## Конфігурація
Тут все просто. На сайті є готовий приклад файлу конфігурації з детальними коментарями до кожної опції:
=> https://gitlab.torproject.org/tpo/core/arti/-/blob/main/crates/arti/src/arti-example-config.toml
Для підключення до мережі Tor засобами Yggdrasil - достатньо лише вказати потрібні мости, наприклад з цього списку:
=> https://yggdrasil-network.github.io/services.html#tor-bridges
У своїй конфігурації, я також явно вказав атрибут `enabled`, щоб використовувати для підключення тільки мости зі списку bridges:
``` config.toml
# 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 = [
"[21b:321:3243:ecb6:a4cf:289c:c0f1:d6eb]:16728 $835FFE642EFA3BB7936663D2365A15D319FB6226",
"[21f:5234:5548:31e5:a334:854b:5752:f4fc]:9770 $6C4C89ABE4D06987AB1F51C06939410282A1BF58",
"[224:6723:7ae0:5655:e600:51c9:4300:a2fb]:9001 $F873E91048B40656694BE94ACAB6F0D32CAF8E17",
]
```
=> https://metrics.torproject.org/rs.html Перевірити статус мостів
### Віддалений сервер
З міркувань безпеки, в конфігурації сокету, можна зустріти наступне повідомлення:
> # 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:
=> https://gitlab.torproject.org/tpo/core/arti/-/issues/1636
Але бувають ситуації, коли проксі працює на локальному роутері, що відносно безпечно: адже до нього матимуть доступ тільки пристрої локальної мережі; або на віддаленому сервері з відповідним правилом фаєрвол. Перечитавши реалізацію парсера цієї опції, вияснив, що вона таки підтримує вибіркові хости, при чому можна вказати декілька (вектором). Для цього, потрібно вказати хост і порт "рядком" з лапками, у форматі адреси сокета:
```
socks_listen = "xxx.xxx.xxx.xxx:9150"
```
Якби навіть цієї опції не було, я все одно обійшов би обмеження "без-програмним" рецептом. Наприклад, зовнішнім проксі на базі Nginx:
=> /en/tcp-streaming-over-nginx.gmi TCP streaming over Nginx
Порт на "зовнішньому" хості потрібно обов'язково обмежити засобами iptables, дозволивши потрібний явно (а краще - використовуючи й не стандартний порт)
``` bash
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 я пускаю від окремого користувача, до теки якого складатиму журнали і файл конфігурації:
``` bash
sudo useradd -m arti
```
Приклад конфігурації для Debian є в репозиторії:
=> https://gitlab.torproject.org/tpo/core/arti/-/blob/main/debian/systemd/arti.service
Але в мене вона інша:
```
[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
#ReadOnlyDirectories=/
#ReadWriteDirectories=-/var/lib/arti
#ReadWriteDirectories=-/var/log/arti
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
StandardOutput=file:///home/arti/debug.log
StandardError=file:///home/arti/error.log
[Install]
WantedBy=multi-user.target
```
Щоб (пере)запустити сервер:
``` bash
systemctl restart arti
```
Авто-запуск при старті системи:
``` bash
systemctl enable arti
```
Перевірити статус служби:
``` bash
systemctl status arti
```
## Підключення клієнтських застосунків
В клієнтах IRC, браузерах та інших застосунках - достатньо вказати (SOCKS5) хост/порт проксі-сервера Arti, стандартно:
* 127.0.0.1:9150
* [::1]:9150
* або хост:порт віддаленого сервера з файлу конфігурації (socks_listen)
### Налаштування браузера засобами PAC
Якщо метою користування Tor є анонімізація, то для фільтрації прямих з'єднань на Інтернет зручно встановити окремий браузер, вказавши в ньому єдиний проксі. Або/і скористатись маршрутизацією PAC. Вона дозволяє гнучко налаштовувати потрібні правила для окремих URL засобами JS.
Варіант налаштування PAC у браузерах сімейства FireFox - описував на прикладі налаштувань проксі-сервера Yggstack:
=> safe-yggdrasil-websites-browsing-with-yggstack.gmi Безпечний перегляд сайтів Yggdrasil з Yggstack
Таким чином, вдається уникнути ідентифікації користувача Tor (або іншого проксі) в ареалах, де використання такого може бути заборонено. Наприклад, шляхом вбудованого на сайт зображення, файлу скриптів або стилів у код на сайті.
Утім, описаний вище спосіб запобігає лише одному способу виявлення з поміж багатьох. В цьому плані, браузер Tor - є більш привабливим, адже включає з коробки й інші засоби маскування відбитків пальців: динамічний розміру екрану, шрифти, політику cookies, JS, заголовків HTTP тощо.
### Ізоляція середовища
Для більш фундаментальної ізоляції застосунків від спроби зловмисником спровокувати прямий запит в Інтерент, дивіться наступні матеріали:
=> linux-isolation-from-direct-internet-connections-based-on-qemu-virtual-machine-manager-with-vsock.gmi Ізоляція Linux від прямих Інтернет з'єднань на базі QEMU / Virtual Machine Manager з VSOCK
=> filter-outgoing-connections-with-ufw.gmi Обмеження вихідних з'єднань на Інтернет з ufw
=> enhancing-privacy-in-linux-apps.gmi Підвищення рівня приватності в застосунках Linux (не панацея але приверне увагу до очевидних проблем)
Описані вище рішення дозволяють безпечно користуватись застосунками, які від початку не розроблялись з метою приватності: більшість клієнтів BitTorrent, криптографічних гаманців, та інші, що працюють за принципом Peer-to-Peer і реалізують технології DNS та PEX.
## Тестування з'єднань
Перевірити роботу роутера Arti можна запустивши його в терміналі з аргументом відлагодження:
``` bash
arti --log-level debug ...
```
* або краще `-l trace`
Реалізації журналів я не довіряю і додатково перевіряю трафік графічною утилітою Etherape:
``` bash
apt install etherape
sudo etherape
```
Активні інтерфейси можна перевірити командою:
``` bash
netstat -tulpn | grep arti
```
## Діагностика проблем
Якщо ви змінили мости і вони виявились не робочими - не поспішайте шукати нові. З коробки, 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
Тому я вирішив проблему скидання кешу видаленням директорії профілю:
``` bash
rm -rf ~/.local/share/arti
```
* у вас цей шлях може різнитися, в залежності від способу запуску роутера
Ймовірно, існує спосіб вимкнення кешування у файлі конфігурації (наприклад, оперуючи `cache_dir` і `state_dir`) але це сповільнить запуск роутера. Сподіваюсь, дана незручність є тимчасовістю версії 1.9.0, адже проєкт Arti - все ще перебуває в розробці.
## Посилання
=> https://devzone.org.ua/post/vstanovlennia-onion-routera-arti-z-pidkliuchenniam-do-merezi-tor-cherez-yggdrasil Веб-адаптація цього матеріалу з коментарями на DevZone
### Дивіться також
=> rust-cross-compilation-with-cross-crate.gmi Простий спосіб крос-компіляції Rust з cross