gemlog/public/uk/arti-onion-router-with-tor-connection-over-yggdrasil.gmi

185 lines
No EOL
11 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-роутера мовою 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
```