# Підвищення рівня приватності в застосунках 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
```

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

=> 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

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

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

## Посилання

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

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

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