# Підвищення рівня приватності в застосунках Linux

Цей список щойно створив для себе, на випадок організації чистої системи, свого роду нагадування / чек-лист по якому пройтись і не забути вимкнути дірки в плані мережних витоків. Це не анти-деанон, але частково може бути корисним у даному векторі, поряд з адблоками та іншими костилями. Для більш суворої фільтрації трафіку, дивіться нотатки:

=> filter-outgoing-connections-with-ufw.gmi Обмеження вихідних з'єднань на Інтернет з ufw
=> linux-isolation-from-direct-internet-connections-based-on-qemu-virtual-machine-manager-with-vsock.gmi Ізоляція Linux від прямих Інтернет з'єднань на базі QEMU / Virtual Machine Manager з VSOCK

## Rhythmbox

Через плагін "Cover art search" хтось знає що ви слухаєте локально - вимикаємо:

=> enhancing-privacy-in-linux-apps/rhythmbox-сover-art-search-plugin.png Скріншот

## Firefox

HTTP/HTML - вони такі. Для різних завдань - у мене різні браузери, в цілому я користуюсь PAC:

=> safe-yggdrasil-websites-browsing-with-yggstack.gmi Безпечний перегляд сайтів Yggdrasil з Yggstack
* чи варто нагадувати про реферальні заголовки, розмір вікна, користувацький агент і "відбитки"? =)

## DNS

Для резольву доменів, я користуюсь власним проксі-сервером.

### Alfis

Alfis DNS - це альтернативна система реєстрації доменів в блокчейн, що також включає в себе вбудований проксі-сервер для резольву локальних та глобальних доменів Інтернет. Таким чином, через нього відбувається визначення IP для усіх потрібних мені мереж. По цій темі, я написав декілька матеріалів:

=> alfis-dns-domain-registration-in-blockchain.gmi Alfis DNS - реєстрація домену в блокчейн
=> alternative-alfis-dns-branch-with-mycelium-network-support.gmi Альтернативна гілка Alfis DNS з підтримкою Mycelium
=> my-alfis-dns-preset-on-yggdrasil-mycelium-router.gmi Мій пресет Alfis DNS на роутері Yggdrasil / Mycelium

В контексті теми цього допису, звертаю увагу на стандартний файл конфігурації, в якому я вимикаю всі не явні DNS і додаю статичні внутрішньо-мережні IP Yggdrasil в парі з опцією yggdrasil_only (або yggdrasil_mode для гілки Yggdrasil/Mycelium):

```
[net]

peers = [
    # вимикаю не явні, міксовані DNS (постачаються в стандартній конфігурації)
    # "peer-v4.alfis.name:4244",
    # "peer-v6.alfis.name:4244",
    # "peer-ygg.alfis.name:4244",

    # додаю визначені мною вручну адреси пірів
    # * до списку треба додати актуальні вузли на момент конфігурації резольвера
    "[202:68d0:f0d5:b88d:1d1a:555e:2f6b:3148]:4244",
    "[200:f8e5:2383:c1f8:7c73:8e74:2a5e:197e]:4244",
    "[200:f8e5:2383:c1f8:7c73:8e74:2a5e:197e]:4244",
    "[200:31b6:1c3a:3a1c:d322:3ed7:e109:4b3]:4244",
    "[200:1106::a702:9841:e607:9b3]:4244",
    "[208:84:68:55:2f91:8484:8d60:2fca]:4244",
    "[208:25:40:bd:6ea9:89fc:ac75:87be]:4244",
    "[208:62:45:62:59b8:f1a2:62ca:f87c]:4244",
    "[225:ca89:40a8:611e:78b8:ab81:999a:d4d7]:4244",
    "[301:84f7:4bc0:2f3a::53]:4244"
]

# стандартна гілка (https://github.com/Revertron/Alfis)
yggdrasil_only = true

# якщо гілка mycelium-network-mode
# https://github.com/YGGverse/Alfis/tree/mycelium-network-mode
#
# yggdrasil_mode = true
# mycelium_mode = true
```
* якщо хоча б один пір зі списку буде онлайн, цього достатньо для ініціації
* також звертаємо увагу на net.forwarders, net.bootstraps і net.public, net.listen

## BitTorrent

### qBittorrent

Зненацька помітив, що на бінді IPv6 цілком можливі конекти через Веб-сокет IPv4:

=> unexpected-connection-leaks-in-qbittorrent.gmi Потенційні витоки з'єднань на Інтернет в qBittorrent

# BitCoin

Тема стосується усіх похідних BitCoin, включно з соціалками на базі цього блокчейну.

Суть в тому, що подібні програми як правило працюють на двох стеках IPv4+IPv6. При ініціальному запуску та в процесі роботи, вони можуть періодично запитувати публічну адресу з різних серверів типу wtfismyip.com або внутрішньої мережі з інших пірів для створення ідентифікатора DHT. Тобто є певний алгоритм створення "основної" адреси за NAT, яку можна побачити наприклад в треї qBittorrent.

