mirror of
https://codeberg.org/postscriptum/devzone.org.ua.git
synced 2026-02-18 22:02:41 +00:00
initial commit
This commit is contained in:
commit
d4994cde4c
61 changed files with 7044 additions and 0 deletions
112
post/bezpechnyy-perehliad-saytiv-yggdrasil-z-yggstack.md
Normal file
112
post/bezpechnyy-perehliad-saytiv-yggdrasil-z-yggstack.md
Normal file
|
|
@ -0,0 +1,112 @@
|
|||
# Безпечний перегляд сайтів 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), але на мою думку, додаткова фільтрація саме тут - не критична, оскільки вбудованих засобів браузеру, для поставлених вище задач, цілком вистачає.
|
||||
Loading…
Add table
Add a link
Reference in a new issue