XMPP Logo 128px Так как вопросы по спискам приватности не прекращаются, люди наступают на одни и те жи грабли, а некоторые и вовсе считают, что эти списки мало на что пригодны, недостаточно гибкие и т.п., я решил написать с примерами как ими пользоваться.
Мы расмотрим несколько примеров применения и несколько способов решения поставленных задач используя Mirand’у.

В основном требуется решить три типа задач:

  1. Инвиз
  2. Бан
  3. Запрет запросов: версии клиента/времени/пинга/etc

Далее по тексту вместо «списков приватности» часто буду писать «приват листы» или просто «списки», ну привычнее так мне (=

Итак, погнали.

Основы.

  1. Приват листы хранятся на сервере, т.е. ими спокойно можно будет воспользоватся в любой момент времени и из другого клиента.
  2. Приват листы выполняют фильтрацию на стороне сервера, тем самым до вас ничего лишнего не дойдёт, вся нагруза полностью ложится на jabber сервер.
  3. Приват листов можно сделать много и достаточно быстро переключаться между ними.
  4. Обновил приват лист [добавил/изменил/удалил правило] -> сделай реконект.
  5. Нельзя сохранить пустой список приватности.
  6. Правила в приват листе выполняются сверху вниз, соотвественно это надо учитывать, это довольно важный момент.

Теперь расмотрим более детально организацию приват листов.
Чтобы открыть редактор приват листов нужно зайти в меню статусов нужного Jabber аккаунта, выбрать «Списки приватности» и в подменю пункт «Редактор списков» — скриншот #00.
Появится окно редактора, которое разито на две секции: слева имеющиеся списки приватности, справа правила для выбранного списка приватности — скриншот #01.

В правом верхнем углу находятся иконки переключения режимов, по дефолту стоит «Простой режим» — он чем то напоминает настройки Игнора в миранде, в окне сразу показывается весь ростер [контакт лист] и можно флажками задать нужные правила.

Но давайте переключимся в «Расширенный режим» [правая иконка вида] — скриншот #02, он более удобный имхо, отражаются только сами правила и ничего лишнего, к тому же можно настроить порядок выполения правил, а это, как я уже говорил выше — важно.

В нижнем левом углу расположены иконки управления приват листами:

  • Добавить — создать новый приват лист;
  • Активировать — сделать активным сейчас;
  • По умолчанию — этот приват лист будет использоваться при новом подключении и в последующей работе, т.е. является Основным;
  • Удалить — удалить выбранный приват лист;

Тут следует упомянуть разницу в «Активировать» и «По умолчанию», если сделать приват лист name1 «Активным», но «По умолчанию» будет выставлен приват лист name2, то после первого же реконекта активируется name2, а до этого будет работать спокойно name1.
Поэтому если хотите чтобы нужный приват лист работал постоянно, то нужно отметить обоими флагами нужный список.

Давайте создадим новый список приватности и назовём его «adblock plus» (=
Для этого нажать внизу на нижнюю крайнюю инконку в виде плюса «+» и зададим имя в появишемся окне — скриншот #03.
Теперь добавим правило, так как пустой список сохранить нельзя, заодно и разберём окно добавления.
Под списком правил есть иконки:

  • Добавить правило
  • Изменить правило
  • Преместить вверх правило
  • Преместить вниз правило
  • Удалить правило

Выбираем «Добавить правило», появляется окно «Правило приватности», расcмотрим его подробно — скриншот #04, по сути оно являет собой условие:
Если, варианты:

  • JID — Jabber ID

    На самом деле тут можно писать не только Jabber ID, но и просто домен сервера, например jabber.org или домен конференций conference.jabber.org или даже ID пользователя из конференции room@conference.jabber.org/Nick

  • Группа — выбор из групп вашего ростера
  • Подписка — наличие авторизации: нет/в/от/в обе стороны [это и есть как раз - Да]
  • Любое — иначе говоря для всех

При вариантах JID и Группа в выпадающем списке напротив уже можно выбрать те ID и группы, которые есть в ростере.

Тогда, варианты:

  • Запретить
  • Разрешить

Следующие типы событий:

  • Сообщения — сообщения к вам [на отправку не влияет], а также инвайты/приглашения в конференции к Вам;
  • Запросы — iq запросы к Вам: версии клиента/пинга/локального времени;
  • Входящее присутствие — т.е. прием информации о статусах от контактов к Вам, а также запросы авторизации к Вам;
  • Исходящее присутствие — т.е. отсылка информацию о статусах от Вас к Контактам, а также запросы авторизации от Вас к Контактам;

Давайте полностью забаним контакт username@jabber.org, это будет выглядеть так — скриншот #05:

Если JID username@jabber.org, Тогда запретить Все типы событий.

Теперь можно сохранить наш новый список приватности «adblock plus», и можно сделать его «активным» и/или «по умолчанию», если нужно.

На этом мы закончим с теорией и перейдём к практике.

перейти к Началу

I. Невидимость.

Чтобы стать невидимым для контакта/группы/сервера, нужно всего лишь запретить iq запросы и Исходящее присутствие. Рассмотрим 2 варианта:

1. Невидимость полная с исключениями для некоторых контактов.

Cоздадим новый список приватности и назовём его «full inviz».

  1. создаём правило для невидимости — скриншот #06:

    Если любое, Тогда запретить iq запросы и Исходящее присутствие, сохраняем правило.
  2. Теперь нужно добавить добавить исключение, например чтобы контакт username@jabber.org мог нас видеть, создаем правило — скриншот #07:
    Если JID: username@jabber.org, Тогда разрешить все типы событий.

     
    в принципе, можно было бы написать и так:

    Если JID: username@jabber.org, Тогда разрешить iq запросы и Исходящее присутствие.

    но в данном случае это не важно.

    Теперь правило исключения нужно переместить Выше правила запрета, иначе оно просто теряет смысл и не будет работать.

  3. также можно добавить в исключения сразу целую группу из ростера — скриншот #08:
    Если Группа: work, Тогда разрешить все типы событий.

    тоже помещаем его выше правила Запрета всего и сохраняем.

    Удобно например на работе, чтобы не мешали, ну или наооборот о рабочих контактов прикрыться ;)

  4. также добавим сервер конференций в исключения conference.jabber.ru — скриншот #09:
    Если JID: conference.jabber.ru, Тогда разрешить все типы событий.

    тоже помещаем его выше правила Запрета всего и сохраняем.

Сохраним список приватности и сделаем его «По умолчанию» [не надо делать его "активным" сразу] — скриншот #10, теперь нужно выполнить реконект этой учетки в миранде.

Важный момент. Если не сделать реконект, а просто Активировать список приватности для невидимости, то выйдет следущее:
для всех контактов, которые были в сети на тот момент, вы так и будуте висеть в онлайне [с поледним статутом, который был у вас на тот момент], а для только что подключившихся контактов вы будете уже в инвизе.

Поэтому, надо сначало уйти в Offline, тем самым послав всему ростеру статус что вы вышли, а потом заново зайти/приконектится, т.е. сделать Реконект, автоматом Активируется приват лист с флагом «По умолчанию» и теперь уже для всех вы будете невидимыми, кроме тех контактов, которые сами добавили в исключения.

перейти к Началу

2. Выброчная невидимость для нескольких контактов.

Давайте создадим список приватности и назовём его «inviz» [или как вам удобно, это не имеет значения].
В данном случае идём от обратного, делаемся невидимыми только для нескольких контактов: username@jabber.org и nickname@jabbus.org
Добавляем для них правила — скриншот #11, скриншот #12:

  1. Если JID: username@jabber.org, Тогда запретить iq запросы и Исходящее присутствие.
  2. и

  3. Если JID: nickname@jabbus.org, Тогда запретить iq запросы и Исходящее присутствие.

    Сохраняем список приватности, ставим флаг «По умолчанию» для него и делаем реконект.

скриншот #13 — готово, список «inviz» стал активным, теперь мы для этих двух контактов невидимы.

перейти к Началу

II. Бан

Расмотрим опять же два случая, в первом будем банить всех и делать исключения, во втором случае будем банить тока определённые контакты, сервера.

1. Баним всех и добавляем нужные контакты в исключения.

Данный варинт удобен чтобы прикрыться от флуд атаки на нужное время.
Создаём приват лист и именуем его.. например «banall».
Добавляем правила:

  1. баним всех — скриншот #14:

    Если любое, Тогда запретить все типы событий.
  2. добавляем в исключения всех кто авторизован — скриншот #15:
    Если Подписка: в обе стороны, Тогда разрешить все типы событий.

Передвигаем правило исключения выше правила с баном, иначе оно не будет иметь смысла.
Сохраням новый список и установим флаги «По умолчанию» и «Активный», делаем реконект.

Готово, теперь тот кто не авторизован полностью идёт лесом, вы ничего не будуте получать от лиц в не ростера, также и не увидите запросов авторизации.
Сурово, просто, но со вкусом.

По желанию можно добавить нужные серверы конференций в исключения — скриншот #16:

Если JID: conference.miranda.im, Тогда разрешить все типы событий.

и/или только определённые комнаты — скриншот #17:

Если JID: looking-glass@conference.ilab.me, Тогда разрешить все типы событий.

также ставим эти правила выше правила с баном, примерно так — скриншот #18

Можно было конечно ввиде исключений добавить в условия нужные группы в ростере, ну или контакты, а не подписку, тут уж смотря что надо, да и быстрее так.

перейти к Началу

2. Баним избранно, сегодня мы в хорошем настроении (=

нужно забанить два контакта 324324234@jabber.org и ololol@jabber.org, а также сервер xmpp.org и пользователя Маша1992 в конференции flame@conference.jabber.org
Открываем уже созданный приват лист «adblock plus».

  1. Если JID: 324324234@jabber.org, Тогда запретить все типы событий.
  2. Если JID: ololol@jabber.org, Тогда запретить все типы событий.
  3. Если JID: xmpp.org, Тогда запретить все типы событий.
  4. Если JID: flame@conference.jabber.org/Маша1992, Тогда запретить все типы событий.

скриншот #19, скриншот #20, скриншот #21, скриншот #22
порядок правил в данном случае не важен — скриншот #23.
Сохраням список и установим флаги «По умолчанию» и «Активный», делаем реконект — Готово.

Понятно, что с таким подходом нужно знать врага «в лицо», злоумышленник может начать ддосит своим бредом ваш мозг с другого JID’a.

перейти к Началу

III. Запрет запросов: версии клиента/времени/пинга/etc

Бывает нужно скрыть версию клиента или другую информацию, это тоже реально сделать через приват листы, надо только запретить iq запросы для нужных контактов/групп/серверов/конференций:

  1. запрещаем для контакта username@jabber.org — скриншот #24:

    Если JID: username@jabber.org, Тогда запретить Запросы.
  2. запрещаем для группы university — скриншот #25:
    Если Группа: university, Тогда запретить Запросы.
  3. запрещаем для конференции flame@conference.jabber.ru — скриншот #26:
    Если JID: flame@conference.jabber.ru, Тогда запретить Запросы.
  4. запрещаем для всего сервера конференций conference.jabber.org — скриншот #27:
    Если JID: conference.jabber.org, Тогда запретить Запросы.
  5. запрещаем для всего сервера xmpp.org — скриншот #28:
    Если JID: xmpp.org, Тогда запретить Запросы.

Сохраням список и установим флаги «По умолчанию» и «Активный», делаем реконект — Готово: скриншот #29.

iq запросы тоже могут использоваться как метод DDoS атаки кстати, причём скрытой, так как пользователь не видит этих запросов, но можно открыть XML-консоль чтобы промониторить сей момент.
Нужно зайти в меню статусов нужного Jabber аккаунта -> Службы -> XML Консоль и отметить в фильтре Запросы: скриншот #30, скриншот #31.

перейти к Началу

Естественно можно задавать любые названия спискам приватности и совмещать различные правила в пределах одного списка, главное соблюдать очерёдность правил, чтобы одно не перекрывало другое.
На этом закругляюсь, так как думаю примеров достаточно и всё довольно подробно.