Тому якщо ви не пускаєте "гаманці" в ізольованій від мережного адаптера віртуалці (наприклад з VSOCK) і крутите поряд з IPv4 VPN якийсь інтерфейс типу IPv6 Yggdrasil, то може "засвітитись" зв'язок користувача з mesh, надіславши його IPv6 пірам у якості анонсу поряд з однойменним портом IPv4 за VPN.

Вирішується це різними аргументами фільтрів типу `-onlynet`, `-connect`, `-externalip` і так далі, в залежності від конкретного форку та його версії.

### rqbit

Мій сабж описаний в рамках тікету #469:

=> https://github.com/ikatson/rqbit/issues/469 [librqbit] unexpected peers connection #469
* проблема в тому, що клієнт інтерактує з пірами через PEX, навіть якщо DHT вимкнено

Оскільки ледачий, цю проблему поки що "вирішив" засобами "blocklist".

## PDF

Формат PDF є цілком та повністю дірявим:

* мета-інформація про рушій та браузер, в якому було згенеровано файл
* можливість вбудованого віддаленого вмісту (наприклад, зображення)
* JavaScript, тощо

Конкретні налаштування з фільтрації залежатимуть від бекенду операційної системи та клієнта.

Деякі тематичні матеріали на цю тему:

=> https://www.reddit.com/r/PrivacyGuides/comments/tk14jn/opening_pdfs_securely/ Opening PDFs securely
=> https://superuser.com/questions/893092/can-pdfs-contain-resources-that-are-loaded-from-the-internet Can PDFs contain resources that are loaded from the internet?
=> https://wiki.scribus.net/canvas/How_to_enhance_your_PDF_forms_with_JavaScript How to enhance your PDF forms with JavaScript
=> https://www.ghacks.net/2021/05/05/how-to-disable-javascript-in-pdf-documents-in-firefox/ How to disable JavaScript in PDF documents in Firefox

## Xash3D / FWGS

### Half-Life

Аудит рушія та самої гри на предмет відбитків та витоків я не проводив, але в контексті приватної гри по локалці Yggdrasil, щонайменше варто звернути увагу на опцію лаунчера "Configuration" > "Multiplayer" > "Customize" > "Adv options" > "Allow download":

=> enhancing-privacy-in-linux-apps/xash3d-fwgs-fast-download-option.png Скріншот (потрібно зняти хрестик)
* це (ймовірно) дозволить запобігти прямим з'єднанням при завантаженні кастомних карт і скінів

Окремо, я вимикаю мікрофон, не знаю чи він дійсно вимикається, але так:

``` valve/game.cfg
voice_enable 0
```

Якщо десь ділимось файлами, не забуваймо прибрати особисте сміття зі Steam:
=> prepare-steam-half-life-game-asset-for-the-bittorrent-release.gmi Підготовка ігрових файлів Half-Life (Steam) для релізу BitTorrent

Нагадаю, що для цього рушія було створено окремі гілки для оверлейного і гібридного режимів. Вони включають адаптації для локальної гри (зокрема локальні майстер-сервери) а звідти - підвищену приватність:

=> https://github.com/YGGverse/xash3d-fwgs/branches
* утім наразі, вони майже не розвиваються а їх апстрім - відстає від офіційних релізів (зараз не до ігор)

Детальніше про рушій Xash3D / FWGS в контексті Half-Life, також можна почитати тут:

=> half-life-on-linux-using-xash3d-fwgs-engine.gmi Half-Life в Linux на базі рушія Xash3D / FWGS

## FreeTube / Invidious

В мережі Yggdrasil періодично з'являються експериментальні інстанси Invidious. Одного разу, мені стало цікаво перейти в режим Yggdrasil-only. Обравши відповідний проксі я помітив, що через мої налаштування фільтрації трафіку, половина функцій перестає працювати. Власне, я не розбирався як саме працює цей "приватно-орієнтований клієнт", але на практиці виходить так, що адміністратор Invidious просто налаштовує веб-проксі, забуваючи про інші складові API. Для користувача FreeTube (який обрав проксі та не заблокував трафік на інші вузли) все виглядатиме заплановано, але на практиці - трафік йтиме кудою завгодно.

Сам я все ще користуюся цим клієнтом, але для інших потреб: формування приватних підписок без підмішування туди рекламних трендів Google. Просто майте на увазі, що цей застосунок в його поточній реалізації більше підходить для обходу блокувань, а не деперсоналізації і тим більше анонімізації користувача.

Стосовно додатку FreeTube, раніше я писав про нього невеличкий огляд:
=> freetube-the-private-youtube-client.gmi FreeTube - приватний перегляд YouTube

## VSCode

Тут, мабуть, немає сенсу зупинятись, адже "електронний" VSCode - нашпигований телеметрією та різними API синхронізації додатків. Утім, на згадку, додам одне виключення: для комерційних проєктів, я користуюсь додатком обліку часу Wakatime:

=> https://wakatime.com
=> https://open-vsx.org/extension/WakaTime/vscode-wakatime

