# Підключення баунсера ZNC до Libera.Chat/IRC через Tor Дістався мені 24/7 сервер, на якому відсутній інтерфейс Інтернет але присутній мультикаст [Yggdrasil](https://yggdrasil-network.github.io/), через який можна підключитись до мережі [Tor](https://www.torproject.org), а з неї - до [Libera.Chat](https://libera.chat) * [Встановлення Onion-роутера Arti з підключенням до мережі Tor через Yggdrasil](https://devzone.org.ua/post/vstanovlennia-onion-routera-arti-z-pidkliuchenniam-do-merezi-tor-cherez-yggdrasil) * [Встановлення та налаштування IRC-баунсера ZNC в Linux](https://devzone.org.ua/post/vstanovlennia-ta-nalashtuvannia-irc-baunsera-znc-v-linux) (оновлено розділ проксі) ## Обліковий запис на сервері Libera.Chat В офіційній документації [вказано](https://libera.chat/guides/connect#accessing-liberachat-via-tor), що для підключення до сервера через Tor, потрібно мати зареєстрований на сервері обліковий запис: > Libera.Chat is reachable via Tor using our onion service, provided you already have an account (created without using Tor). Можливо, це зроблено з метою захисту від спаму, не цікавився - повна документація з реєстрації облікових записів описана [тут](https://libera.chat/guides/registration). Якщо коротко, то з комп'ютера де є Інтернет, заходимо з клієнта IRC (наприклад [Halloy](https://halloy.chat)) через порт `6697` на будь який сервер Libera.Chat з [офіційного списку](https://libera.chat/guides/connect): * `irc.libera.chat` * `irc.eu.libera.chat` * `irc.us.libera.chat` * `irc.au.libera.chat` * `irc.ea.libera.chat` * `irc.ipv4.libera.chat` * `irc.ipv6.libera.chat` ### Авторизація На випадок, якщо вже є старий акаунт - логінимось і крок **Реєстрація** пропускаємо: ``` bash /msg NickServ IDENTIFY YOUR_NICK YOUR_PASS ``` ### Реєстрація Підключившись до сервера, вказуємо нікнейм поточної сесії: ``` /nick YOUR_NICK ``` * `YOUR_NICK` - ваше значення Якщо нікнейм вільний, то NickServ його присвоїть. Тепер потрібно його зареєструвати, адже наразі - це лише псевдонім гостьової сесії: ``` /msg NickServ REGISTER YourPassword youremail@example.com ``` Після введення команди, в мене з'явилось повідомлення про надсилання листа підтвердження на вказану адресу e-mail. Туди прийшов лист з командою активації, яку потрібно скопіювати в той же чат: ``` /msg NickServ VERIFY REGISTER YOUR_NICK ACTIVATION_KEY ``` * `YOUR_NICK`, `ACTIVATION_KEY` - унікальні значення Якщо помилок не виникло і побачили відповідне вітання від сервера - реєстрацію успішно завершено! ## Генерація сертифікату Особливістю підключення до Libera.Chat через Tor є необхідність створення користувацького сертифікату з подальшою реєстрацією його відбитку (fingerprint) на сервері: > This service requires public-key SASL authentication using either the EXTERNAL or ECDSA-NIST256P-CHALLENGE (but not PLAIN) mechanisms. See our guide on setting up CertFP for more information. * детальніше про сертифікати написано [тут](https://libera.chat/guides/certfp.html) Вся документація вище - зводиться до виконання двох команд на локальному комп'ютері: 1. Генерація локального файлу `user.pem`: ``` bash openssl req -nodes -sha512 -newkey rsa:4096 -keyout user.pem -x509 -days 3650 -out user.pem -subj "/CN=YOUR_NICK" ``` * `-days 3650` - не обов'язково, сервер перевіряє сертифікат тільки один раз * `/CN=YOUR_NICK` - має бути актуальним 2. Отримання відбитку, для Libera.Chat це має бути `-sha512`: ``` bash openssl x509 -sha512 -noout -fingerprint -in user.pem | sed -e 's/^.*=//;s/://g;y/ABCDEF/abcdef/' ``` * результатом виконання цієї команди буде хеш-рядок, який потрібно скопіювати ### Реєстрація сертифікату на сервері Щоб почати користуватись створеними локально ключами, їх потрібно зареєструвати. В чаті NickServ, від авторизованого раніше користувача, вказується команда: ``` bash /msg NickServ CERT ADD [FINGERPRINT] ``` * `FINGERPRINT` - зкопійований хеш-рядок з останньої команди `openssl` Якщо все пройшло без помилок, перевірити доданий відбиток можна командою: ``` bash /whois YOUR_NICK ``` ## Підключення ZNC до Libera.Chat Логінимось до Веб-адмінки баунсера і виконуємо наступне ### ZNC » webadmin » Edit User » Networks » Add * Не знаю, чи це дійсно було потрібно для Tor, але я вимкнув "Trust all certs". Переходимо до секції "Servers of this IRC network", тиснемо "Add": * Hostname: `libera75jm6of4wxpxt4aynol3xjmbtxgfyjpu34ss4d7r7q2v5zrpyd.onion` * Port: `6697` * SSL: `Yes` На тій же сторінці, в секції "Modules", вмикаємо наступні додатки: * `cert` - інтерфейс сертифікатів для SASL * `sasl` - механізм авторизації зареєстрованого користувача Скролимо до низу та зберігаємо налаштування кнопкою "Save and continue", після чого на цій же сторінці в меню зліва має з'явитись нове підменю для поточної мережі "Network Modules (libera)". В цьому меню, мають бути посилання на два активовані модулі вище, заходимо по черзі та актуалізуємо дані: ### ZNC » cert » Certificate Тут є тільки одне поле "PEM File" - копіюємо в нього вміст локального сертифікату (`user.pem`) та зберігаємо налаштування кнопкою "Update". ### ZNC » sasl » SASL В налаштуваннях цього модуля, вказуємо логін (Username) та пароль (Password) від облікового запису Libera.Chat, які вказали під час реєстрації NickServ. * Опція "Require authentication" при цьому в мене не відмічена. Нижче, є блок "Mechanisms": тут важливо вказати `EXTERNAL`, після чого зберігаємо налаштування і пробуємо підключитись. Підключаючись з клієнта, вказуємо в ньому саме сервер / логін / пароль від облікового запису баунсера, а не сервера Libera.Chat (наприклад, у мене це `u_znc`) ## Посилання * https://wiki.znc.in/Cert * https://dev.adiirc.com/projects/adiirc/wiki/LiberaChat_tor