From 6d1ab0feefe7d8e028315f96f100959994e95ef9 Mon Sep 17 00:00:00 2001 From: postscriptum Date: Sun, 30 Nov 2025 07:23:36 +0200 Subject: [PATCH] add `arti-onion-router-with-tor-connection-over-yggdrasil.gmi` --- ...ter-with-tor-connection-over-yggdrasil.gmi | 185 ++++++++++++++++++ public/uk/index.gmi | 1 + 2 files changed, 186 insertions(+) create mode 100644 public/uk/arti-onion-router-with-tor-connection-over-yggdrasil.gmi diff --git a/public/uk/arti-onion-router-with-tor-connection-over-yggdrasil.gmi b/public/uk/arti-onion-router-with-tor-connection-over-yggdrasil.gmi new file mode 100644 index 0000000..4c36521 --- /dev/null +++ b/public/uk/arti-onion-router-with-tor-connection-over-yggdrasil.gmi @@ -0,0 +1,185 @@ +# Встановлення Onion-роутера Arti з підключенням до мережі Tor через Yggdrasil + +Arti - це сучасна реалізація Onion-роутера мовою Rust: +=> https://gitlab.torproject.org/tpo/core/arti + +Нижче інструкція зі встановлення та налаштування його проксі-сервера з підключенням до мережі Tor через 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/crates/arti +cargo build --release +sudo install target/release/arti /usr/local/bin/arti +``` +* тут ми збираємо тільки компонент `arti` та ставимо його в системну теку для подальшого запуску з systemd +* після виконання команди `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`, щоб використовувати для підключення тільки мости зі списку: + +``` 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", +] +``` + +### Віддалений сервер + +З міркувань безпеки, в конфігурації сокету, можна зустріти наступне повідомлення: + +> # 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. + +В репозиторії можна знайти пропозиції зробити явні сповіщення: +=> 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/bin/arti --config /home/arti/config.toml -l warn proxy +ExecReload=/bin/kill -HUP ${MAINPID} + +KillSignal=SIGINT +LimitNOFILE=16384 + +# Hardening +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 +``` +* `systemctl restart arti` - (пере)запустити сервер +* `systemctl enable arty` - авто-запуск при старті системи +* `systemctl status arty` - перевірити статус служби + +## Підключення клієнтських застосунків + +В клієнтах IRC, браузерах та інших застосунках - достатньо вказати (SOCKS5) хост/порт проксі-сервера Arti, стандартно це: + +* 127.0.0.1:9150 +* [::1]:9150 + +або хост:порт віддаленого сервера з файлу конфігурації (socks_listen) + +### Налаштування браузера засобами PAC + +Якщо метою користування Tor - є анонімізація, для фільтрації прямих з'єднань на Інтернет у браузерах сімейства FireFox, зручно користуватись маршрутизацією 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, криптографічні гаманці (окрім відомого мені GOST/I2P), та інші застосунки, що працюють за принципом Peer-to-Peer і реалізують технології DNS та PEX. + +## Тестування з'єднань + +Перевірити роботу роутера можна запустивши його в терміналі з аргументом відлагодження: + +``` bash +arti --log-level debug ... +``` +* або краще `--log-level trace` + +Реалізації журналів я не довіряю і додатково перевіряю трафік та його тип графічною утилітою Etherape: + +``` bash +apt install etherape +sudo etherape +``` + +Поточні інтерфейси дивимось командою: + +``` bash +netstat -tulpn | grep arti +``` \ No newline at end of file diff --git a/public/uk/index.gmi b/public/uk/index.gmi index 9bdea9a..cf71956 100644 --- a/public/uk/index.gmi +++ b/public/uk/index.gmi @@ -16,6 +16,7 @@ ### Нотатки +=> arti-onion-router-with-tor-connection-over-yggdrasil.gmi 2025-11-30 Встановлення Onion-роутера Arti з підключенням до мережі Tor через Yggdrasil => btracker-environment-deployment.gmi 2025-11-28 Інструкція з розгортання інфраструктури βtracker => social-oriented-vsftpd-server-setup.gmi 2025-11-26 Організація багатокористувацького файло-обмінника на базі FTP / vsftpd => about-gemlog-administration.gmi 2025-11-21 Про адміністрування блогів Gemini