devzone.org.ua/post/bezpechnyy-perehliad-saytiv-yggdrasil-z-yggstack.md
2025-11-01 14:28:20 +02:00

112 lines
No EOL
10 KiB
Markdown
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.

# Безпечний перегляд сайтів Yggdrasil з Yggstack
Враховуючи специфіку сучасних Веб-стандартів, при відвідуванні веб-сайтів у мережі [Yggdrasil](https://devzone.org.ua/post/yggdrasil-mereza-z-detsentralizovanym-routynhom), можливі та цілком ймовірні фонові запити до зовнішніх Інтернет вузлів. Таким чином, може не контрольовано здійснюватись підвантаження сторонніх ресурсів сторінки, зокрема - графіки, стилів, скриптів та іншого. Наприклад, це може бути випадкове або спеціальне звернення веб сайту до ресурсів у зоні `.ru` (зокрема Yandex) або ви просто не бажаєте витоків персональної IP адреси до будь-яких вузлів Інтернет, наприклад - користуючись Yggdrasil в режимі інкогніто.
Нижче наведу невеличку нотатку, про те, як особисто я фільтрую не бажаний вихідний трафік з використанням [SOCKS5](https://uk.wikipedia.org/wiki/SOCKS) проксі [Yggstack](https://github.com/yggdrasil-network/yggstack) і окремим браузером для навігації в цій мережі - [LibreWolf](https://librewolf.net/), на прикладі системи Fedora Linux.
Звертаю увагу, що дана інструкція не включає кроки з анонімізації - маскування відбитків, оновлення сесій, cookies, вимкнення акселерації та іншого. Це окрема тема, для якої існують спеціалізовані софт, додатки і навички. Тут ми просто контролюємо вихідний трафік в режимі Yggdrasil-only.
## Yggstack
Yggstack - це невеличкий проксі сервер на базі Netstack, що містить в собі ізольований екземпляр вузла Yggdrasil (так само, як [Yggmail](https://devzone.org.ua/post/yggmail-mesendzer-z-poshtovym-interfeysom)) і надає локальний інтерфейс для підключення до нього браузеру (чи іншого додатку) для проксування в діапазоні `0200::/7`.
### Залежності
Тут достатньо встановити актуальну версію [Go](https://uk.wikipedia.org/wiki/Go_(мова_програмування)). Про це я вже писав у матеріалі [Встановлення останньої версії Go в Debian](https://devzone.org.ua/post/vstanovlennia-ostannyoyi-versiyi-go-v-debian).
### Встановлення
Збираємо приблизно так само, як Yggdrasil:
1. `git clone https://github.com/yggdrasil-network/yggstack.git`
2. `cd yggstack` - переходимо в робочу теку
3. `./build` - компілюємо
4. `sudo ./yggstack -genconf > /etc/yggstack.conf` - генеруємо конфігурацію
* якщо користуєтесь в оверлеї, також не забудьте вказати [екзіт-ноду](https://publicpeers.neilalexander.dev/) в `Peers`
6. `sudo mv yggstack /usr/local/bin/yggstack` - копіюємо в штатну директорію бінарних програм
7. `sudo restorecon -rv /usr/local/bin/yggstack` - корегуємо доступи на виконання
### Systemd
Оскільки Yggstack, в принципі, створений щоб запускатись без `tun` інтерфейсу і `root`, створимо системний сервіс з виконанням від поточного системного користувача. Якщо не плануєте його запускати на фоні, можна цей крок пропустити і запуститись командою:
``` bash
/usr/local/bin/yggstack -useconffile /etc/yggstack.conf -socks 127.0.0.1:1080
```
Або ж створіть файл конфігурації командою `sudo nano /etc/systemd/system/yggstack.service`, додавши наступний вміст:
``` yggstack.service
[Unit]
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=USER
Group=GROUP
ExecStart=/usr/local/bin/yggstack -useconffile /etc/yggstack.conf -socks 127.0.0.1:1080
StandardOutput=null
StandardError=null
Restart=on-failure
[Install]
WantedBy=multi-user.target
```
* `USER`/`GROUP` змінюємо на актуальні
* `StandardOutput` і `StandardError` можна вказати як `file:///path/to/log`, якщо потрібне ведення журналу у файл
* `sudo systemctl daemon-reload` - потрібно якщо файл вже існує (оновлення)
* `sudo systemctl restart yggstack` - якщо потрібен автозапуск при старті системи
* `sudo systemctl restart yggstack` - запуск (в режимі рестарт)
* `sudo systemctl status yggstack` - перевіряємо чи сервіс працює
### Браузер
Як писав вище, для цієї мережі я користуюсь окремим браузером LibreWolf з трохи іншим пресетом, для зручності. В принципі, ті само кроки актуальні й для FireFox.
1. Переходимо в `Settings` -> `Proxy` / `Network settings` -> `Manual proxy configuration`
2. В `SOCKS Host` пишемо наші локальні хост `127.0.0.1` і порт `1080`
3. Переконуємось, щоб версія була відмічена як `SOCKS v5`
#### Конфігурація PAC
Я додатково користуюсь файлом [PAC](https://en.wikipedia.org/wiki/Proxy_auto-config), щоб зароутити всі запити, що не відносяться до мережі Yggdrasil на фіктивний проксі, щоб швидше прискорити відвантаження сторінки. Інакше браузер буде намагатись відрезольвити ресурси з незначною затримкою.
Цього можна не робити, адже Yggstack і так відфільтрує подібні запити, оскільки він працює виключно в діапазоні `IPv6`/`0200::/7`. Але приклад нижче лишу, якщо ви хочете користуватись цим проксі на обидві мережі, закоментувавши останній `return`:
``` yggstack.pac
function FindProxyForURL(url, host)
{
// спрямовуємо трафік Yggdrasil по регулярному виразу на проксі Yggstack
// цей приклад також включає доменні зони .ygg якщо користуєтесь Alfis DNS
if (/^0{0,1}[2-3][a-f0-9]{0,2}:/.test(host) || /\.ygg$/.test(host)) {
return 'SOCKS5 127.0.0.1:1080';
}
return 'PROXY 127.0.0.1:123'; // видаліть цей рядок, якщо хочете працювати з усіма мережами
// або вкажіть окремий проксі для цих мереж, наприклад Tor
}
```
* шлях до даного файлу потрібно вказати у полі `Automatic proxy configuration URL` у форматі `file:///path/to/file` (якщо зберігаєте його локально)
* також, в мене працює окремий від Yggstack інтерфейс Yggdrasil для інших служб, таких як Bittorrent і радіо Rhythmbox. Тому для основного браузеру Firefox, я створив інший файл PAC з протилежними умовами, щоб виключити випадкове звернення до ресурсів Yggdrasil з нього.
* щоб не плутатись в обох клонах Firefox, я користуюсь різними темами оформлення.
#### Тестування підключення
Відкриваємо будь який сайт з каталогу http://[21e:a51c:885b:7db0:166e:927:98cd:d186], переходимо в режим дебагу `Ctrl+Shift+i` та дивимось заблоковані запити, якщо такі є.
* щоб вимкнути форсований редірект `HTTP` > `HTTPS`, в `about:config` встановіть опцію `browser.fixup.fallback-to-https`:`false`
Для аналізу системного трафіку, мені подобається TUI утиліта `iptraf` (`iptraf-ng`), або GUI `etherape`, [Sniffnet](https://sniffnet.net/) та інші.
### Додаткова фільтрація
Опціонально, можна додати правила на `iptables`, особливо це зручно, якщо користуєтесь окремим контейнером:
``` bash
ufw default deny outgoing
ufw allow out to PUBLIC_PEER_IP
ufw allow out to 0200::/7 from any
```
* на Fedora, замість CLI `ufw`, для `firewalld` мені зручніше налаштовувати потрібні зони через GUI за допомогою `firewall-config`
Також не зайвим буде використання вихідного роутера, наприклад на базі [OpenWRT](https://uk.wikipedia.org/wiki/OpenWrt), але на мою думку, додаткова фільтрація саме тут - не критична, оскільки вбудованих засобів браузеру, для поставлених вище задач, цілком вистачає.