Установка и практика использования IRC-баунсера ZNC

22 августа 2016

Вопреки распространенному заблуждению, IRC-сети все еще пользуются большой популярностью. Это своего рода токая секретная социальная сеть, где онлайн постоянно зависают сотни тысяч IT-специалистов со всего мира. И это в одном только FreeNode! Так вот, для людей, недавно открывших для себя IRC, довольно сложной является концепция каких-то там баунсеров. Сегодня мы познакомимся с с одним из таких баунсеров под названием ZNC, и выясним, что пользоваться им очень просто.

Зачем нужны IRC-баунсеры

Говоря простыми словами, IRC-баунсер (bouncer, он же BNC) представляет собой умный прокси-сервер между клиентом и IRC-сетью. В числе прочих баунсер выполняет следующие функции:

  • Скрытие IP-адреса клиента;
  • Запись истории сообщений, в том числе, опубликованных, когда пользователь был оффлайн;
  • Хранение всех логинов, паролей, списка сетей и каналов в одном месте;
  • Баунсер позволяет сидеть в IRC-сети под одним аккаунтом с разных устройств одновременно;
  • Прочие фишки — шифрование сообщений, предоставление доступа к системе, где установлен баунсер, и так далее;

Как видите, баунсер является очень полезной штукой.

Установка и настройка ZNC

Наверняка у вас есть сервер под Syncthing, закрытые Git-репозитории, OpenVPN, скрипт для чтения RSS-лент, и всякое такое. Теперь вы можете развернуть на нем и ZNC. Если сервера нет, вы можете завести его на DigitalOcean. При регистрации по моей реферальной ссылке вы получите некоторое количество денег на счет, и первое время сервер будет для вас бесплатен.

Устанавливается ZNC очень просто:

sudo apt-get install --no-install-recommends znc
znc --makeconf

В результате выполнения последней команды вы попадете в диалог вроде такого:

[ ok ] Checking for list of available modules...
[ ** ] Building new config
[ ** ]
[ ** ] First let's start with some global settings...
[ ** ]
[ ?? ] What port would you like ZNC to listen on?: 31337
[ ?? ] Would you like ZNC to listen using SSL? (yes/no) [no]: yes
[ ** ] Unable to locate pem file: [/home/afiskon/.znc/znc.pem]
[ ?? ] Would you like to create a new pem file now? (yes/no) [yes]:
[ ok ] Writing Pem file [/home/afiskon/.znc/znc.pem]...
[ ?? ] Would you like ZNC to listen using ipv6? (yes/no) [yes]: no
[ ?? ] Listen Host (Blank for all ips):
...

Все вопросы не сложные. Ответить на них займет у вас пару минут. Если вы где-то накосячили, не беспокойтесь — позже вы сможете все перенастроить через веб-интерфейс ZNC. Ссылка для входа в него будет показана вам в процессе настройки. После того, как вы ответите на все вопросы, ZNC будет сразу запущен и демонизирован. Баунсер прекрасно переживает закрытие SSH-сессии, никакого screen или вроде того ему не требуется.

Веб-админка выглядит приблизительно так:

Веб-админка ZNC

Админка поддерживает шкурки, так что у вас она может выглядеть немного иначе. Рассматривать подробно ее не будем, так как на мой взгляд интерфейс админки предельно прост и понятен. Через нее вы можете добавлять / удалять сети и каналы, создавать / удалять пользователей баунсера (действительно, почему бы нескольким людям одновременно не использовать один баунсер?), включать / выключать модули, и так далее. Из модулей на первое время наибольший интерес, пожалуй, представляет модуль log. Как понятно из названия, он отвечает за запись логов сообщений на диск. Сохраняться логи будут сюда:

~/.znc/users/$USERNAME/networks/$NETWORK/moddata/log/*.log

На следующем скриншоте изображены параметры подключения к ZNC в IRC-клиенте HexChat (активно поддерживаемый форк знаменитого XChat):

Параметры подключения к ZNC в HexChat

Заметьте, что (1) следует указать пароль от ZNC, а не для входа в IRC-сеть, (2) в логине следует через слэш указать название сети, к которой вы подключаетесь. Через ZNC можно сидеть во многих сетях одновременно, но на каждую сеть требуется отдельное подключение.

На баунсере-то мы авторизовались, но еще нужно авторизоваться и во FreeNode (если, конечно, у вас зарегистрирован там ник, что весьма рекомендуется). Для этого через веб-интерфейс ZNC включаем для сети модуль sasl. Затем в HexChat говорим:

/query *sasl

Переходим в диалог с «пользователем» *sasl, который соответствует модулю.

Говорим:

requireauth yes
set your_username your_password

Поздравляю, на этом настройка ZNC завершена! Можете подключиться к сети без баунсера под другим ником, затем отключиться от ZNC, и убедиться, что ваш пользователь остается висеть, становясь спустя какое-то время сереньким (то есть, «away»). Также можете проверить, что через ZNC вы можете успешно сидеть в сети под одним ником с разных устройств (для iPhone, например, есть неплохой IRC-клиент Mutter) и что при переподключении вам будут показаны сообщения, которые вы пропустили.

Примечания: (1) Если сеть не умеет SASL, воспользуйтесь модулем nickserv. Он используется по тому же принципу. (2) Описание настройки IRC-клиента irssi для работы с ZNC вы найдете в заметке Знакомство с консольным IRC-клиентом irssi.

Дополнение: Чтобы при переподключении клиента ему всегда отображались последние сообщения, в настройках канала через веб-интерфейс поставьте значение BufferCount побольше и снимите галочку AutoClearChanBuffer. В том же веб-интерфейсе можно изменить дэфолтные значения этих параметров в свойствах аккаунта. Если каналов много, и править их свойства через веб-морду неудобно, можно сказать в клиенте /msg *status shutdown, затем отредактировать ~/.znc/configs/znc.conf и запустить ZNC снова. Сделать restart, к сожалению, не поможет, так как при нем перезаписывается конфиг.

Шифрование сообщений при помощи Schat

Обзор ZNC был бы не полным, если бы мы не рассмотрели хотя бы один из предлагаемых им модулей для шифрования сообщений. Их как минимум три — Crypt, Schat и Otr. Для примера рассмотрим Schat.

Для шифрования сообщений при помощи этого модуля два человека должны использовать ZNC на своих серверах, и эти сервера должны видеть друг друга. Дело в том, что обмен сообщениями происходит не через IRC-сеть, а напрямую, по TCP. За исключением этого момента, все просто.

Начать новый чат:

/msg *schat chat NICK

Просмотр списка шифрованных чатов и их состояния:

/msg *schat list

Прибить чат:

/msg *schat close NICK

При создании нового чата происходит приблизительно следующее:

<(s)hax0r> *** Incoming DCC SCHAT, Accept ? (yes/no)
<afiskon> yes
<(s)hax0r> *** Connected.

Затем вы общаетесь, как обычно. При помощи tcpdump несложно проверить, что трафик действительно шифруется.

Заключение

Как и было сказано в начале заметки, все довольно просто. А вы боялись!

Ссылки по теме:

А каким IRC-баунсером вы пользуетесь?

Метки: , .


Вы можете прислать свой комментарий мне на почту, или воспользоваться комментариями в Telegram-группе.