Безпечний перегляд сайтів Yggdrasil з Yggstack


Враховуючи специфіку сучасних Веб-стандартів, при відвідуванні веб-сайтів у мережі Yggdrasil, можливі та цілком ймовірні фонові запити до зовнішніх Інтернет вузлів. Таким чином, може не контрольовано здійснюватись підвантаження сторонніх ресурсів сторінки, зокрема - графіки, стилів, скриптів та іншого. Наприклад, це може бути випадкове або спеціальне звернення веб сайту до ресурсів у зоні .ru (зокрема Yandex) або ви просто не бажаєте витоків персональної IP адреси до не відомих вузлів Інтернет, наприклад - користуючись Yggdrasil в режимі меш / інкогніто.


Нижче наведу невеличку нотатку, про те, як особисто я фільтрую не бажаний вихідний трафік з використанням SOCKS5 проксі Yggstack і окремо налаштованим браузером для навігації в мережі - LibreWolf, на прикладі системи Fedora Linux.


Звертаю увагу, що дана інструкція не включає кроки з анонімізації - маскування відбитків, оновлення сесій, cookies, вимкнення акселерації та іншого. Це окрема тема, для якої існують спеціалізовані софт, додатки і навички. Тут ми просто контролюємо вихідний трафік в режимі Yggdrasil-only.


Yggstack


Yggstack - це невеличкий проксі сервер на базі Netstack, який містить в собі ізольований екземпляр вузла Yggdrasil (так само, як Yggmail) і надає локальний інтерфейс для підключення до нього браузеру (чи іншого додатку) для проксування в діапазоні адрес IPv6 0200::/7.


Залежності


Тут достатньо встановити актуальну версію Go. Про це я вже писав у матеріалі:

Встановлення останньої версії Go в Debian


Встановлення


Збираємо приблизно так само, як Yggdrasil:


git clone https://github.com/yggdrasil-network/yggstack.git && cd yggstack
./build
sudo ./yggstack -genconf > /etc/yggstack.conf
sudo mv yggstack /usr/local/bin/yggstack
sudo restorecon -rv  /usr/local/bin/yggstack

Якщо користуєтесь в оверлеї, також не забудьте вказати вихідний вузол до "Peers":

https://publicpeers.neilalexander.dev


Systemd


Оскільки Yggstack, в принципі, створений щоб запускатись без tun інтерфейсу і root, створимо системний сервіс з виконанням від поточного системного користувача. Якщо не плануєте його запускати на фоні, можна цей крок пропустити і запуститись командою:


/usr/local/bin/yggstack -useconffile /etc/yggstack.conf -socks 127.0.0.1:1080

Або ж створіть файл конфігурації командою:

sudo nano /etc/systemd/system/yggstack.service

та додайте наступний вміст:

[Unit]
After=network-online.target
Wants=network-online.target

[Service]
Type=simple

# вкажіть актуальні значення для User/Group
User=USER
Group=GROUP

ExecStart=/usr/local/bin/yggstack -useconffile /etc/yggstack.conf -socks 127.0.0.1:1080

# можна вказати як "file:///path/to/log", якщо потрібне ведення журналу у файл
StandardOutput=null
StandardError=null

Restart=on-failure

[Install]
WantedBy=multi-user.target

Керування процесом відбувається наступними командами:


systemctl daemon-reload
systemctl enable yggstack
systemctl start yggstack

Браузер


Як писав вище, для цієї мережі я користуюсь окремим браузером LibreWolf з трохи іншим пресетом, для зручності. В принципі, ті само кроки актуальні й для FireFox.



Конфігурація PAC


Я додатково користуюсь файлом PAC:

https://en.wikipedia.org/wiki/Proxy_auto-config


Цей формат дозволяє в рамках браузеру перенаправити запити, що не відносяться до мережі Yggdrasil на "фіктивний" проксі, щоб швидше прискорити відвантаження сторінки.

Інакше браузер буде намагатись відрезольвити ресурси з незначною затримкою.


Цього можна не робити, адже Yggstack і так відфільтрує подібні запити, оскільки він працює виключно в діапазоні IPv6 0200::/7. Але приклад нижче лишу, якщо ви захочете користуватись цим проксі на обидві мережі, закоментувавши останній "return":


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
}

Тестування підключення


Відкриваємо будь який сайт з каталогу, наприклад:

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, тощо.


Фаєрвол


Debian


Варто додати правила на iptables, особливо це зручно, якщо користуєтесь окремим контейнером:


ufw default deny outgoing
ufw allow out to PUBLIC_PEER_IP
ufw allow out to 0200::/7 from any

Fedora


Для firewalld я надаю перевагу GUI firewall-config.


Читайте також


Окремі профілі Firefox на базі спільного релізу

psocks: моє бачення фільтруючого проксі

Мій форк i2pdbrowser для приватно-орієнтованого Веб

Спроба проксування FreeTube через Yggdrasil

Обмеження вихідних з'єднань на Інтернет з ufw

Ізоляція Linux від прямих Інтернет з'єднань на базі QEMU / Virtual Machine Manager з VSOCK

Yggdrasil - мережа з децентралізованою маршрутизацією



/uk/