По суті, цей (доволі зручний) додаток надсилає докладну статистику по файлам, операційній системі та всьому іншому в рамках проєкту - щоб окрім загального звіту по часу, можна було проаналізувати свою активність по мовам програмування та всьому іншому. Якщо працюємо з різними "приватними" програмами і не хочемо, щоб про це знав увесь світ (навіть якщо вимкнули галку поширення з усіма) - вимикаємо додаток і для роботи пускаємо окремий контейнер VSCode / VSCodium.

## IRC

### Halloy

Стандартно, цей клієнт дозволяє прев'ю віддаленого вмісту (ака мікро-розмітка) - у приватних мережах, це потенційний де-анон, вимикаємо:

``` config.toml
[preview]
enabled = false
```

Також вимикаю функцію передачі файлів, оскільки та - може використовувати пасивний режим:

``` config.toml
[file_transfer]
enabled = false
```

* Я особисто не перевіряв, чи вбудована реалізація Halloy "обгортає" згадані вище сокети, якщо так, то подібну функціональність можна не вимикати.

### ZNC

Нещодавно поставив собі баунсер:

=> znc-irc-bouncer-setup.gmi Встановлення та налаштування IRC-баунсера ZNC в Linux

У цьому гайді, згадується релевантний пункт з вимикання модуля "simple_away", що може використовуватись для типу атак, що базуються на таймінг-трекінгу:

=> znc-irc-bouncer-setup/simple-away-module.png Модуль "simple_away" в ZNC (скріншот)

### soju

Ще один, більш сучасний, баунсер:

=> https://soju.im

Він застосовує зміну статусу "away" за замовченням. Вимикається це командою на прикладі окремої мережі:

``` irc
/msg BouncerServ network update ID -auto-away false
```
* ID - назва або URL мережі

## XMPP

Протокол залежний від DNS, для Yggdrasil існують певні інтеграції, але я поки не розібрався для чого вони і чи впливають якимось чином на підвищення конфіденційності при користуванні XMPP в рамках цієї мережі:

=> https://github.com/norayr/barev Barev - Bonjour like Pidgin/libpurple plugin & protocol for Yggdrasil network

### Dino

Тут власне просто нагадаю, що додаток надає опції приховування індикації написання відповіді, різних статусів. Як він обробляє зовнішю графіку і чи підтримує проксі - поки не знаю.

## Monero

Якось недавно запустив у якості тестів Monero і був приємно здивований функціональністю GUI гаманця. Після того як біржа з моїми донатами накрилась, я перекочував на локальний гаманець, обравши цю валюту в якості основної. За одно, почав розбирати гаманець на технічні деталі, в своєму репертуарі.

Здивувало, що хоч ця валюта позиціонується як приватна, з приватного в неї - лише модель транзакцій. Конекти при цьому йдуть на Інтернет DNS (сіди). Почав копати рішення I2P, але рішень тому немає, все лише тільки в стадії розвитку, щонайменше саме для цікавого мені формату GUI:

=> https://bounties.monero.social/posts/32/140-196m-i2p-baked-into-the-monero-gui 140.196ɱ | i2p baked into the monero GUI
=> https://github.com/everoddandeven/monero-gui/tree/feature/anonymity-networks Гілка на GitHub

## Оверлейні мережі

### Yggdrasil

Випадково наткнувся на слушне зауваження:

> клиент сети прослушивает все сетевые интерфейсы в поисках локальных пиров и всегда готов к ним подключиться. Чтобы часть трафика не шла через возможных соседей, необходимо в том же файле конфигурации полностью отключить прослушивание всех интерфейсов. Для этого секцию MulticastInterfaces необходимо оставить пустой. По умолчанию в ней прописано «.*»

Для цього в конфігі видаляємо стандартний об'єкт масиву:

``` bash
MulticastInterfaces: [
    {
        Regex: .*
        Beacon: true
        Listen: true
        Password: ""
    }
]
```

і лишаємо:

``` bash
MulticastInterfaces: []
```

=> http://[222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c]/yggdrasil:connect_through_tor#%D0%B4%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B8_%D0%B0%D0%BD%D0%BE%D0%BD%D0%B8%D0%BC%D0%BD%D0%BE%D1%81%D1%82%D0%B8 Анонимное подключение к сети: Дополнительные настройки анонимности
=> http://[222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c]/yggdrasil:mpd

### Mycelium

Технічно, схожа модель роботи й в роутера Mycelium, але в його налаштуваннях використовується аргумент запуску `--disable-peer-discovery`:

> If this flag is passed, the automatic link local peer discovery will not be enabled, and peers must be configured manually. If this is disabled on all local peers, communication between them will go over configured external peers.

## Загальні рекомендації

Хоч це більше стосується сервер-сайду, на десктопі також варто звернути увагу і завчасно розставити права 0600 на "чутливі" файли профілю окремих застосунків типу крипто-гаманців, роутерів та інших програм, робота яких базується на приватних ключах.

## Посилання

=> gemini://bbs.geminispace.org/s/privacy/34128 Залишити коментар на BBS

### Дивіться також

=> mat2-meta-data-cleaner.gmi mat2: очищення мета-даних для різних форматів