UnrealIRCd - 3.2 - Официальная документация

NOTE: This documentation is about the old series (UnrealIRCd 3.2.x). If you are using UnrealIRCd 4 then check the UnrealIRCd 4 documentation instead.

English | German | Hungarian | French | Russian | Turkish | Spanish
UnrealIRCd
http://www.unrealircd.com
Версия: 3.2.10.5
Последнее обновление: 2013-04-05
Главные программисты Syzop
Программисты: binki
Предыдущие программисты и вкладчики: Stskeeps, codemastr, Luke, aquanight, WolfSage, McSkaf, Zogg, NiQuiL, assyrian, chasm, DrBin, llthangel, Griever, nighthawk
Документация: CKnight^ (начальная документация), Syzop (переписана большая часть), codemastr и множество вкладчиков
Перевод: Bock / Slyder / DeathBaba / Kirya

Для просмотра данной документации, вы должны иметь совместимый браузер из списка, приведённого ниже. Документация с последними обновлениями доступна по адресу http://www.vulnscan.org/UnrealIRCd/unreal32docs.ru.html и ЧАВО (ЧАсто задаваемые ВОпросы): http://www.vulnscan.org/UnrealIRCd/faq/.

INDEX / Содержание
1. Введение
---1.1. Замечания по обновлению/совместному использованию версий 3.1.x -> 3.2
---1.2. Замечания по обновлению между версиями ветки 3.2
2. Установка
3. Функциональные возможности
-- 3.1. Cloaking[сокрытие хоста]
-- 3.2. Модули
-- 3.3. SNOMASKs
-- 3.4. Псевдонимы[aliases]
-- 3.5. Система помощи сервера (helpop)
-- 3.6. Уровни доступа операторов
-- 3.7. Команды операторов
-- 3.8. SSL
-- 3.9. IPv6
-- 3.10. Сжатые соединения
-- 3.11. Поддержка соединения с динамическим DNS/IP
-- 3.12. Возможности защиты от flood'а
-- 3.13. Разновидности банов
-- 3.14. Спамфильтр
-- 3.15. CIDR
-- 3.16. Использование национальных наборов символов в никах
-- 3.17. Поддержка CGI:IRC
-- 3.18. Синхронизация времени
-- 3.19. Способы аутентификации
-- 3.20. Другие возможности
4. Конфигурирование вашего unrealircd.conf
---4.1. Обзор структуры конфигурационного файла
---4.2. Блок Me -=- (M:Line)
---4.3. Блок Admin -=- (A:Line)
---4.4. Блок Class -=- (Y:Line)
---4.5. Блок Allow -=- (I:Line)
---4.6. Блок Listen -=- (P:Line)
---4.7. Блок Oper -=- (O:Line)
---4.8. Блок DRpass -=-(X:Line)
---4.9. Директива Include
---4.10. Директива Loadmodule
---4.11. Блок Log
---4.12. Блок TLD -=- (T:Line)
---4.13. Блок Ban Nick -=- (Q:Line)
---4.14. Блок Ban User -=- (K:Line)
---4.15. Блок Ban IP -=- (Z:Line)
---4.16. Блок Ban Server -=-(q:Line)
---4.17. Блок Ban Realname -=- (n:Line)
---4.18. Блок Ban Version
---4.19. Блок Ban Exception -=- (E:Line)
---4.20. Блок TKL Exception
---4.21. Блок Throttle Exception
---4.22. Блок Deny DCC -=- (dccdeny.conf)
---4.23. Блок Deny Version -=- (V:Line)
---4.24. Блок Deny Link -=- (D:Line / d:Line)
---4.25. Блок Deny Channel -=- (chrestrict.conf)
---4.26. Блок Allow Channel
---4.27. Блок Allow DCC
---4.28. Блок Vhost -=- (vhost.conf)
---4.29. Блок Badword -=- (badwords.conf)
---4.30. Блок Uline -=- (U:Line)
---4.31. Блок Link -=- (C/N/H:Lines)
---4.32. Блок Alias
---4.33. Блок Help
---4.34. Блок Official Channels
---4.35. Блок Spamfilter
---4.36. Блок Cgiirc
---4.37. Блок Set
---4.38. Блок Files
5. Дополнительные файлы
6. Режимы пользователя и канала
7. Команды пользователя и оператора
8. Список советов по безопасности
---8.1. Пароли
---8.2. Уязвимости, не относящиеся к IRCD
---8.3. Права доступа на конфигурационный файл
---8.4. Человеческий фактор
---8.5. SSL/SSH и перехват трафика
---8.6. Атака на отказ в обслуживании (DoS) [или "как защитить мой хаб"]
---8.7. Раскрытие информации
---8.8. Защита против эксплоитов
---8.9. Итоги
9. Часто задаваемые вопросы (ЧАВО)
10. Модули
---10.1. m_nopost
A. Регулярные выражения
---A.1. Литералы
---A.2. Оператор Точка
---A.3. Операторы повторения
---A.4. Выражения в скобках
---A.5. Управляющие символы
---A.6. Оператор выбора
---A.7. Подвыражения
---A.8. Обратные ссылки
---A.9. Чувствительность к регистру

1.0 – Введение

Этот документ является частью UnrealIRCd. Использование или распространение этого документа с другим пакетом программного обеспечения строго запрещено без письменного разрешения команды разработчиков UnrealIRCd. Этот документ может быть скопирован/распечатан/опубликован/воспроизведён сколько угодно раз в случае, если он будет использован с UnrealIRCd, и не будет содержать каких-либо изменений. – Copyright UnrealIRCd Development Team 2002-2006

Пожалуйста, прочитайте это руководство прежде, чем задавать вопросы, а так же загляните в ЧАВО, так как 80% ваших вопросов/проблем уже описано в нём. Если вы всё же нуждаетесь в помощи, попросите поддержки на irc.unrealircd.org (port 6667) на канале #unreal-support (имейте в виду, что мы ТРЕБУЕМ, чтобы документация была прочитана, и мы помогаем только по UnrealIRCd, а не по сервисам!). Так же можете воспользоваться форумами http://forums.unrealircd.com. Если вы обнаружили реальный баг (например, аварийное завершение работы), сообщите об этом на http://bugs.unrealircd.org.

1.1 – Замечания по обновлению/совместному использованию версий 3.1.x-> 3.2

При переходе с Unreal3.1.x на Unreal3.2 вы заметите, что структура конфигурационного файла полностью изменилась. Сначала она покажется сложной, однако со временем вы привыкнете и поймёте, что так намного удобнее!

Так же не забудьте прочитать раздел 3 о функциональных возможностях. С некоторыми из них вы знакомы по версии 3.1.x, но мы добавили новые!

Лучше не использовать совместно 3.1.x и 3.2, но если вы на самом деле этого хотите, у вас должна быть как минимум версия 3.1.4 (мы настоятельно рекомендуем 3.1.5.1).

1.2 – Замечания по обновлению между версиями ветки 3.2

Рекомендации по обновлению для:
Linux:

- Переименуйте ваш старый каталог UnrealIRCd (либо перезапишите его на следующем шаге)
- Извлеките новую версию UnrealIRCd и запустите ./Config и потом make
- Скопируйте ваши старые конфигурационные файлы в новую директорию (unrealircd.conf, motd, rules, server.* [SSL certs], файл сети, etc)

Windows:

- Скопируйте все конфигурационные файлы во временную директорию.
- Запустите программу удаления предыдущих версий Unreal, которые вы устанавливали.
- Запустите программу установки новой версии Unreal.
- Скопируйте старые конфигурационные файлы в новую папку.

Пожалуйста, проверьте/прочитайте .RELEASE.NOTES чтобы увидеть, что изменилось. Если вы заметили разницу в работе (или ошибки) в новой версии, УБЕДИТЕСЬ, ЧТО ВЫ ПРОЧИТАЛИ .RELEASE.NOTES ПРЕЖДЕ, чем сообщать об этом!

2.0 - Установка

Тестируемые и поддерживаемые операционные системы:

- *NIX версии:
  - Linux (2.2.*, 2.4.*, 2.6.*)
  - FreeBSD (4.*, 5.*, 6.*)
  - NetBSD (2.*)
  - OpenBSD (3.7, 3.8, 3.9)
  - Solaris (9, 10)
- Windows версии:
  - Windows XP (Home, Pro)
  - Windows 2003
  - Windows 7
- Тестируемые архитектуры:
  - ia32 (i386, i486, i586, i686)
  - ia64
  - amd64
  - alpha
  Если у вас Unreal3.2 корректно работает на других операционных системах, пожалуйста, вышлите детали на coders@lists.unrealircd.org

  Инструкции по установке
  Linux:

  1. gunzip -d Unreal3.2.X.tar.gz
  2. tar xvf Unreal3.2.X.tar
  3. cd Unreal3.2
  4. ./Config
  5. Ответьте на вопросы. В общем случае, если вы не уверены в ответе, выбирайте значение по умолчанию
  6. make
  7. Теперь создайте ваш unrealircd.conf и другие конфигурационные файлы так, как описано в разделе 4.

  Windows:

  1. Запустите программу установки Unreal
  2. Теперь создайте ваш unrealircd.conf и другие конфигурационные файлы так, как описано в разделе 4.

3.0 - Функциональные возможности

В этой части описаны основные изменения и дополнительный функционал. Это краткий обзор, но иногда мы будем обращаться к конфигурационному файлу (чтобы пояснить то, о чём вы, возможно, ещё не имеете представления).

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

3.1 - Cloaking[сокрытие хоста]

Cloaking – это механизм сокрытия реального имени компьютера пользователя. К примеру, если ваша система имеет имя d5142341.cable.wanadoo.nl, оно будет показано (при заходе на канал, выходе, whois и пр.) как rox-2DCA3201.cable.wanadoo.nl. Это полезно для предотвращения пользовательского флуда, так как реальное имя компьютера или его IP не показывается.

Эта функция контролируется режимом пользователя +x (использование: /mode ваш_ник +x), администраторы могут определить использование этого режима всеми по умолчанию или сделать так, что пользователи не смогут выполнить -x никогда.

Скрытая часть имени генерируется, если подгружен соответствующий модуль. На данный момент, включён только один модуль:
cloak: это официальный модуль начиная с версии 3.2.1, он гораздо надёжнее старого алгоритма: использует md5 и требует, чтобы вы имели три различных ключа set::cloak-keys::, состоящих из смеси прописных (a-z), заглавных (A-Z) букв и цифр (0-9) [т.е.: "AopAS6WQH2Os6hfosh4SFJHs"]. Смотрите example.conf для примера.

Эти ключи ДОЛЖНЫ быть одинаковыми на ВСЕХ СЕРВЕРАХ в сети. Также ключи должны храниться в секрете, потому что возможно получить реальный хост, зная эти ключи (что делает режим +x бесполезным).

Подсказка: Если вы используете *NIX, то у вас есть возможность создать новые ключи: запустите './unreal gencloak' в шелле, результатом выполнения станет три строки сгенерированные случайно, которые вы сможете использовать в качестве ключей.

3.2 - Модули

UnrealIRCd поддерживает модули, которые хороши тем, что:
- Вы можете загружать/перезагружать/выгружать их во время работы ircd (путём команды /rehash). Это позволяет исправлять некоторые ошибки или добавлять новые возможности без перезапуска сервера!
- Сторонние люди могут создавать модули с новыми командами, режимами пользователей и каналов.
UnrealIRCd идёт только с некоторыми модулями. Следите за модулями на www.unrealircd.com -> или используйте google.com для поиска сторонних модулей.

Вам необходимо загрузить как минимум два модуля, иначе вы не сможете запустить UnrealIRCd:
- модуль команд: commands.so (commands.dll в ОС Windows)
- модуль скрытности: обычно cloak.so (cloak.dll в ОС Windows).

3.3 - SNOMASKs

SNOMASK (Server Notice MASK - маска уведомлений сервера) - это специальный тип режима пользователя, который контролирует, какие уведомления от сервера вы будете получать (обычно используется операторами).

Необходимые маски устанавливаются командой: /mode ваш_ник +s SNOMASK. К примеру: /mode ваш_ник +s +cF
Чтобы убрать ранее установленную маску, используйте что-то вроде этого: /mode ваш_ник +s -c
Чтобы удалить все маски, просто напишите : /mode ваш_ник -s

Сейчас доступны маски:
c - локальные подключения
F - подключения к другим серверам (кроме U-lined серверов)
f - уведомление о флуде
k - уведомление о kill'e (здесь, и далее - выход из irc с причиной Killed) [*]
e - уведомление 'eyes'
j - уведомление 'junk'
v - уведомление о виртуальных хостах
G - уведомление о gline/shun
n - уведомление о смене ников на локальном сервере
N - уведомление о смене ников на других серверах
q - уведомление о попытке взять запрещённый ник (Q:line)
s - получение уведомлений от сервера [*]
S - получение уведомлений от спамфильтра
o - получение уведомлений о получении привилегий оператора
[*: данная маска доступна не только irc-операторам]

Вы можете контролировать, какие маски будут установлены автоматически при подключении (set::snomask-on-connect), и какие будут установлены при получении прав оператора (set::snomask-on-oper, oper::snomask).

По умолчанию, если пользователь просто установит режим +s, будут активированы некоторые маски. Для не операторов это +ks, для операторов - +kscfvGqo.

3.4 - Псевдонимы[aliases]

Используя псевдонимы, вы можете переопределить команды сервера. Вы можете задать псевдоним так, что, например "/ns identify blah" будет переадресовано nickserv (это будет преобразовано в: privmsg nickserv identify blah). Вы можете создать комплексные псевдонимы, например, /register может быть переадресован ChanServ, если первый параметр начинается с #, или адресован NickServ в ином случае.

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

3.5 - Система помощи сервера (helpop)

UnrealIRCd имеет встроенную систему помощи, доступную по команде /helpop. /helpop - это команда, полностью задаваемая пользователем в блоке помощи конфигурационного файла. Файл help.conf включает в себя базовые сведения о всех командах.
Например, /helpop chmodes выдаст информацию обо всех режимах канала, которые есть в UnrealIRCd.
Помните, что если вы irc-оператор (ircop), или доступны для помощи (helpop), вам необходимо добавлять символ '?', т.е. вместо /helpop необходимо писать /helpop ? и вместо /helpop chmodes надо писать /helpop ?chmodes и т.д.

3.6 - Уровни доступа операторов

В UnrealIRCd существует множество уровней привилегий операторов. Вы можете давать им отдельные права (такие, как использование /gline), таким образом оставляя каждому только те привилегии, которые ему необходимы.

Эти привилегии контролируются флагами оператора в Oper-блоке, для получения подробной информации смотрите соответствующий блок конфигурационного файла и раздел 4.7.

3.7 - Команды операторов

В UnrealIRCd имеется много различных команд оператора, о которых рассказано в разделе Команды пользователя и оператора. Вы наверняка захотите прочитать его после установки :).

3.8 - SSL

SSL является аббревиатурой от Secure Socket Layer. Используя SSL, вы можете создавать защищённые соединения. Его можно использовать для шифрования трафика от сервера к серверу, но шифрование данных от клиента к серверу так же может быть организовано. Обычно SSL используют для защиты от перехвата трафика и для безопасной аутентификации.

Чтобы использовать SSL, вам необходимо скомпилировать сервер с поддержкой этого протокола. Чтобы указать используемые для SSL-соединений порты, необходимо в конфигурационном файле задать опцию listen::options::ssl.

Подключится на SSL-порт обычным способом невозможно (так что не стоит включать SSL на порту 6667), для этого необходим клиент или туннель, который понимает SSL протокол.

Клиенты, поддерживающие SSL: XChat, irssi, mIRC (версии 6.14 и выше, но нужно предпринять некоторые дополнительные шаги).

Для клиентов, которые не поддерживают SSL, вы можете использовать туннелирование, используя, к примеру, stunnel. Вот пример конфигурационного файла stunnel.conf (для stunnel версии 4.x):

       client = yes
    				[irc]
    				accept = 127.0.0.1:6667
    				connect = irc.myserv.com:6697

Т.е. если вы соединяетесь на 127.0.0.1 порт 6667, ваш трафик будет зашифрован и перенаправлен на irc.myserv.com порт 6697 (это порт SSL).

При соединении с сервером вы должны проверить подлинность сертификата, а не просто принять его (как в примере с stunnel), иначе есть вероятность, что вы будете уязвимы для атак типа "активного сниффинга" (переадресация ssl), однако не будем вдаваться в подробности (самостоятельно ознакомьтесь с SSL более подробно, не спрашивайте у нас). [mIRC и xchat вызывают всплывающие окна с запросом о принятии/отказе сертификата, и это правильно].

3.9 - IPv6

Поддержка IPv6 в UnrealIRCd стабильна, начиная с версии beta15.
Ваша ОС должна иметь поддержку протокола IPv6, вам так же необходимо ответить утвердительно на вопрос о поддержке IPv6 в UnrealIRCd во время конфигурирования.

Экспериментальная реализация компанией Microsoft протокола IPv6 в Windows 2000/XP не поддерживается (пока) в UnrealIRCd.

3.10 - Сжатые соединения

Сжатые соединения должны использоваться на серверах для соединения между собой, что позволит уменьшить передаваемый трафик (используя zlib). Таким образом, можно экономить до 60-80% от ширины канала... Функция весьма полезна, если соединение идёт по узкому каналу или при соединении с большим числом пользователей, а так же при линковке, когда передаётся много данных о каждом пользователе/канале и т.д.

Чтобы скомпилировать сервер с поддержкой сжатых соединений, необходимо ответить Yes на вопрос о zlib в ./Config и установить соответствующую опцию в link::options::zip (с обоех сторон).

3.11 - Поддержка соединения с динамическим DNS/IP

UnrealIRCd содержит новые функции, помогающие пользователям с динамическими IP адресами использовать динамический DNS (что-то вроде blah.dyndns.org). Если вы соединяете два сервера с динамическими DNS именами, установите link::options::nodnscache и link::options::nohostcheck.

3.12 - Возможности защиты от flood'а

Тротлинг (Throttling)
Тротлинг - это метод, который позволяет вам ограничить скорость, с которой пользователь может соединяться и отсоединяться от вашего сервера. Вы можете сконфигурировать его в set::throttle блоке, чтобы ограничить X соединений в YY секунд с одного IP.
Режимы канала
Весьма эффективным средством против флуда являются некоторые режимы канала. Опишем несколько:
K = не позволять /knock, N = не позволять смену ников, C = не позволять CTCP, M = только зарегистрированные пользователи могут говорить, j = регулировка частоты входа на канал (на каждого пользователя).
Начиная с версии beta18, есть и более продвинутый режим канала: +f...
Режим канала f
Больше нет необходимости использовать скрипты и ботов для защиты от флуда на канале, этот функционал теперь встроен в ircd.
Пример использования режима +f: *** Blah sets mode: +f [10j]:15
Это значит, что 10 заходов на канал в течение 15 секунд разрешены, если же лимит превышен, то автоматически будет установлен режим +i (только по приглашениям).
Доступны следующие типы защиты от флуда:

type: | имя: | действие по умолчанию: | другие доступные действия: | комментарии
c | CTCPs | auto +C | m, M |
j | заходы на канал | auto +i | R |
k | постукивание | auto +K |  | (считаются только для локального сервера)
m | сообщения/уведомления | auto +m | M |
n | изменения ников | auto +N |  |
t | текст | kick | b | Сообщения/уведомления от одного пользователя, наподобие старого +f. Будет кикать или банить пользователя.

Пример:

    *** ChanOp sets mode: +f [20j,50m,7n]:15
    <ChanOp> ляля
    *** Evil1 (~fdsdsfddf@Clk-17B4D84B.blah.net) has joined #test
    *** Evil2 (~jcvibhcih@Clk-3472A942.xx.someispcom) has joined #test
    *** Evil3 (~toijhlihs@Clk-38D374A3.aol.com) has joined #test
    *** Evil4 (~eihjifihi@Clk-5387B42F.dfdfd.blablalba.be) has joined #test
    -- повторяется XX линий --
    *** Evil21 (~jiovoihew@Clk-48D826C3.e.something.org) has joined #test
    -server1.test.net:#test *** Channel joinflood detected (limit is 20 per 15 seconds), putting +i
    *** server1.test.net sets mode: +i
    <Evil2> fsdjfdshfdkjfdkjfdsgdskjgsdjgsdsdfsfdujsflkhsfdl
    <Evil12> fsdjfdshfdkjfdkjfdsgdskjgsdjgsdsdfsfdujsflkhsfdl
    <Evil15> fsdjfdshfdkjfdkjfdsgdskjgsdjgsdsdfsfdujsflkhsfdl
    <Evil10> fsdjfdshfdkjfdkjfdsgdskjgsdjgsdsdfsfdujsflkhsfdl
    <Evil8> fsdjfdshfdkjfdkjfdsgdskjgsdjgsdsdfsfdujsflkhsfdl
    -- повторяется XX линий --
    -server1.test.net:#test *** Channel msg/noticeflood detected (limit is 50 per 15 seconds), putting +m
    *** server1.test.net sets mode: +m
    *** Evil1 is now known as Hmmm1
    *** Evil2 is now known as Hmmm2
    *** Evil3 is now known as Hmmm3
    *** Evil4 is now known as Hmmm4
    *** Evil5 is now known as Hmmm5
    *** Evil6 is now known as Hmmm6
    *** Evil7 is now known as Hmmm7
    *** Evil8 is now known as Hmmm8
    -server1.test.net:#test *** Channel nickflood detected (limit is 7 per 15 seconds), putting +N
    *** server1.test.net sets mode: +N

Можно немного усложнить:
Вместо действия по умолчанию, для некоторых типов флуда, можно задать ещё один тип, например: +f [20j#R,50m#M]:15
Это установит режим канала +R, если превышен лимит заходов на канал (>20 заходов в 15 секунд), и установит режим +M, если превышен лимит сообщений (>50 сообщений в 15 секунд).
Так же есть возможность "убрать режим спустя X минут": +f [20j#R5]:15 установит режим канала +R, если превышен лимит, и снимет его спустя 5 минут.
В конфигурации сервера можно задать время снятия режима по умолчанию(set::modef-default-unsettime), поэтому, если вы напечатаете +f [20j]:15, это трансформируется в +f [20j#i10]:15 (по умолчанию), вы можете установить [20j#i2]:15 или что-то похожее. Если вы хотите полностью отключить снятие режима канала, наберите +f [20j#i0]:15.
Старый режим +f (количество сообщений от конкретного пользователя) сейчас доступен как 't', +f 10:6 теперь задаётся как +f [10t]:6 и +f *20:10 теперь +f [20t#b]:10. IRCd автоматически конвертирует старые режимы +f в новые. Замечание: Время снятия режима по умолчанию не работает для 't' банов ([20t#b30]:15 не будет работать).
Выбор, какой лучше поставить режим +f, весьма зависит от самого канала. Сколько на нём сидит людей? Это игровой канал или нет (например: викторина или мафия)? Может, это главный канал в сети, или на этот канал автоматически заходит много людей? И т.д.
Не существует единого режима +f, который бы был хорош для всех каналов, но для ознакомления можно начать со следующих примеров и изменить их для своих нужд в дальнейшем:
+f [30j#i10,40m#m10,7c#C15,10n#N15,30k#K10]:15
30 заходов на канал в течение 15 секунд, если превышен лимит, устанавливается режим +i на 10 минут
40 сообщений в канал в течение 15 секунд, если превышен лимит, устанавливается режим +m на 10 минут
7 ctcp запросов в течение 15 секунд, если превышен лимит, устанавливается режим +C на 15 минут
10 изменений ника в течение 15 секунд, если превышен лимит, устанавливается режим +N на 15 минут
30 "постукиваний" в течение 15 секунд, если превышен лимит, устанавливается режим +K на 10 минут
Если канал более-менее большой (>75 пользователей), вы можете увеличить чувствительность на заходы в канал (до 50) и количество сообщений (60 или 75).
Что по поводу снятия режимов канала, то вы должны хорошенько подумать... Вдруг возникнет ситуация, когда на канале не будет оператора? Должен ли я буду закрыть канал на 15 минут (что не хорошо для пользователей) или же на 5 (что хорошо для флудеров, которые могут подождать 5 минут и атаковать канал снова)? В зависимости установок защиты по типу флуда, пользователи не смогут зайти на канал (+i) или говорить (+m), что является не таким страшным, по сравнению с невозможностью сменить свой ник (+N) или посылать ctcp запросы в канал (+C), поэтому вы можете использовать различное время истекания режимов.
Режим канала j
Режим +f предотвращает вероятность флуда заходами на канал, по этому эта возможность "глобальна". К примеру, если будет установлена защита в виде 5:10 и 5 разных пользователей зайдут в течение 10 секунд, защита от флуда сработает. Режим канала +j работает по-другому. Он работает на основе конкретного пользователя. Работая быстрее, чем защита от заходов на канал, он разработан для защиты против флуда входов/выходов на канал ("дверной" флуд). Режим задаётся параметрами в виде X:Y, где X - количество входов, а Y - количество секунд. Если пользователь превышает лимит, он не сможет зайти на канал.

3.13 - Типы банов

Основные типы бана и скрытые хосты
UnrealIRCd поддерживает основные типы банов, такие как +b nick!user@host.
Если хост скрыт: 'rox-ACB17294.isp.com' и вы установили бан *!*@rox-ACB17294.isp.com, а пользователь установил на себя -x (и его хост стал, к примеру 'dial-123.isp.com), то пользователь будет всё равно забанен. Баны всегда проверяются на реальные и скрытые хосты.
IP так же доступны (eg: *!*@128.*) и так же всегда проверяются.
Баны на скрытые IP требуют некоторых пояснений:
Если у пользователя IP 1.2.3.4, его скрытый хост будет 341C6CEC.8FC6128B.303AEBC6.IP.
Если вы забаните *!*@341C6CEC.8FC6128B.303AEBC6.IP, то под бан будет попадать и *!*@1.2.3.4
Если вы забаните *!*@*.8FC6128B.303AEBC6.IP, то под бан будет попадать и *!*@1.2.3.*
Если вы забаните *!*@*.303AEBC6.IP, то под бан будет попадать и *!*@1.2.*
Надеемся, что данная информация окажется полезной, когда понадобится устанавливать бан.
Расширенные типы бана
Расширенные типы бана имеют вид: ~[!]<тип>:<параметрgt;. Доступные типы:
Эти баны позволяют вам забанить (или сделать исключение), базируясь на вещах, отличных от традиционной маски nick!user@host. Так же есть поддержка таких вещей, как "молчание" пользователей.
Данные типы банов определяют последствия после их задействования:

тип: | имя | разъяснение:
~q | тихий | Люди, попадающие под бан, могут заходить на канал, но не могут говорить, пока у них не будет +v или выше. Пример: ~q:*!*@blah.blah.com
~n | запрет на смену ника | Люди, попадающие под бан, не могут изменить ник, пока у них не будет +v или выше. Пример: ~n:*!*@*.aol.com
~j | вход | Если пользователь подпадает, то не может зайти на канал. Однако, если он уже на канале, то он может говорить и менять свой ник. Пример: ~j:*!*@*.aol.com Может быть полезно для запрета подключений людей с одного провайдера, но если они уже на канале, то могут свободно общаться и менять ник, как будто после /INVITE.

Эти типы банов вводят новый критерий для использования:

~c | [префикс]канал | Если люди сидят на указанном канале, они не смогут зайти. Префиксом можно указать (+/%/@/&/~), каких именно пользователей необходимо банить. Будут забанены те, у кого права на указанном канале равны или выше. Пример: +b ~c:#lamers, +e ~c:@#trusted
~r | настоящее имя | Если настоящее имя пользователя попадает под бан, он не сможет зайти. Пример: ~r:*Stupid_bot_script* ЗАМЕЧАНИЕ: Подчёркивание ('_') обозначает и пробел (' '), и подчёркивание ('_'), поэтому, данный бан будет влиять и на 'Stupid bot script v1.4'.
~R | зарегестрирован | Если пользователь идентифицирован на сервисах (обычно NickServ) и подпадает под ник, то бан сработает. Для данного типа бана есть только одно применение - в использовании для исключений (+e). Пример: +e ~R:Nick позволяет Nick быть на канале, не смотря на другие баны, если он идентифицировался на NickServ и пользуется ником Nick.
~a | аккаунт | Если пользователь залогинился на сервисах с указанным аккаунтом, то он попадёт под бан Данный бан отличается от ~R тем, что пользователь с ником ABC может быть залогинен под аккаунтом XYZ. Не все сервисы (имеется ввиду различные поставщики) поддерживают это. Если не поддерживают, используйте ~R. Пример: +e ~a:SomeName позволит пользователю (-лям), который залогинен на сервисах под аккаунтом SomeName, зайти на канал, не смотря на баны.

Можно стекировать баны первого и второго вида. Например +b ~q:~c:#lamers заставит молчать всех, кто сидит на #lamers.
Баны из второй группы могут так же использоваться для исключений приглашений (+I), например вот так +I ~c:#trusted и +I ~a:accountname.

3.14 - Спамфильтр

Спамфильтр - это новая система борьбы со спамом, рекламой, червями и другими подобными вещами. Она работает как система ценза, но имеет некоторые преимущества.

Спамфильтры добавляются путём команды /spamfilter, которая имеет следующий синтакс:
/spamfilter [add|del|remove|+|-] [тип] [действие] [время_действия] [причина] [регулярное_выражение]

[тип] | определяет тип цели фильтра:
Символ: | Пункт конфигурационного файла: | Описание:
c | channel | Сообщение в канале
p | private | Личное сообщение (от пользователя пользователю)
n | private-notice | Личное уведомление
N | channel-notice | Уведомление в канал
P | part | Причина покидания канала
q | quit | Причина выхода
d | dcc | Имя файла DCC
a | away | Сообщение отсутствия
t | topic | Установки топика
u | user | Бан на пользователя: направлен на nick!user@host:realname
Можно определить сразу несколько целей, например: cpNn
[действие] | определяет, что будет предпринято (только одно действие можно определить)
kill | "убивает" пользователя
tempshun | делает shun на текущую сессию пользователя (если он переподключится, shun пропадёт)
shun | устанавливает shun на хост
kline | устанавливает kline на хост
gline | устанавливает gline на хост
zline | устанавливает zline на хост
gzline | устанавливает gzline (глобальный zline) на хост
block | только блокирует сообщение
dccblock | пользователю запрещается посылать любое DCC
viruschan | принудительно покидает все каналы, заходит на set::spamfilter::virus-help-channel, отключает все команды кроме PONG, ADMIN, и сообщает/уведомляет об этом на set::spamfilter::virus-help-channel
warn | посылает уведомление ирц-операторам (сномаска spamfilter) и уведомляет пользователя о том, что его сообщение было перехвачено. Никаких действией с пользователем не происходит, сообщение не блокируется.
[время_действия] | Длительность установленного фильтра на *line/shun, используйте '-' для установок по умолчанию или для пропуска задания времени (eg: если действие = 'block')
[причина] | Причина Block/*line/shun. Вы НЕ МОЖЕТЕ использовать пробелы, вместо них используйте подчёркивания ('_'). Для установки в причину подчёркивания ('_'), используйте двойное подчёркивание ('__'). Используйте '-' для установок по умолчанию.
[регулярное_выражение] | действующее регулярное выражение (regexp) или "нецензурное слово", которое заблокируется и вызовет реакцию спамфильтра

Пример: /spamfilter add pc gline - - Come watch me on my webcam
Если в сообщении в канал или в приват будет найден текст come watch me on my webcam, то сообщение заблокируется и немедленно добавится gline.
Ещё пример: /spamfilter add pc block - - come to irc\..+\..+
Это регулярное выражение, которое совпадает с Hi, come to irc.blah.net
Пример с указанием времени и причины:
/spamfilter add p gline 3h Please_go_to_www.viruscan.xx/nicepage/virus=blah Come watch me on my webcam
Если come watch me on my webcam найдено в приватном сообщении, то на пользователя устанавливается gline на 3 часа с причиной Please go to www.viruscan.xx/nicepage/virus=blah.
Фильтры спама, добавленные с помощью /spamfilter, действуют на всю сеть. Они работают независимо от того, установлен ли на пользователе или канале флаг +G, спамфильтр не проверяется только на операторах и ulines (сервисы).

Вы так же можете добавлять спамфильтры в конфигурационные файлы, но это будут только локальные спамфильтры (т.е. не будут действовать во всей сети, используйте удалённые включения (remote includes) для этого). Синтакс spamfilter { } блоков описан тут.
Пример:

    spamfilter {
        regex "//write \$decode\(.+\|.+load -rs";
        target { private; channel; };
        reason "Generic $decode exploit";
        action block;
    };

set::spamfilter::ban-time позволяет установить время по умолчанию для *lines/shuns, которое добавляет спамфильтр (по умолчанию: 1 сутки)
set::spamfilter::ban-reason позволяет установить причину по умолчанию (по умолчанию: 'Spam/advertising')
set::spamfilter::virus-help-channel позволяет установить канал для действия 'viruschan' (по умолчанию: #help)
set::spamfilter::virus-help-channel-deny позволяет запретить нормальный вход на virus-help-channel (по умолчанию: no)

Обнаружение медленного спамфильтра
Регулярное выражение спамфильтра может замедлить работу IRCd. Всё зависит от того, какое регулярное выражение вы использовали (и как движок регулярных выражений обрабатывает его). Некоторые из них очень быстро выполняются: и UnrealIRCd может выполнять их тысячами в секунду. Другие же очень медленны и может занять несколько секунд на выполнение, таким образом остановить выполнение IRCd.
Чтобы справиться с этим, в Unreal есть новая функция "Обнаружение медленного спамфильтра": Для каждого спамфильтра Unreal проверяет, сколько времени займёт его выполнение. Если это время превышает порог, заданный в конфигурации, IRCd предупредит или же удалит спамфильтр.
Показ предупреждения конфигурируется через set::spamfilter::slowdetect-warn (по умолчанию: 250ms) и автоматическое удаление через параметр set::spamfilter::slowdetect-fatal (по умолчанию: 500ms). Если вы хотите отключить "Обнаружение медленного спамфильтра", то установите оба значения в 0 (ноль).
Этот функционал сейчас не доступен в Windows.

3.15 - CIDR

UnrealIRCd теперь поддерживает CIDR (Classless Interdomain Routing). CIDR позволяет банить диапазоны IP. Т.к. IP адреса провайдера размещены посредством CIDR, устанавливая баны с помощью CIDR, можно легко забанить провайдера. Unreal поддерживает CIDR для протоколов IPv4 и IPv6. CIDR маски можно использовать в allow::ip, oper::from::userhost, ban user::mask, ban ip::mask, except ban::mask, except throttle::mask, и except tkl::mask (для gzline, gline и shun). Дополнительно, CIDR может быть использован в /kline, /gline, /zline, /gzline и /shun. Unreal использует стандартный синтакс для IP/bits, т.е., 127.0.0.0/8 (влияет на 127.0.0.0 - 127.255.255.255), и fe80:0:0:123::/64 (влияет на fe80:0:0:123:0:0:0:0 - fe80:0:0:123:ffff:ffff:ffff:ffff).

3.16 - Использование национальных наборов символов в никах

UnrealIRCd теперь позволяет использование национальных наборов символов в никах. Это можно сделать в set::allowed-nickchars.
Таблица выбора:

Имя: | Описание: | Кодировка:
catalan | Каталанская кодировка | iso8859-1 (latin1)
danish | Датская кодировка | iso8859-1 (latin1)
dutch | Нидерландская кодировка | iso8859-1 (latin1)
french | Французская кодировка | iso8859-1 (latin1)
german | Немецкая кодировка | iso8859-1 (latin1)
swiss-german | Швейцаро-немецкая кодировка(без es-zett) | iso8859-1 (latin1)
icelandic | Исландская кодировка | iso8859-1 (latin1)
italian | Итальянская кодировка | iso8859-1 (latin1)
spanish | Испанская кодировка | iso8859-1 (latin1)
swedish | Шведская кодировка | iso8859-1 (latin1)
latin1 | catalan, danish, dutch, french, german, swiss-german, spanish, icelandic, italian, swedish | iso8859-1 (latin1)
hungarian | Венгерская кодировка | iso8859-2 (latin2), windows-1250
polish-iso | Польская кодировка (учтите, что polish-w1250 более распостранена!) | iso8859-2 (latin2)
romanian | Румынская кодировка | iso8859-2 (latin2), windows-1250, iso8859-16
latin2 | hungarian, polish-iso, romanian | iso8859-2 (latin2)
polish-w1250 | Польская кодировка, windows вариант | windows-1250
slovak-w1250 | Словакская кодировка, windows вариант | windows-1250
czech-w1250 | Чешская кодировка, windows вариант | windows-1250
windows-1250 | polish-w1250, slovak-w1250, czech-w1250, hungarian, romanian | windows-1250
greek | Греческая кодировка | iso8859-7
turkish | Турецкая кодировка | iso8859-9
russian-w1251 | Русская кодировка | windows-1251
belarussian-w1251 | Белорусская кодировка | windows-1251
ukrainian-w1251 | Украинская кодировка | windows-1251
windows-1251 | russian-w1251, belarussian-w1251, ukrainian-w1251 | windows-1251
hebrew | Израильская кодировка | iso8859-8-I/windows-1255
chinese-simp | Упрощённый китайский | Multibyte: GBK/GB2312
chinese-trad | Традиционный китайский | Multibyte: GBK
chinese-ja | Японский | Multibyte: GBK
chinese | китайский-* | Multibyte: GBK
gbk | китайский-* | Multibyte: GBK

Замечание 1: Пожалуйста, сообщите, если некоторые комбинации вызывают проблемы.

Например, при комбинации latin* и chinese-* могут возникнуть неполадки, и Unreal выдаст ошибку. Смешивание других кодировок может привести к проблемам корректного отображения, поэтому Unreal выдаст предупреждение, если вы будете пытаться использовать одновременно latin1/latin2/greek.
Замечание 2: Регистронезависимость (т.е. когда буква в нижнем регистре будет являться ею же и в верхнем) относится только к кодировке US-ASCII, т.е. "я" и "Я" распознаются как разные символы и ники "Ясь" и "ясь" могут существовать одновременно. Это является следствием ограничения текущей системы стандартов IRCd и эта проблема не может быть решена в настоящем времени. Люди должны быть предупреждены об этом ограничении. Заметим, что данное ограничение распространяется и на каналы, по этому будьте внимательны и помните, что для кодировки US-ASCII регистронезависимость всегда существует.

Замечание 3: Базовый набор символов (a-z A-Z 0-9 [ \ ] ^ _ - { | }) всегда разрешён.

Пример №1, для людей из Западной Европы:

    set { allowed-nickchars { latin1; }; };

Пример №2, если у вас в основном китайские пользователи, и вы желаете использовать "нормальный" китайский язык:

    set { allowed-nickchars { chinese-simp; chinese-trad; }; };

3.17 - Поддержка CGI:IRC

UnrealIRCd поддерживает подмену хоста для CGI:IRC, что означает, что вы можете пометить определённые CGI:IRC гейты как "доверенные". В этом случае IRCd будет показывать реальный хост/IP пользователей везде в IRC, вместо хоста/ip CGI:IRC-гейта.

Смотрите cgiirc block для того, чтобы сконфигурировать поддержку CGI:IRC.

3.18 - Синхронизация времени

Для IRC-серверов очень важно, чтобы системное время было точным. Без точного времени каналы могут быть десинхронизированы, пользователи могут быть отключенны с причиной killed, каналы могут не отображаться по команде /LIST. Вкратце, неточное время - большая проблема.

UnrealIRCd обладает встроенной поддержкой синхронизации. Хотя не настолько оптимальной (разбежка может составлять несколько секунд), но это решает большинство проблем. Если у вас есть возможность, мы рекомендуем использовать программное обеспечение для синхронизации времени (такое как ntpd под *NIX или сервис синхронизации под Windows. В этом случае вы можете выключить синхронизацию времени IRC-сервером).

Что же делает UnrealIRCd (по умолчанию) при загрузке? Он посылает (по умолчанию) запрос на сервера синхронизации времени и назначает встроенное время ircd (НЕ системное время) в соответствии с тем сервером, от которого ответ пришёл первым (т.е. он был более быстрым). Если, по каким-то причинам, Unreal не получает ответа от серверов синхронизации в течении 3-х секунд, IRCd продолжит свою загрузку.

Конфигурация синхронизации времени (так же и отключение) происходит посредством блока set::timesynch, подробности в документации.

3.19 - Способы аутентификации

В различных местах в конфигурационном файле, например в блоке oper, блоке allow и блоке link, вы можете аутентифицировать клиентов по паролю или же другими способами.
Вы можете указать пароль как в открытом виде, так и с использованием различных типов аутентификации (Auth-type).
Доступны следующие типы аутентификации:

Auth-type: | Описание: | Зависимости: | Как сгенерировать:
crypt | UNIX crypt | Windows: необходим OpenSSL | /MKPASSWD crypt :пароль
md5 | MD5 с солью | Always available | /MKPASSWD md5 :пароль
sha1 | SHA1 с солью | необходим OpenSSL | /MKPASSWD sha1 :пароль
ripemd160 | RIPEMD160 с солью | необходим OpenSSL | /MKPASSWD ripemd160 :пароль
sslclientcert | Сертификат SSL клиента | необходим OpenSSL | Путь к файлу публичного сертификата .pem.
sslclientcertfp | Отпечаток сертификата SSL клиента | необходим OpenSSL | openssl x509 -in name-of-pem-file.pem -sha256 -noout -fingerprint

Команда /MKPASSWD доступна онлайн IRCOp. Вместо неё можно использовать команду прямо из шелл: ./unreal mkpasswd тип-хэша пароль.
Не все способы аутентификации доступны на всех системах, смотрите зависимости из таблицы выше.
Пример: Хэшированный MD5 пароль в блоке vhost
1. Вы хотите использовать пароль test и хотите использовать хэш md5.
Если вы оператор (IRCOp), то вы можете просто ввести такую команду /MKPASSWD md5 :test.
Так же, можете это сделать из шелла: ./unreal mkpasswd md5 test.
В любом случае, вы получите пароль вида $NIV0bSfG$UTMvI/KdMwe4cZqmT/23qw== (полученный результат может отличаться!)
2. Теперь добавьте полученный результат в ваш блок vhost и укажите, что это хэш md5.
Пример:

    vhost {
        vhost I.love.Tux;
        from { userhost *@*; };
        login Tux;
        password "$NIV0bSfG$UTMvI/KdMwe4cZqmT/23qw==" { md5; };
    };

3. Чтобы использовать этот vhost, введите /VHOST Tux test
Пример: Аутентификация клиента по сертификатам SSL
`sslclientcert` и `sslclientcertfp` исключительные способы аутентификации, которые позволяют аутентифицировать SSL пользователей по их сертификатам.
Используя эти методы, убедитесь, что пользователи используют SSL и указанный пользовательский сертификат.
Вот пример, как можно это использовать в блоке oper:
1. Создайте сертификат SSL, если у вас его нет (поищите в google 'create ssl certificate', если вы не знаете как)
2. Получите хэш SHA256 сертификата используя команду:

    openssl x509 -in name-of-pem-file.pem -sha256 -noout -fingerprint

3. В конфигурационном файле замените исходный пароль (в нашем примере это test) на хэш и укажите способ аутентификации в sslclientcertfp. Вот пример:

    oper test {
         password "E7:4D:46:F1:9F:F4:68:F5:E8:E3:49:CC:28:5D:F9:65:85:BA:4F:16:B6:49:02:E3:34:E6:E7:6A:FE:76:A7:98" { sslclientcertfp; };
         flags { global; can_override; };
         class clients;
       };

4. Перечитайте файл конфигурации сервера (/REHASH).
5. Теперь подключитесь по SSL и убедитесь что ваш клиент использует SSL сертификат из шага #2.
6. Теперь вы можете получить права оператора командой /oper test x. Пароль по прежнему нужно указать, но он может быть абсолютно любым (x в этом примере), так как он игнорируется и используется для аутентификации клиентский сертификат SSL.
7. Поздравляю, теперь вы используете самый безопасный метод аутентификации, доступный в UnrealIRCd.
Ещё одно весьма полезное применение для использования `sslclientcertfp` находится в link::password-receive

3.20 - Другие возможности

UnrealIRCd имеет множество других возможностей, не все из которых тут раскрыты... Вы можете найти их в другом месте самостоятельно.

4.0 - Конфигурирование вашего unrealircd.conf

Прежде всего, создание вашего первого unrealircd.conf займёт примерно 15-60 минут. Создание хорошего unrealircd.conf займёт гораздо больше времени. Вы не должны стремится запустить как можно быстрее IRCd, гораздо быстрее будет пройтись по всем пунктам последовательно. Если у вас возникают проблемы, проверьте синтаксис, проверьте документацию и ЧаВО прежде, чем просить помощи или сообщать об ошибке.

4.1 Обзор структуры конфигурационного файла

Новая система базируется на использовании блоков. Каждая секция или блок имеет специфический формат. К примеру:

    <block-name> <block-value> {
        <block-directive> <directive-value>;
    };

<block-name> - это тип блока, такой как me или admin. <block-value> иногда определяет значение, к примеру /oper login, но иногда может быть и подтипом, как например в ban user.

<block-directive> - это индивидуальное значение в блоке и <directive-value> соответствующее ему значение. Если <directive-value> содержит пробелы, или символы, соответствующие комментариям, то они должны быть в двойных кавычках. Если в такой строке необходимо использовать кавычку, используйте \", и это будет воспринято как символ кавычки.

A <block-directive> может содержать директивы в себе, в этом случае необходимо заключать их в фигурные скобки. В некоторых блоках нет директив, и они определяются просто в <block-value>, например, как include. На заметку, здесь нет установленного формата, т.е. целый блок может быть записан и в одну линию, а может и в несколько. Для удобства чтения был принят формат, который употребляется здесь, он же рекомендован к использованию в файле.

Замечание: конфигурационный файл регистрозависим, поэтому BLOCK-NAME не одно и тоже, что и block-name. По поводу вхождений в блок в конфигурационном файле использовано следующая терминология. К примеру, если разговор идёт о <directive-name> в последующем примере, вы должны говорить <block-name>::<block-directive> и если директива - это подблок, на который вы хотите сослаться, вы должны добавить ещё :: и имя поддирективы.

Если беседа будет вестись о безымянной директиве, то <block-name>:: будет в данном случае означать <block-value>, или же это будет вхождение в подблок без имени.

Поддерживается три типа комментариев:

# Однострочный комментарий
// Однострочный комментарий
/* Многострочный
комментарий */

Теперь, зная как оно работает, вы можете скопировать doc/example.conf в директорию вашего UnrealIRCd (например: /home/user/Unreal3.2) и переименовать его в unrealircd.conf (ИЛИ создать ваш unrealircd.conf с нуля). Рекомендовано сделать именно так, просматривая все типы блоков и используя это руководство как справку.

4.2 - Me блок НЕОБХОДИМ (Ранее известен как M:Line)

Синтаксис:

    me {
        name <имя-сервера>;
        info <описание-сервера>;
        numeric <нумерик-сервера>;
    };

Значения абсолютно прозрачны. name определяет имя сервера, info - строчку информации о сервере, numeric определяет уникальное определяющее число для сервера. Это должно быть значение между 0 и 254 и оно должно быть УНИКАЛЬНО для каждого сервера в сети, т.е. НЕ должно быть разных серверов с одинаковыми нумериками.

Пример:

    me {
        name "irc.foonet.com";
        info "FooNet Server";
        numeric 1;
    };

4.3 - Admin блок НЕОБХОДИМ (Ранее известен как A:Line)

Синтаксис:

    admin {
        <text-line>;
        <text-line>;
    };

Admin блок определяет текст, который будет выводиться по команде /admin. Вы можете определить много информации для отображения, но по стандарту необходимо иметь хотя бы ник администратора и его email. Если желаете, можно добавить любую дополнительную информацию.

Пример:

    admin {
        "Bob Smith";
        "bob";
        "widely@used.name";
    };

4.4 - Class блок НЕОБХОДИМ (Ранее известен как Y:Line)

Синтакс:

    class <name> {
        pingfreq <частота-пинга>;
        connfreq <частота-соединения>;
        maxclients <максимальное-количество-клиентов>;
        sendq <send-queue>;
        recvq <recv-queue>;
    };

Блок Class определяет классы, в которые входят соединения (например, из блока allow или servers из блока link). Вы можете сделать составными блоки class (т.е.: для servers, clients, opers).

name - это описательное имя, вроде "clients" или "servers", данное имя используется для ссылок в блоках allow/link/oper и др.

pingfreq - это количество секунд между командой PING от сервера (рекомендовано использовать промежуток от 90 до 180).

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

maxclients определяет максимум (всего) число клиентов/серверов, которые могут быть в этом классе

sendq определяет количество данных, которое можно передавать подряд (очень большое для серверов с малым каналом и среднее для клиентов)

recvq определяет количество данных, которое можно получить одновременно и используется для контроля за флудом (применимо только к нормальным пользователям, попробуйте поэкспериментировать с промежутком 3000-8000, 8000 установлено по умолчанию).

Примеры:

    class clients {
        pingfreq 90;
        maxclients 500;
        sendq 100000;
        recvq 8000;
    };

    class servers{
        pingfreq 90;
        maxclients 10; /* Максимальное количество серверов в блоке link */
        sendq 1000000;
        connfreq 100; /* Через сколько секунд повторять попытку соединения */
    };

4.5 - Allow блок НЕОБХОДИМ (Ранее известен как I:Line)

Синтакс:

    allow {
        ip <пользователь@маска-ip-соединения>;
        hostname <пользователь@маска-host-соединения>;
        class <класс-соединения>;
        password <пароль-на-соединение> { <тип-авторизации>; };
        maxperip <максимальное-количество-соединений-на-один-ip>;
        ipv6-clone-mask <количество-бит>;
        redirect-server <сервер-переадресации>;
        redirect-port <порт-переадресации>;
        options {
            <опция>;
            <опция>;
            ...
        };
    };

Класс allow позволяет задать, кто может подключиться к данному серверу; можно сделать несколько блоков allow.

О совпадениях
Контроль доступа работает следующим образом: ip совпадает ИЛИ хост совпадает, поэтому "hostname *@*"; и "ip *@1.2.3.4"; будут совпадать. Чтение блоков allow идёт сверху вниз, поэтому, если вам необходимо задать специфические блоки host/ip allow, то задавайте их ПОСЛЕ главного блока *@* allow. Дополнительно, если вы хотите задать блок, который базируется только на IP, тогда установите в hostname что-нибудь неправильное, например "hostname NOBODY;", это позволит вам сделать блок только по IP.

ip
IP маска - это user@ip, user - это идент (ident) и часто устанавливается в *, ip - это ip-маска. Примеры: *@* (отовсюду), *@192.168.* (только для адресов, начинающихся с 192.168), и др.

host
Хостмаска - это user@host, и снова, user часто выставляется в *. Примеры: *@* (отовсюду), *@*.wanadoo.fr (только от wanadoo.fr).

password (не обязательно)
Требует пароль на соединение. Так же можно указать метод шифрования пароля.

class
Определяет имя класса, пользователям/серверам которого можно подключаться.

maxperip (необязательно, но рекомендуется)
Позволяет указать, сколько соединений с одного IP разрешено на этот сервер (пример: maxperip 4;).

ipv6-clone-mask (опционально, по умолчанию set::default-ipv6-clone-mask)
Данная опция позволяет контролировать обнаружение клонов. Если два клиента подключаются из двух разных адресов IPv6, но только последние пару бит отличаются, то это практически гарантия того, что оба клиента - одна персона. Данная опция применима только для allow::maxperip. К примеру, если вы укажете эту опцию в 128, то каждый адрес IPv6 будет считаться уникальным. В соответствии с текущими политиками выделения пространства IP рекомендуется в allow block использовать величину 64.

redirect-server (необязательно)
Если класс полон, перенаправляет пользователей на указанный сервер (если такое поддерживают клиенты [mIRC 6 поддерживает]).

redirect-port (необязательно)
Если указан redirect-server, вы можете задать порт для него, иначе будет назначен 6667.

options блок (необязательно)
Правильные опции:
useip всегда показывать IP вместо хостнейма
noident не использовать ident, вместо него использовать имя пользователя из клиента
ssl Только пользователи из этого блока могут подключаться к серверу по SSL
nopasscont продолжить совпадение, если пароль не был задан (можно клиентов определить в специальные классы, если они подставили пароль).

Примеры:

    allow {
        ip *;
        hostname *;
        class clients;
        maxperip 5;
    };

    allow {
        ip *@*;
        hostname *@*.passworded.ugly.people;
        class clients;
        password "f00Ness";
        maxperip 1;
    };

4.6 - Listen блок НЕОБХОДИМ (Ранее известен как P:Line)

Синтаксис:

    listen <ip:port> {
        options {
            <option>;
            <option>;
            ...
        };
    };

Данный блок позволяет определить, какие порты должен прослушивать IRCD. Если опции вам не нужны, можно определить только блок в виде <ip:port>;.

ip и port
Вы можете установить ip в * чтобы ожидать подключения на всех доступных ip адресах, или определить только необходимый ip (обычно необходим в провайдерах shell-ов). port - это порт, на котором вы хотите включить прослушивание. Можно так же определить диапазон портов, вместо указания каждого из них индивидуально. Например, 6660-6669 будет прослушивать все порты от 6660 до 6669 (включительно).

Информация для пользователей IPv6
Если на сервере вы используете IPv6, вам необходимо заключать IP в квадратные скобки. Например, [::1]:6667 (будет прослушиваться порт 6667 на localhost). Если вы используете IPv6 и вам необходимо прослушивать на определённом IPv4 адресе, вам необходимо использовать ::ffff:ipv4ip. Пример: [::ffff:203.123.67.1]:6667 будет прослушивать на 203.123.67.1 порт 6667. Естественно, можно использовать и *.

options блок (необязательно)
Если вы желаете, можно определить специальные опции для указанного порта, такие как:

clientsonly | порт только для клиентов
serversonly | порт только для серверов
java | CR поддержка чата на java
ssl | порт для зашифрованного соединения (SSL)

Примеры:

    listen *:6601 {
        options {
            ssl;
            clientsonly;
        };
    };

Если без опций:

listen *:8067;
listen 213.12.31.126:6667;
listen *:6660-6669;

4.7 - Oper блок РЕКОМЕНДОВАН (Ранее известен как O:Line)

    oper <имя> {
        from {
            userhost <хостмаска>;
            userhost <хостмаска>;
        };
        password <пароль> { <тип-аутентификации>; };
        require-modes <режимы>
        class <имя-класса>;
        flags <флаги>;
        flags {
            <флаг>;
            <флаг>;
            ...
        };
        swhois <информация в whois>;
        snomask <сномаска (snomask)>;
        modes <режимы>;
        maxlogins <число>;
    };

Блок oper позволяет назначить IRC-операторов на вашем сервере. oper:: определяет логин команды /oper. oper::from::userhost - это user@host маска, под которую должен попадать пользователь. Вы можете определить более, чем одну хостмаску в oper::from::userhost. Опционально можно установить oper::require-modes для определённых режимов (таких как r или z), которые необходимы чтобы были у пользователя перед тем, как он бы стал оператором. Указав данные режимы, мы потребуем от пользователя быть зарегистрированным на nickserv или использовать безопасное подключение перед тем, как становиться оператором.

oper::password - пароль, который должен указать пользователь. oper::password::auth-type позволяет вам указать метод аутентификации для этого пароля. Если вы используете пароли открытым текстом, то не указывайте опцию oper::password::auth-type. Доступные методы аутентификации, а так же примеры их использования в блоке oper, можно найти в Методах аутентификации.

Замечание: логин и пароль РЕГИСТРОЗАВИСИМЫ.

oper::class директива определяет имя уже существующего (в конфигурационном файле должен следовать перед oper-блоком) класса, который будет использовать блок oper.

oper::flags директива имеет 2 формата. Если вы желаете использовать старый стиль флагов для операторов, например, OAa, используйте метод задания флагов <flags>, если желаете использовать новый стиль, например, services-admin, тогда используйте метод флагов { <flag>; } . Ниже приведён список всех флагов (в обоих форматах) и что они обозначают.

Старый флаг | Новый флаг | Описание
o | local | Локальный оператор
O | global | Глобальный оператор
C | coadmin | Помощник администратора сервера
A | admin | Администратор сервера
a | services-admin | Администратор сервисов
N | netadmin | Администратор сети
r | can_rehash | Оператор может использовать /rehash
D | can_die | Оператор может использовать /die
R | can_restart | Оператор может использовать /restart
h | helpop | Оператор получает режим пользователя +h (оператор помощи (helpop))
w | can_wallops | Оператор может посылать /wallops
g | can_globops | Оператор может посылать /globops
c | can_localroute | Может соединять сервера локально
L | can_globalroute | Может соединять сервера глобально
k | can_localkill | Может использовать команду /kill на локальных пользователей
K | can_globalkill | Может использовать /kill на всех пользователей
b | can_kline | Может использовать /kline
B | can_unkline | Может использовать /kline -u@h
n | can_localnotice | Может посылать уведомления по локальному серверу
G | can_globalnotice | Может посылать уведомления по всем серверам
z | can_zline | Может использовать /zline
t | can_gkline | Может использовать /gline, /shun и /spamfilter
Z | can_gzline | Может использовать /gzline
W | get_umodew | Устанавливает режим +W, когда вы оператор
H | get_host | Устанавливает ваш хост в оперхост
v | can_override | Может использовать OperOverride
q | can_setq | Может устанавливать режим пользователя +q
X | can_addline | Может использовать /addline
d | can_dccdeny | Может использовать /dccdeny и /undccdeny

Флаги, устанавливаемые по умолчанию:

local | global | admin/coadmin | services-admin | netadmin
can_rehash | can_rehash | can_rehash | can_rehash | can_rehash
helpop | helpop | helpop | helpop | helpop
can_globops | can_globops | can_globops | can_globops | can_globops
can_wallops | can_wallops | can_wallops | can_wallops | can_wallops
can_localroute | can_localroute | can_localroute | can_localroute | can_localroute
can_localkill | can_localkill | can_localkill | can_localkill | can_localkill
can_kline | can_kline | can_kline | can_kline | can_kline
can_unkline | can_unkline | can_unkline | can_unkline | can_unkline
can_localnotice | can_localnotice | can_localnotice | can_localnotice | can_localnotice
| can_globalroute | can_globalroute | can_globalroute | can_globalroute
| can_globalkill | can_globalkill | can_globalkill | can_globalkill
| can_globalnotice | can_globalnotice | can_globalnotice | can_globalnotice
|  | global | global | global
|  | can_dccdeny | can_dccdeny | can_dccdeny
|  |  | can_setq | can_setq
|  |  |  | admin
|  |  |  | services-admin

Директива oper::swhois позволяет вам добавить информацию, выводимую по команде whois для оператора. [необязательно]

Директива oper::snomask позволяет установить маску получения уведомлений от сервера при взятии оператора. Для списка доступных SNOMASK смотрите секцию 3.3 [необязательно]

Директива oper::modes позволяет задать режимы оператора при взятии оператора. [необязательно]

oper::maxlogins позволяет ограничить количество логинов оператора с текущего хоста, для примера, если вы установите его в 1, то только один человек может стать оператором (из этого блока) в любое время. [необязательно]

Пример:

    oper bobsmith {
        class clients;
        from {
            userhost bob@smithco.com;
            userhost boblaptop@somedialupisp.com;
        };
        password "f00";
        flags {
            netadmin;
            can_gkline;
            can_gzline;
            can_zline;
            can_restart;
            can_die;
            global;
        };
        swhois "Пример маски whois";
        snomask cFfkoSsqNG;
    };

Немного информации об OperOverride:
OperOverride понимается как вход на канал с режимами +ikl и вход через баны(вам необходимо вначале сделать /invite самого себя), выдача оператора самому себе на канале и т.д.
Флаг can_override был добавлен как попытка остановить превышение полномочий оператора. По умолчанию ни один оператор не может делать override, вам необходимо установить флаг can_override для этого (примечание: из личного опыта, в большой и децентрализованной сети именно этот флаг вызывает больше всего проблем с "беспределом" операторов /DeathBaba/).

4.8 - DRpass блок РЕКОМЕНДОВАН (Ранее известен как X:Line)

Синтаксис:

    drpass {
        restart <пароль-для-перезапуска> { <тип-аутентификации>; };
        die <пароль-для-остановки-сервера> { <тип-аутентификации>; };
    };

Данный блок устанавливает пароли на команды /restart и /die с директивами drpass::restart и drpass::die. Доступные методы аутентификации, а так же примеры их использования, можно найти в Методах аутентификации

Пример:

    drpass {
        restart "Я-очень-люблю-перезапуски";
        die "die-you-stupid";
    };

4.9 - Директива Include

Синтаксис:
include <file-name>;

Данная директива определяет имя файла, который будет загружен как отдельный конфигурационный файл. Этот файл может содержать любой тип блоков конфигурирования и может включать другие файлы. В именах файлов поддерживаются шаблоны (wildcards), что позволяет загружать несколько файлов за один раз.

Пример 1: сетевой файл

    include mynetwork.network;

Это в случае использования отдельного сетевого файла. На данный момент все сетевые настройки могут быть включены прямо в unrealircd.conf. Или же можно включить их для загрузкив include - решать вам.

Пример 2: псевдонимы

    include aliases/ircservices.conf

Другой пример использования include. UnrealIRCd поставляется вместе с некоторыми файлами, которые содержат псевдонимы (aliases)большинства сервисов:

- aliases/ircservices.conf (IRCServices, Daylight)
- aliases/epona.conf (Epona)
- aliases/anope.conf (Anope)
- aliases/auspice.conf (Auspice)
- aliases/generic.conf (Magick, Sirius, Wrecked)
- aliases/cygnus.conf (Cygnus)
- aliases/operstats.conf (OperStats)
- aliases/genericstats.conf (GeoStats, NeoStats)

4.10 - Директива LoadModule НЕОБХОДИМА

Синтаксис:
loadmodule <имя-файла>;

Смотри тут чтобы узнать, какие модули используются.

Модули из стандартной поставки Unreal3.2:

commands.so / commands.dll - все "/" команды (пока не все, но скоро будут) НЕОБХОДИМ
cloak.so / cloak.dll - модуль скрытности НЕОБХОДИМ (или другой модуль скрытности)

Если вы хотите быть уверенным в том, что они загружены:

    loadmodule "src/modules/commands.so";
    loadmodule "src/modules/cloak.so";

или в ОС Windows:

    loadmodule "modules/commands.dll";
    loadmodule "modules/cloak.dll";

4.11 - Log блок РЕКОМЕНДОВАН

Синтаксис:

    log <имя-файла> {
        maxsize <максимальный-размер-файла>;
        flags {
            <флаг>;
            <флаг>;
            ...
        };
    };

Блок log позволяет назначить различные имена файлов логов для различных целей. log:: содержит имя файла лога. log::maxsize - это необязательная директива, позволяющая определить размер файла лога, после превышения которого он будет очищен. Можно ввести строку, используя MB для мегабайт, KB для килобайт, GB для гигабайт. log::flags определяет тип информации, которая будет занесена в файл. Список доступных флагов приведён ниже.

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

Доступные флаги:

errors | ошибки
kills | уведомления команды /kill
tkl | информация о *lines (/kline, /zline и проч.), shuns и spamfilters (добавление/удаление/истекание срока)
connects | соединения/отсоединения пользователей
server-connects | соединения/отсоединения сервера
kline | использование команды /kline
oper | попытки команды /oper (как удачные, так и неудачные)
sadmin-commands | использование команд /sa* (samode, sajoin, sapart и т.д.)
chg-commands | использование команд /chg* (chghost, chgname, chgident и т.д.)
oper-override | использование operoverride
spamfilter | совпадения спамфильтра

Пример:

    log ircd.log {
        maxsize 5MB;
        flags {
            errors;
            kills;
            oper;
            tkl;
        };
    };

4.12 - TLD блок НЕОБЯЗАТЕЛЬНО (Ранее известен как T:Line)

Синтаксис:

    tld {
        mask <хостмаска>;
        motd <файл-motd>;
        rules <файл-rules>;
        shortmotd <файл-shortmotd>;
        opermotd <файл-opermotd>;
        botmotd <файл-botmotd>;
        channel <имя-канала>;
        options {
            ssl;
        };
    };

Блок tld позволяет вам определить сообщение дня(motd), правила и канал для пользователей, базируясь на их хосте. Это весьма полезная вещь, если вы используете различные motd для различных языков. tld::mask - это user@host маска, где имя пользователя и имя хоста должны попадать под него. tld::motd, tld::shortmotd, tld::opermotd, tld::botmotd и tld::rules определяют сообщение дня (motd), короткое сообщение дня (shortmotd), сообщение дня для оператора(opermotd), сообщение дня для бота (botmotd), файл правил пользования, которые будут показаны данной хостмаске. tld::shortmotd, tld::opermotd и tld::botmotd необязательны. tld::channel необязателен, но позволяет вам определить канал, на который пользователь попадает по умолчанию при подключении к серверу. Если tld::channel определен, то он перезапишет канал для входа по умолчанию. tld::options блок позволяет определить дополнительные требования, пока что только tld::options::ssl (показывать файл для пользователей SSL) и tld::options::remote (показывать файл для удалённых пользователей).

Вхождения в блок TLD проверяются сверху вниз.

Пример:

    tld {
        mask *@*.ru;
        motd "ircd.motd.ru";
        rules "ircd.rules.ru";
    };

4.13 - Ban Nick блок НЕОБЯЗАТЕЛЕН (Ранее известен как Q:Line)

Синтаксис:

    ban nick {

        mask <ник>;
        reason <причина-бана>;
    };

Блок ban nick позволяет отключить использование ников на сервере. В ban::mask можно использовать шаблоны (wildcards) для определения множества ников, в ban::reason необходимо написать причину бана. Данные блоки в большинстве случаев устанавливаются для ников, которые используют сервисы сети.

Пример:

    ban nick {
        mask "*C*h*a*n*S*e*r*v*";
        reason "Reserved for Services";
    };

4.14 - Ban User блок НЕОБЯЗАТЕЛЕН (Ранее известен как K:Line)

Синтаксис:

    ban user {
        mask <хостмаска>;
        reason <причина-бана>;
    };

Блок позволяет забанить по маске user@host при коннекте к серверу. ban::mask - это шаблон вида user@host, ban::reason - это причина бана. Замечание: это только локальный бан, пользователь может обойти его, подключившись к другим серверам в сети.

Пример:

    ban user {
        mask *tirc@*.saturn.bbn.com;
        reason "Дурила_Картонная";
    };

4.15 - Ban IP блок НЕОБЯЗАТЕЛЕН (Ранее известен как Z:Line)

Синтаксис:

    ban ip {
        mask <ip-маска>;
        reason <причина-бана>;
    };

Блок ban ip банит указанный IP и лишает доступа к серверу, в т.ч. и попытки пользователей и серверов присоединится к серверу. Параметр ban::mask - это IP, который может содержать символы и/или шаблон. ban::reason - это причина, по которой отказано в использовании сервера. Т.к. бан распространяется и на сервера, будьте с ним очень внимательны!

Пример:

    ban ip {
        mask 192.168.1.*;
        reason "Получи реальный ip, ламeр :]!";
    };

4.16 - Ban Server блок НЕОБЯЗАТЕЛЕН (Ранее известен как q:Line)

Синтаксис:

    ban server {
        mask <имя-сервера>;
        reason <причина-бана>;
    };

Данный блок отключает возможность сервера присоединится к сети. Если забаненый сервер соединяется непосредственно к вашему серверу, то соединение запрещается. Если забаненый сервер соединяется к удалённому серверу, то ваш локальный сервер, где прописан бан, отключается от сети. Поле ban::mask определяет шаблон для совпадения с именем сервера, который пытается соединится. ban::reason определяет причину, по которой бан был установлен.

Пример:

    ban server {
        mask broken.server.my.network.com;
        reason "Он сломан!";
    };

4.17 - Ban RealName блок НЕОБЯЗАТЕЛЕН (Ранее известен как n:Line)

Синтаксис:

    ban realname {
        mask <маска-реального-имени>;
        reason <причина-бана>;
    };

Блок ban realname позволяет забанить клиента, базируясь на поле GECOS (реальное имя). Это весьма полезная вещь для прекращения флуда клонов, потому что достаточно часто боты-клоны используют одинаковое имя. ban::mask определяет реальное имя для бана, можно использовать шаблон. ban::reason определяет причину установки бана.

Пример:

    ban realname {
        mask "Bob*";
        reason "Bob sucks!";
    };

4.18 - Ban Version блок НЕОБЯЗАТЕЛЕН

Синтаксис:

    ban version {
        mask <маска-версии>;
        reason <причина-бана>;
        action [kill|tempshun|shun|kline|zline|gline|gzline];
    };

Блок ban version позволяет вам забанить IRC клиента, базируясь на ПО, которое он использует. Это работает только тогда, когда клиент посылает ответ на CTCP version. Если ответ не приходит, то бан не работает. Данная вещь позволяет вам блокировать вредоносные скрипты. ban::mask определяет версию, на которую ставится бан (можно использовать шаблон), ban::reason определяет причину установки бана. Вы так же можете установить ban::action, kill используется по умолчанию, tempshun сделает shun на коннект определённого пользователя, что эффективно против ботов/зомби с динамическими IP и не влияет на невиновных пользователей. shun/kline/zline/gline/gzline установят бан на (*@IPADDR), время действия бана может быть сконфигурировано опцией set::ban-version-tkl-time и по умолчанию равно 1 суткам.

Пример:

    ban version {
        mask "*SomeLameScript*";
        reason "SomeLameScript содержит трояна";
    };

    ban version {
        mask "*w00tZombie*";
        reason "Я ненавижу толпы зомби";
        action zline;
    };

4.19 - Ban Exceptions блок НЕОБЯЗАТЕЛЕН (Ранее известен как E:Line)

Синтаксис:

    except ban {
        mask <хостмаска>;
    };

Блок except ban позволяет определить user@host в качестве исключения для бана. Данный блок используется, если вы хотите забанить пользователей конкретного провайдера (блоком ban { } или KLINE/ZLINE), но так же хотите, чтобы определённые пользователи смогли подключиться. Директива except::mask определяет шаблон user@host для клиента, чтобы позволить ему присоединится.

Замечание: Если вы желаете стопроцентно исключить хост от всех возможных банов (кроме спамфильтра), то вы должны указать оба блока: 'except ban' и 'except tkl'.

Пример:

    except ban {
        mask myident@my.isp.com;
    };

4.20 - TKL Exceptions блок НЕОБЯЗАТЕЛЕН

Синтаксис:

    except tkl {
        mask <хостмаска>;
        type <тип>;
        type {
            <тип>;
            <тип>;
            ...
        };
    };

Блок except tkl позволяет вам определить user@host для преодолевания бана tkl, если пользователь под него попадает. Данный блок используется, если вы хотите забанить провайдера, но так же хотите, чтобы определённые пользователи могли присоединится. Директива except::mask определяет маску user@host для клиента, чтобы позволить ему присоединится. except::type определяет, какой тип бана должен преодолеваться. Возможные типы: gline, gzline, qline, gqline, shun и all, что позволяет исключать из Global Zlines, Qlines, Global Qlines, shuns и all баны (кроме KLINE/ZLINE). Если используется формат type {}, то можно определить несколько типов.

Пример:

    except tkl {
        mask myident@my.isp.com;
        type gline;
    };

4.21 - Throttle Exceptions блок НЕОБЯЗАТЕЛЕН

Синтаксис:

    except throttle {
        mask <маска-ip>;
    };

Блок except throttle позволяет определить IP маску, с которой можно преодолевать систему троттлинга. Блок используется, если вы включили троттлинг. except::mask определяет маску IP, которая не будет забанена троттлингом.

Пример:

    except throttle {
        mask 192.168.1.*;
    };

4.22 - Deny DCC блок НЕОБЯЗАТЕЛЕН (Ранее известен как dccdeny.conf)

Синтаксис:

    deny dcc {
        filename <файл-для-блокирования>;
        reason <причина-бана>;
        soft [yes|no];
    };

Блок deny dcc позволяет вам установить имя файла, передача которого невозможна посредством DCC на этом сервере. Блок используется для остановки распространения троянов и вирусов.

Параметр deny::filename определяет маску для имени файла, передачу которого нужно блокировать; deny::reason определяет причину, почему файл заблокирован.

Опция deny::soft, если установлена в 'yes', DCC будет блокирован до тех пор, пока пользователь не позволит передачу самостоятельно посредством /DCCALLOW +nickname-trying-to-send. Смотрите dccallow.conf для выяснения подробностей конфигурирования dccallow.

Пример:

    deny dcc {
        filename virus.exe;
        reason "Это вирус";
    };

    deny dcc {
        filename "*.exe";
        reason "Исполняемый файл";
        soft yes;
    };

4.23 - Deny Version блок НЕОБЯЗАТЕЛЕН (Ранее известен как V:Line)

Синтаксис:

    deny version {
        mask <имя-сервера>;
        version <номер-версии>;
        flags <флаги-компиляции>;
    };

Данный блок позволяет вам запретить линковку сервера, базируясь на версии Unreal и на опциях, с которыми он был скомпилирован. Директива deny::mask определяет маску, на какие сервера будет распространятся запрет. deny::version определяет номер версиипротокола.

К примеру, 3.0 - это 2301, 3.1.1/3.1.2 это 2302, 3.2 это 2303. Первым символом этого параметра может быть один из следующих: >, <, =, !. Этот символ сообщает IRCd, как интерпретировать версию. Если первый символ >, то будут запрещены все версии, номер у которых БОЛЬШЕ, если это <, то все версии МЕНЬШЕ, если это = , то только эта версия запрещена; ! означает, что все версии, кроме данной, запрещены. Директива deny::flags позволяет указать флаги, с которыми был или не был скомпилирован сервер. Флаги следуют один за одним без разделения, если символ идёт с ! - это значит, что сервер может не содержать его, а если нет такого префикса - это значит, что сервер должен быть скомпилирован с указанным флагом.

4.24 - Deny Link блок НЕОБЯЗАТЕЛЕН (Ранее известен как D/d:Line)

Синтаксис:

    deny link {
        mask <имя-сервера>;
        rule <выражение>;
        type <тип-запрета>;
    };

Данный блок позволяет вам использовать специфические правила для запрета линковки сервера. deny::mask определяет маску имени сервера, на которую распространяется данное правило. Директива deny::rule очень сложна и позволяет детально настраивать запрет на линковку. Поддерживается 4 операции: connected(<маска-сервера>) вернёт истину (true), если сервер попадает под маску и соединён; directcon(<маска-сервера>) вернёт true если сервер попадает под маску и напрямую соединён с сервером; via(<маска-via>,<маска-сервера>), вернёт true, если сервер попадает под маску и соединён через сервер, попадающий под via-маску; directop(), которое вернёт true если оператор, который выполнил /connect, напрямую соединен с этим сервером. Данные операции могут комбинироваться посредством && (логическое И) и || (логическое ИЛИ), они могут заключаться в скобки для группировки. Если перед оператором идет !, он проверяется на false. Если полное вычисление выражения вернёт true, то соединение будет запрещено. deny::type позволяет два различных значения: auto (применимо только для автосоединений, /connect будет работать), и all (применяется на все попытки соединений).

4.25 - Deny Channel блок НЕОБЯЗАТЕЛЕН (Ранее известен как chrestrict.conf)

Синтаксис:

    deny channel {
        channel "<маска-канала>";
        reason <причина-бана>;
        redirect "<имя-канала>";
        warn [on|off];
    };

Блок deny channel позволяет вам запретить пользователям заходить на указанные каналы. Директива deny::channel определяет маску для каналов, на которые нельзя зайти пользователям, и deny::reason определяет причину, почему это невозможно сделать. Дополнительно, можно определить deny::redirect, тогда пользователь, пытающийся зайти на канал, совпадающий с deny::channel, будет перенаправлен на deny::redirect. Если deny::warn будет установлено в on, то будет послано уведомление оператору (для сномаски EYES), когда пользователь попытается зайти на канал.

Пример

    deny channel {
        channel "#unrealsucks";
        reason "И не мечтайте";
    };

    deny channel {
        channel "#*teen*sex*";
        reason "Педофилия - страшная вещь";
        warn on;
    };

    deny channel {
        channel "#operhelp";
        reason "Канал помощи в сети #help, а не #operhelp";
        redirect "#help";
    };

4.26 - Allow Channel блок НЕОБЯЗАТЕЛЕН

Синтаксис:

    allow channel {
        channel "<маска-канала>";
    };

Блок allow channel позволяет определить специфические каналы, куда могут заходитьпользователи. Директива allow::channel определяется маской каналов, куда можно заходить.

Пример:

    allow channel {
        channel "#something";
    };

4.27 - Allow DCC блок НЕОБЯЗАТЕЛЕН

Синтаксис:

    allow dcc {
        filename "<маска-имени-файла>";
        soft [yes|no];
    };

Блок allow dcc позволяет определить исключения из блоков deny dcc, разрешено использование шаблонов. Если allow dcc::soft установлен в 'yes', блок применяется к списку 'soft dcc bans', если установлен в 'no', то применяется к нормальным ('hard') банам dcc.

Пример:

    allow dcc {
        filename "*.jpg"; /* Картинки обычно безопасны */
        soft yes;
    };

4.28 - Vhost блок НЕОБЯЗАТЕЛЕН (Ранее известен как vhosts.conf)

Синтаксис:

    vhost {
        vhost <виртуальный-хост>;
        from {
            userhost <хостмаска>;
            userhost <хостмаска>;
            ...
        };
        login <имя-логина>;
        password <пароль> { <тип-аутентификации>; };
        swhois "<информация-в-swhois>";
    };

Блок vhost позволяет определить логин/пароль, который может быть использован посредством команды /vhost, чтобы получить ненастоящее (fake) имя хоста. Параметр vhost::vhost может быть задан в виде user@host или просто host, который получит пользователь после удачного использования команды /vhost. vhost::from::userhost содержит маску в виде user@host, под которую должен попадать пользователь, чтобы получить виртуальный хост. Можно задать несколько хостмасок. vhost::login - логин и vhost::password - пароль, которые должны быть введены пользователем. Доступные методы аутентификации, а так же примеры их использования, можно найти в Методах аутентификации. И напоследок, vhost::swhois позволяет добавить строку в информацию о пользователе (whois), без необходимости добавлять его в блок Oper oper::swhois.

Пример:

    vhost {
        vhost my.own.personal.vhost.com;
        from {
            userhost my@isp.com;
            userhost myother@isp.com;
        };
        login mynick;
        password mypassword;
        swhois "Im Special";
    };

4.29 - Badword блок НЕОБЯЗАТЕЛЕН (Ранее известен как badwords.*.conf)

Синтаксис:

    badword <тип> {
        word <текст-совпадение>;
        replace <заменить-с-помощью>;
        action <replace|block>;
    };

Блок badword позволяет манипулировать вам списком, используемым для режима +G, установленного на пользователей и канал, чтобы вырезать матные слова. badword:: определяет тип, по которому будет судится, где придётся вырезать слова. Правильные типы:

- `channel` применяется на каналах с установленным режимом +G.
- `message` применяется в личных сообщениях (не в канальных ), отправленных пользователем с режимом +G.
- `quit` применяется во всех сообщениях выхода из сети.
- `all` применяется во всех указанных выше ситуациях.

badword::word может быть просто словом или же регулярным выражением (которое мы заменяем). badword::replace - чем заменить совпадающее слово. Если badword::replace не указан, то слово будет заменено на <censored>. badword::action определяет, какое действие будет предпринято, если будет найден мат. Если вы определили replace, тогда мат будет заменен, если же вы определили block, то сообщение будет заблокировано целиком. Если вы не определили badword::action, то будет назначен replace.

Пример:

    badword channel {
        word shit;
        replace shoot;
    };

4.30 - ULines блок НЕОБЯЗАТЕЛЕН (Ранее известен как U:Line)

Синтаксис:

    ulines {
        <имя-сервера>;
        <имя-сервера>;
        ...
    };

Блок ulines позволяет вам установить проверенные сервера, как заслуживающие максимального доверия. Блок должен быть использован для сервисов или статистики. Лучше не прописывать в ulines обычный сервер. Каждый сервер, входящий в список, получит максимальные привилегии.

Пример

    ulines {
        services.mynetwork.com;
        stats.mynetwork.com;
    };

4.31 - Link блок НЕОБЯЗАТЕЛЕН (Ранее известен как C/N/H:Lines)

Синтаксис:

    link <имя-сервера> {
        username <маска-пользователя>;
        hostname <маска-ip>;
        bind-ip <ip-для-прослушивания>;
        port <port-для-соединения>;
        password-connect <пароль-для-соединения>;
        password-receive <полученный-пароль> { <тип-аутентификации>; };
        hub <маска-хаба>;
        leaf <маска-листа>;
        leafdepth <глубина>;
        class <имя-класса>;
        ciphers <ssl-ciphers>;
        options {
            <опция>;
            <опция>;
            ...
        };
    };

Этот блок необходим для соединения серверов друг с другом, желательно прочитать всё, что находится ниже, т.к. это одна из важных и сложных настроек, в которой новоиспеченные администраторы часто совершают ошибки;P

имя-сервера - это имя удалённого сервера, которое идёт в его блоке me { }, например hub.blah.com (не IP адрес; имя сервера может отличаться от хостнейма).

username
Можно указать его, если необходимо использовать идент для аутентификации, нормой считается установка значения в "*".

hostname
Хост или IP адрес удалённого сервера. Используется для обоих соединений И для аутентификации/проверки со входящей стороны. Несколько примеров:

1.2.3.4 | обычный IP адрес
hub.blah.com | хост: только для исходящего соединения, не может принимать входящие соединения. Может принимать, если присутствует link::options::nohostcheck
* | Не может присоединится к серверу, но принимает входящие соединения (если указан правильный пароль) с любого IP адреса или хоста
::ffff:1.2.3.4 | для линковки ipv6 к ipv4.

bind-ip (необязательно)
Служит для прослушивания указанного IP адреса (пример: 192.168.0.1). Используется, если IRC-сервер имеет несколько IP адресов, для явного указания одного из них.

port
Порт для соединения (необходимо, чтобы он прослушивался на удалённом сервере).

password-connect
Пароль, используемый для подключения к удалённому серверу, не может быть зашифрованным (обычный текст).

password-receive
Пароль для проверки входящих соединений, может быть зашифрован как и oper::password. Очень рекомендуется использовать аутентификацию хэшированными паролями или типом аутентификации `sslclientcertfp`. Смотрите Методах аутентификации для более подробной информации.

hub vs leaf
Хаб позволяет соединения с несколькими серверами, а лист - только с одним. Сервер является листом до тех пор, пока не имеет директивы hub. Сервер является листом также, если у него указана директива leaf * или директива leafdepth установлена 1.

hub (необязателен)
Значение - это маска, указывающая, какие сервера могут присоединиться к данному хабу (пример: *.my.net).

leaf (необязателен)
Значение - это маска, указывающая с какими серверами данный сервер не будет хабом. Указывая значение в * будет равнозначным как неимение директивы hub.

leafdepth (необязателен)
Значение определяет глубину (количество переходов), которые может иметь данный сервер. Например, 1 - значит, что сервер не может иметь линков под собой (лист), 2 - значит, что сервер может иметь под собой ещё линки, но те сервера больше не могут (т.к. только хабы могут линковать листы). Значение 0 - определяет отсутствие ограничения и является значением по умолчанию.

class
Класс сервера, для этого часто используется класс server.

compression-level (необязателен)
Определяет уровень сжатия (1-9) для данного соединения. Используется, если установлен link::options::zip.

ciphers (необязателен)
Определяет шифры SSL для применения к данному линку. Чтобы получить список всех доступных шифров, используйте команду `openssl ciphers`. Шифры в списке должны быть разделены двоеточием : .

options блок
Обычно используется одна или несколько опций, иногда они вообще не нужны.

ssl | для соединения на SSL порт.
autoconnect | сервер будет автоматически пробовать соединятся, время определяется параметром в class::connfreq ( лучшим решением будет включение это опции только с одной стороны, например лист->хаб)
zip | если вы желаете сжимать трафик для данного соединения, то необходимо скомпилировать сервер с поддержкой zlib и установить сжатие с двух сторон.
nodnscache | не кэшировать IP для исходящего соединения с сервером, используется для часто изменяемых хостов (например dyndns.org)
nohostcheck | не проверяет удалённый хост (link::hostname), используется для часто изменяемых хостов (например dyndns.org)
quarantine | операторы с этого сервера будут ограничены правами локальных операторов

Пример:

    link hub.mynet.com {
        username *;
        hostname 1.2.3.4;
        bind-ip *;
        port 7029;
        hub *;
        password-connect "LiNk";
        password-receive "LiNk";
        class servers;
        options {
            autoconnect;
            ssl;
            zip;
        };
    };

4.32 - Alias блок НЕОБЯЗАТЕЛЕН

Синтаксис [обычный псевдоним]:

    alias <имя> {
    	target <ник-для-перенаправления>;
    	type <тип-псевдонима>;
    	spamfilter <yes|no>;
    };

Замечание: Помните, что <имя> используется вместе с "alias::")

Замечание: о стандартных файлах с псевдонимами, поставляемыми вместе с UnrealIRCd, можно прочитать здесь .

Блок alias позволяет вам перенаправить команду пользователя, например /chanserv будет отправлять сообщение пользователю chanserv.

- alias:: опредеяет имя команды, которое использует алиас (пример: chanserv)
- alias::target ник или канал, которому придёт команда. Если alias:: сама по себе команда, тоalias::target можно опустить.
- alias::type определяет тип алиаса, правильные такие:
  - services (пользователь подключён к серверу сервисов),
  - stats (пользователь подключён к серверу статистики),
  - normal (пользователь - обычный пользователь на любом сервере),
  - channel (цель - имя канала)
  - command (это не совсем "стандартный алиас", смотри ниже).
- alias::spamfilter (необязательно) вызывает проверку спамфильтром команды, если установлено в "yes" (по умолчанию 'no').

Синтаксис [псевдоним команды]:

    alias <имя> {
    	/* Для псевдонимов, посылающих сообщения пользователям/в каналы */
    	format <регулярное-выражение> {
    		target <ник-направления>;
    		type <тип-псевдонима>;
    		parameters <строка-параметров>;
    	};
    	/* Для 'действительно псевдонимов(real aliases)' */
    	format <регулярное-выражение> {
    		command <команда>;
    		type real;
    		parameters <строка-параметров>;
    	};
    	/* И так далее. Вы можете создать столько блоков формата, сколько пожелаете. */
    	format <регулярное-выражение> {
    		...
    	};
    	type command;
    	spamfilter <yes|no>;
    };

Если alias::type установлен в command, как показано выше, то алиас становится алиасом команды. Если блок алиас используется в таком форате, то он становится гораздо гибче, к примеру вы можете создать алиас /identify.

- alias:: это имя команды как и в стандартном блоке алиаса (выше).
- alias::format определяет регулярное выражение, под которое должен подпадать текст, посылаемый командному алиасу. Будет использовано первое вхождение в условие alias::format. Естественно, вы можете иметь много alias::format, чтобы делать различные вещи в зависимости от отправляемого текста.
- alias::format::target цель направления команды. Данное значение не используется, если alias::format::type установлен в "real".
- alias::format::type определяет тип алиаса, для кого предназначена команда. В дополнении к описанному выше "Синтаксису [стандартного алиаса]", тип "real" определяет как "настоящий алиас" ("настоящий алиас" - это алиас, который может быть переписан в что-нибудь отличное от PRIVMSG).
- alias::format::parameters (для "настоящих алиасов") это то, что будет отправлено в качестве параметров алиасу. Чтобы определить конкретный параметр, используйте % и число. К примеру %1 укажет на первый параметр. Чтобы определить параметры до конца, используйте% с числом и -. К примеру %2- вернёт все параметры со второго до последнего. Вы можете использовать параметр %n, который вернёт ник пользователя, использовавшего команду.

Примеры использования блока alias в командном формате находятся в doc/example.conf.

4.33 - Help блок НЕОБЯЗАТЕЛЕН

Синтаксис:

    help <имя> {
        <строка-текста>;
        <строка-текста>;
        ...
    };

Замечание: обычно достаточно просто подключить файл help.conf

Блок help позволяет добавить справочную информацию, которая будет выдаваться по команде /helpop. help:: - это значение параметра команды /helpop. Если help:: пропущен, данный блок справки будет выдан по команде /helpop без параметров. Содержимое блока help - это текст, который будет отображаться пользователю, который набрал команду /helpop.

4.34 - Official Channels блок НЕОБЯЗАТЕЛЕН

Синтаксис:

    official-channels {
        "#channel" { topic "Топик по умолчанию"; };
    };

Оффициальные каналы будут показаны при команде /list, даже если там не будет пользователей. topic необязателен, и показывается по команде /list только если на данном канале 0 пользователей.

Пример:

    official-channels {
        "#Help" { topic "Оффициальный канал помощи, если никого нет, наберите /helpop helpme"; };
        "#Home";
        "#Main" { topic "Главный канал"; };
    };

4.35 - Spamfilter блок НЕОБЯЗАТЕЛЕН

Блок spamfilter позволяет добавлять вам локальные спамфильтры (действующие не на всю сеть).
Смотрите Функциональные возможности - Спамфильтр для более подробной информации о спамфильтрах.

Синтаксис:

    spamfilter {
        regex <слово>;
        target { <цель(цели)> };
        action <действие>;
        reason <причина>;
        ban-time <время>;
    };

regex - регулярное выражение для совпадения.
target определяет цели, смотрите списки вероятных типов здесь (например: 'channel').
action определяет предпринимаемое действие, смотрите списки возможных действий здесь (например: 'gline').
reason необязателен, определяет причину бана или блокирования, если не указан, используется причина по умолчанию.
ban-time необязателен, определяет длительность бана *line или shun, иначе используется время по умолчанию (1 сутки).

Примеры:

    spamfilter {
        regex "Come watch me on my webcam";
        target { private; channel; };
        action gline;
        reason "Вы заражены червём, пожалуйста, проследуйте по www.antivirus.xx/blah/virus=GrrTrojan";
        ban-time 6h;
    };

    spamfilter {
        regex "come to irc\..+\..+";
        target { private; channel; };
        action gline;
        reason "Скажем нет спаму!";
    };

4.36 - Блок Cgiirc НЕОБЯЗАТЕЛЕН

Блок cgiirc позволяет вам настроить скрытие хоста для гейтов CGI:IRC, которым вы доверяете (больше информации).

Синтаксис:

    cgiirc {
    	type <webirc|old>;
    	username <mask>; /* необязательно */
    	hostname <mask>;
    	password <password>; /* только для типа webirc */
    };

type бывает 'webirc' или 'old'.
username это как ident (если указан). Если не указан, то будет учитываться как "*".
hostname это маска, с которой производится сравнение.
password это пароль webirc, только если используется тип 'webirc'.

Как сконфигурировать, используя метод 'webirc' (рекомендованный метод)
В вашем конфигурационном файле CGI:IRC (cgiirc.conf) вы устанавливаете пароль в webirc_password.
Далее, в вашем unrealircd.conf вы добавляете блок cgiirc, указывая данный хост и пароль. Установите cgiirc::type в "webirc".
Пример:
В вашем конфигурационном файле CGI:IRC (cgiirc.conf) вы добавляете:

    webirc_password = LpT4xqPI5

Далее, в вашем unrealircd.conf вы добавляете блок cgiirc:

    cgiirc {
    	type webirc;
    	hostname "1.2.3.4";
    	password "LpT4xqPI5";
    };

Как сконфигурировать, используя метод 'old'
Замечание: Это не рекомендованный метод, потому что у него есть два недостатка: этот метод посылает IP/хост для скрытия серверу как пароль для сервера, это значит, что вы не можете указать пароль на сервер как пользователь CGI:IRC. Дополнительно, управление доступом работает только для основанных на IP клиентах и не требует экстрасложного пароля, как в методе 'webirc'. Вкратце, вы не захотите использовать этот метод до тех пор, пока вы не найдёте хорошую причину для этого.
В конфигурационном файле вашего CGI:IRC (cgiirc.conf) установите realhost_as_password в 1.
Далее, в вашем unrealircd.conf добавьте блок cgiirc для разрешения работы с данного хоста.
Пример:
В вашем конфигурационном файлеCGI:IRC (cgiirc.conf) добавьте:

    realhost_as_password = 1

Далее в unrealircd.conf вы добавьте блок cgiirc:

    cgiirc {
    	type old;
    	hostname "1.2.3.4";
    };

4.37 - Set блок НЕОБХОДИМ (Ранее известен как unrealircd.conf/networks)

Если сеть состоит из одного сервера, проще будет вместо создания отдельного файла все настройки поместить в unrealircd.conf, однако если сеть многосерверная, рекомендовано использовать отдельный файл с настройками сети и загружать его с помощью директивы include.

В данном блоке мы будем ссылаться на настройки / директивы в формате <имя-блока>::<директива-блока>. Это НЕ ТОТ формат, который можно включать в конфигурационный файл, Это ДОЛЖНО быть преобразовано в формат, используемый ниже. С таким форматом будет проще понять настройки.

Синтаксис:

    set {
        <вхождение> <переменная>;
        <вхождение> <переменная>;
        ...
    };

Блок set устанавливает индивидуальные настройки для конкретного сервера. Каждая директива уникальна (указывается в блоке set один раз), все директивы указаны ниже. Некоторые из них могут содержать подблоки. Т.к. директив весьма много, то все они могут быть включены в одном блоке set. Если у директивы есть опции, они так же могут включаться внутри одного set.
Пример:

    set {
        kline-address my@emailaddress.com;
        auto-join #welcome;
        options {
            hide-ulines;
        };
        hosts {
            local LocalOp.MyNet.com;
            global globalop.mynet.com;
        };
    };

Если необходимо разделить блоки set, можно записать опции в одну строку.
Пример:
set { options { hide-ulines; show-connect-info; }; };

set::kline-address <адрес-email>;
Адрес электронной почты, который будет выдаваться всем пользователям, попавшим в K:line. Данное значение должно быть указано.

set::gline-address <адрес-email>;
Адрес электронной почты, который будет выдаваться всем пользователям, попавшим в G:line.

set::modes-on-connect <+режимы>;
Режимы, устанавливаемые для пользователей при их подключении.

set::snomask-on-connect <+режимы>
SNOMASKs, устанавливаемые для пользователей при их подключении.

set::modes-on-oper <+режимы>;
Режимы, устанавливаемые для пользователей при удачном выполнении команды /oper.

set::snomask-on-oper <+режимы>;
SNOMASKs, устанавливаемые для пользователей при удачном выполнении команды /oper.

set::modes-on-join <+режимы>;
Режимы, устанавливаемые на канале при его создании. Не все режимы возможно установить, используя эту опцию (+qaohvbeOAzlLk НЕЛЬЗЯ установить).

set::level-on-join <none|voice|halfop|op|protect|owner>;
Пользователь, который первый зашёл на канал, получит указанный статус. По умолчанию это 'op' (оператор канала).

set::restrict-usermodes <режимы>
Запрещает пользователям устанавливать/снимать ссебя указанные режимы (не используйте + или -).
К примеру, можно установить режим +G в modes-on-connect и G в restrict-usermodes, тогда для всех пользователей будет принудительно установлен +G, и они не смогут выполнить -G.

set::restrict-channelmodes <режимы>
Запрещает пользователям устанавливать/снимать указанные режимы канала (не используйте + или -).
К примеру, можно установить +G в modes-on-join и G в restrict-channelmodes, таким образом на всех (новых) каналах принудительно будет установлен +G и будет невозможно выполнить -G.
ЗАМЕЧАНИЕ: эти режимы все-таки можно установить через сервисы, используя MLOCK. К сожалению, сложно сказать, чем этозакончится, поэтому лучше уточнить у авторов сервисов.

set::restrict-extendedbans <типы|*>
Запрещает пользователям использовать расширенные баны ("*") или отключает использование указанных банов (например: "qc").

set::auto-join <каналы>;
Канал(-ы), куда принудительно будет заброшен пользователь при подключении к серверу. Чтобы определить несколько каналов, необходимо разделить их запятыми.
[Замечание: имя канала(-ов) должно быть в кавычках, т.е.: auto-join "#chan";]

set::oper-auto-join <каналы>;
Каналы(ы), куда будет заброшен пользователь при удачном выполнении команды /oper. Чтобы определить несколько каналов, необходимо разделить их запятыми.
[Замечание: имя канала(ов) должно быть в кавычках, т.е.: oper-auto-join "#chan";]

set::anti-spam-quit-message-time <длительность>;
Время, в течение которого пользователь должен быть подключен к серверу, чтобы отобразилось его сообщение о выходе (/quit). Используется для предотвращения спама. Длительность задаётся числовой строкой, где d значит дни, h - часы, m - минуты и s - секунды. К примеру 1d2h3m значит 1 день, 2 часа и 3 минуты.

set::prefix-quit <префикс-выхода>;
Устанавливает текст, который используется как префикс сообщения о выходе. Если опция установлена в 0, то используется стандартный "Quit:".

set::static-quit <сообщение-выхода>;
Устанавливает статическое сообщение о выходе, которое будет использоваться всегда, когда пользователь отключается от сети. Необходим anti-spam-quit-message-time и set::prefix-quit. Отключения из-за ошибок связи НЕ заменяются сообщением static-quit.

set::static-part <no|yes|part сообщение>;
Значение 'yes' будет пропускать все сообщения при выходе с канала, значение 'no' не изменяет работу /part, всё остальное будет интерпретировано как сообщение при выходе с канала (например: static-part "Bye!"), что может весьма раздражать, поэтому аккуратнее используйте данный параметр.

set::who-limit <предел>;
Устанавливает максимальное количество выводимых совпадений, возвращаемых командой /who. Если данная опция не установлена, то ограниченийне будет.

set::silence-limit <предел>;
Устанавливает максимальное количество вхождений в список SILENCE. Если директиване задана, то по умолчанию устанавливается 15.

set::maxbans <предел>;
Устанавливает максимально возможное количество банов (+b) на канале. По умолчанию - 60. Если вы изменяете данную величину, ознакомьтесь с параметром maxbanlength (см. дальше)!

set::maxbanlength <предел>;
Подобно set::maxbans, но устанавливает максимальное количество символов для всех банов, сложенных вместе, т.е. лимит на максимальный объем памяти для банов, возможный для канала. Значение по умолчание - 2048 (байт). Исходя из значения по умолчанию для maxbans (60) можно получить 2048:60=34 символа в среднем на один бан.

set::oper-only-stats <список-stats>;
Устанавливает список флагов (без разделителей) команды stats, которые могут использовать только операторы. Оставьте значение пустым, чтобы пользователи могли использовать все флаги, или укажите *, чтобы пользователи не могли использовать ни одного флага. Могут быть определены только короткие флаги команды /stats.

set::oper-only-stats {<флаг-stats>; <флаг-stats>;};
Устанавливает список флагов команды stats, которые могут использоваться только операторами. Работает только с длинными флагами stats.

set::maxchannelsperuser <число-каналов>;
Определяет максимальное количество каналов, на которых одновременно может присутствовать пользователь.

set::maxdccallow <количество-вхождений>;
Определяет максимальное число вхождений в список DCCALLOW для пользователя.

set::channel-command-prefix <префиксы-команд>;
Определяет символы-префиксы для сервисов для сообщений-команд на канале. Сообщения, начинающиеся с любого из указанных символов будут посланы, даже если клиент в режиме +d. Значение по умолчанию "`!.".

set::allowed-nickchars { <список> };
Кодировка/языки, допустимые в никах, смотрите Использование национальных наборов символов в никах.

set::allow-userhost-change [never|always|not-on-channels|force-rejoin]
Определяет, что происходит, если изменяется user@host (+x/-x/chghost/chgident/setident/vhost/ и др.).
never запрещает все команды, изменяющие user@host, always разрешает эти команды, даже если пользователь находится на канале(-ах) (может привести к десинхронизации клиента) [по умолчанию], not-on-channels разрешает эти команды если пользователь не находится ни на одном канале, force-rejoin принудительно заставит перезайти на все каналы и, если необходимо, даст оператора, право голоса и др.

set::options::hide-ulines;
При наличии этой опции сервера U-line будут скрыты в запросе по команде /links от не-операторов.

set::options::flat-map;
При наличии этой опции все сервера по команде /map и /linksбудут выглядеть, как будто напрямую прилинкованы к данному серверу (т.е. невозможно определить, куда и какой сервер прилинкован). Это небольшая уловка против атак типа (D)DoS, т.к. злоумышленники не смогут быстро определить уязвимые сервера в сети.

set::options::show-opermotd;
При наличии этой опции пользователю, успешно выполнившему /oper, будет показан opermotd.

set::options::identd-check;
При наличии этой опции у клиента при подключении будет проверен сервер identd; значение, которое он вернёт,будет использоваться в качестве имени пользователя. Если не пришёл ответ или сервер identd не существует, то указанное пользователем имя будет с префиксом ~. Если опцияне установлена, никакой проверки не происходит.

set::options::show-connect-info;
При наличии этой опции при подключении пользователюбудут показаны уведомления "ident request", "hostname lookup" и д.р..

set::options::dont-resolve;
Если хосты пользователей при подключении не определяются, можно указать эту опцию. Это может пригодиться для ускорения соединения, если большинство ваших пользователей не имеют хоста.
Замечание: если будет установлена эта опция, вы не сможете использовать блоки allow, основанные на хостах.

set::options::mkpasswd-for-everyone;
Позволяет использовать команду /mkpasswd всем, а не только операторам, использование команды не-операторами отправляется сномаске EYES.

set::options::allow-part-if-shunned;
Позволяет пользователям, на которых установлен shun, использовать /part.

set::options::fail-oper-warn;
При наличии этой опции пользователь будет уведомлён о том, что его неудачная попытка стать оператором (/oper) была зафиксирована.

set::options::allow-insane-bans;
Позволяет банить по указанной маске, например /GLINE *@*.xx. Позволяет легко и непринуждённо забанить любого в вашей сети, поэтому используйте осторожно!

set::options::disable-cap;
Отключает расширения возможностей клиента IRC (IRC Client Capabilities Extensions (CAP)). Только учтите, что это влияет на SASL и другие фичи (могут перестать работать или затруднены в использовании).

set::nopost::ban-action (требует модуля m_nopost)
Действие, применяемое к пользователю, если он пытается выполнить команду HTTP POST. Допустимые значения: kill, gline, gzline, kline, zline, shun, tempshun. Значение по умолчанию: kill. Если вы используете значения *line или shun, просто запомните, что возможно легковерный пользователь посетил сайт, который осуществляет спаммерскую атаку XPS IRC, и пользователя отключит от сети (прибьёт его существующие подключенния). Значение по умолчанию (kill) как раз служит защитой против таких инцидентов, но жёсткие меры (*line, а особенно gzline) иногда необходимы.

set::nopost::ban-reason (требует модуля m_nopost)
Указывается причина бана, если модуль m_nopost прибивает или банит пользователя.

set::nopost::ban-time (требует модуля m_nopost)
Длительность для shuns, glines, gzlines, klines и zlines, установленных by m_nopost. По умолчанию 4h (4 часа).

set::nopost::except-hosts (требует модуля m_nopost)
Список маск хостов для исключения действия модуля m_nopost. Вы можете указать здесь любые хост маски.

set::dns::timeout <интервал-времени>;
Интервал времени, определяющий таймаут DNS-сервера. Это строка, где d означает дни, h - часы, m - минуты и s - секунды. К примеру, 1d2h3m означает 1 день, 2 часа и 3 минуты (НЕ РЕАЛИЗОВАНО).

set::dns::retries <количество-повторов>;
Число, определяющее количество попыток запроса DNS перед выдачей сообщения об ошибке (НЕ РЕАЛИЗОВАНО).

set::dns::nameserver <имя-dns-сервера>;
Определяет имя сервера (hostname), который будет использован в качестве DNS запросов (НЕ РЕАЛИЗОВАНО).

set::dns::bind-ip <ip>;
Привязка к определенному IP для DNS-запросов, очень редко используется.

set::network-name <имя-сети>;
Определяет имя сети, в которой запущен сервер. Желательно, чтобы эта переменная была одинаковой на всех серверах в сети.

set::default-server <имя-сервера>;
Определяет имя сервера по умолчанию, которое сообщается пользователям, если текущий сервер полон.

set::default-ipv6-clone-mask
Маска определения клонов в протоколе IPv6 по умолчанию. Смотри allow::ipv6-clone-mask. Значение по умолчанию 64.

set::services-server <имя-сервера>;
Определяет имя сервера, к которому подключены сервисы. Если у вас нет сервисов, необходимо установить значение вроде services.yournet.com.

set::stats-server <имя-сервера>;
Устанавливает имя сервера, где находится бот статистики. Если статистика не запущена, можно оставить значение пустым.

set::sasl-server <имя-сервера>;
Устанавливает имя сервера, куда будут отсылаться сообщения аутентификации SASL.

set::help-channel <канал-помощи>;
Устанавливает название канала помощи.

set::cloak-keys { "ключ1"; "ключ2"; "ключ3"; };
Устанавливает ключи, используемые для генерации хоста при +x host. Данные значения должны быть одинаковыми на всех серверах, иначе серверы не соединятся. Каждый из 3-х set::cloak-keys:: должен быть строкой в 5-100 символов(желательно10-20), содержащий смесь прописных (a-z), заглавных (A-Z) букв и цифр (0-9). Замечание: значения ключей зависят от используемого вами модуля скрытности, при использовании нестандартного модуля значения могут быть другими.

set::hiddenhost-prefix <значение-префикса>;
Определяет префикс, который используется для зашифрованных хостов (+x). Обычно это 3 или 4 буквы, представляющие название сети. У всех серверов в сети этот префикс должен быть одинаковым, это необходимо для правильной работы банов на каналах.

set::hosts::local <хост-локального-оператора>;
Определяет хост, который будет назначен локальным операторам при установке на них режима +x. Можно определить значение в виде username@host.

set::hosts::global <хост-глобального-оператора>;
Определяет хост, который будет назначен глобальным операторам при установке на них режима +x. Можно определить значение в виде username@host.

set::hosts::coadmin <хост-помощника-администратора>;
У всех серверов в сети этот префикс должен быть одинаковым, это необходимо для правильной работы банов на каналах. Определяет хост, который будет назначен помощникам администратора при установке на них режима +x. Можно определить значение в виде username@host.

set::hosts::admin <хост-администратора>;
Определяет хост, который будет назначен администраторам при установке на них режима +x. Можно определить значение в виде username@host.

set::hosts::servicesadmin <хост-сервис-администратора>;
Определяет хост, который будет назначен администраторам сервисов при установке на них режима +x. Можно определить значение в виде username@host.

set::hosts::netadmin <хост-администратора-сети>;
Определяет хост, который будет назначен администраторам сети при установке на них режима +x. Можно определить значение в виде username@host.

set::hosts::host-on-oper-up <yes/no>;
Если установлено в yes, то флаг H/get_host будет учтен, и при удачной попытке команды /oper автоматически будет установлен режим +x. Если установлено в no, чтобы получить хост оператора пользователь должен установить флаг +x вручную (см. выше set::hosts).

set::ssl::egd <имя-файла>;
Определяет поддержку EGD (Entropy Gathering Daemon). Если используется OpenSSL 0.9.7 или выше, тогда будет произведен поиск в /var/run/egd-pool, /dev/egd-pool, /etc/egd-pool, и /etc/entropy, поэтому имя-файла можно опустить, для этого просто определите set::ssl::egd без указания имени файла. Если используется OpenSSL версии ниже, чем 0.9.7, или вы хотите использовать EGD сокет, находящийся в другом месте, надо указать имя файла UNIX Domain Socket, на котором прослушивается EGD.

set::ssl::certificate <имя-файла>;
Определяет имя файла, в котором указан SSL сертификат сервера.

set::ssl::key <имя-файла>;
Определяет имя файла, в котором находится приватный ключ SSL.

set::ssl::trusted-ca-file <имя-файла>;
Определяет имя файла, где указаны сертификаты доверенных CA.

set::ssl::server-cipher-list <cipherlist>;
Определяет разрешённые шифры, по умолчанию используются из OpenSSL. Чтобы ознакомиться со списком, посетите http://www.openssl.org/docs/apps/ciphers.html

set::ssl::renegotiate-bytes <значение>;
Определяет, через какое количество байт SSL-сессия должна быть переустановлена (пример: 20m для 20 мегабайт).

set::ssl::renegotiate-timeout <длительность>;
Определяет, через какое количество времени SSL-сессия должна быть переустановлена (пример: 1h для 1 часа).

set::ssl::options::fail-if-no-clientcert;
Запрещает пользователей без сертификата.

set::ssl::options::no-self-signed;
Блокирует подключения пользователей с самоподписанными сертификатами.

set::ssl::options::verify-certificate;
Позволяет серверу определять правильность SSL сертификата прежде, чем разрешить соединение.

set::ssl::options::no-starttls;
Отключает STARTTLS. STARTTLS позволяет использовать клиентам SSL на обычных портах (не-SSL).

set::throttle::period <длительность>
Указывает, сколько времени должен подождать пользователь перед повторным подключением, если он превысил лимит set::throttle::connections.

set::throttle::connections <количество>;
Сколько раз должен подключиться пользователь с одним и тем же хостом, чтобы сработал троттлинг (защита от join-флуда).

set::ident::connect-timeout <время>;
Время в секундах, после которого прекращаются попытки соединения с идент-сервером [по умолчанию 10 секунд (10s)].

set::ident::read-timeout <время>;
Время в секундах, после которого прекращается ожидание ответа от идент-сервера [по умолчанию 30 секунд (30s)].

set::anti-flood::unknown-flood-bantime <время>;
Определяет, сколько времени будет забанен флудер с неизвестного подключения [unknown connection flooder].

set::anti-flood::unknown-flood-amount <количество>;
Определяет количество данных (в килобайтах) с неизвестного подключения, за превышение которого пользователь будет отключен от сети [killed].

set::anti-flood::away-flood <количество>:<период>;
Защита от "away" флуда: ограничивает использование команды /away 'количество' за 'период' секунд. Необходимо, чтобы NO_FLOOD_AWAY был включён в config.h. Пример:away-flood 5:60s; - максимум 5 /away команд за 60 секунд.

set::anti-flood::nick-flood <количество>:<период>;
Защита от флуда сменой ников: ограничивает количество изменений ников ('количество' за 'период' секунд). Для примера: nick-flood 4:90 означает, что ник можно изменить 4 раза за 90 секунд, по умолчанию установлено 3 изменения за 60 секунд.

set::default-bantime <время>;
Определяет длительность бана при использовании команд /kline, /gline, /zline, /shun и остальных без указания параметра времени (вроде /gline *@some.nasty.isp). По умолчанию ставится постоянный бан - 0. Пример: default-bantime 90d;

set::modef-default-unsettime <значение>;
Для режима канала +f можно определить время его снятия, т.е. если установлено значение 10, то +f [5j]:15 будет трансформировано в [5j#i10]:15. По умолчанию значение не установлено и не используется.

set::modef-max-unsettime <значение>;
Максимальное количество минут для снятия режима +f (в +f [5j#i<TIME>]:15), значение может быть от 0 до 255. По умолчанию 60 (= 1 час).

set::ban-version-tkl-time <значение>;
Если при использовании команд вида zline/gline/и др. при бане по версии определен 'action', то необходимо определить, сколько времени будет забанен данный ip, по умолчанию - 86400 (1 день).

set::spamfilter::ban-time <значение>;
Тоже, что и выше, только для *lines/shuns, добавленных спамфильтром.

set::spamfilter::ban-reason <причина>;
Причина, которая будет указана при добавлении бана спамфильтром.

set::spamfilter::virus-help-channel <канал>;
Канал, используемый в качестве действия 'viruschan' в спамфильтре.

set::spamfilter::virus-help-channel-deny <yes|no>;
Если установлено в yes (или в 1), то обычным пользователям, пытающимся зайти на канал virus-help-channel, будет сообщено, что попасть на канал можно только по приглашениям ('invite only'). Только операторы, люди, попавшие под спамфильтр, и те, которых пригласили на канал, могут туда зайти.

set::spamfilter::except <канал(ы)>;
Канал(-ы), которые исключаются от фильтрации спама (т.е. никаких действий предпринятоне будет). Это может быть один канал, либо несколько, разделённых запятыми. Пример: except "#help,#spamreport";

set::spamfilter::slowdetect-warn <значение>
Если выполнение спамфильтра занимает время большее, чем указано ( в милисекундах, 1 секунда = 1000 мс), то всем операторам будет отправлено уведомление (по умолчанию: 250). Смотрите также Обнаружение медленного спамфильтра.

set::spamfilter::slowdetect-fatal <значение>
Если выполнение спамфильтра занимает время большее, чем указано ( в милисекундах, 1 секунда = 1000 мс), то спамфильтр удаляется (по умолчанию: 500). Смотрите также Обнаружение медленного спамфильтра.

set::check-target-nick-bans <yes|no>;
Где бы пользователь не менял свой ник, будет происходить проверка на бан для НОВОГО ника. Если он будет попадать под бан, то ник не изменится. Значение по умолчанию yes.

set::timesynch::enabled <yes|no>
Включает или выключает синхронизацию времени при загрузке. По умолчанию включено (yes).

set::timesynch::server <IP>
Сервер для синхронизации времени.Может быть до 4-х IP адресов, разделённых запятыми. Сервера должны поддерживать протокол NTP 4-й версии. По умолчанию использует 3 сервера (US, EU, AU). Серверы запрашиваются одновременно, синхронизация происходит с тем, который отвечает быстрее.

set::timesynch::timeout <время>
Максимальное время ожидания ответа от сервера. Переменная, принимающая значение от 1 до 5 (нет смысла величины большей, т.к. возникнет погрешность). По умолчанию установлено в 3 и, по большому счёту, нет смысла менять это значение.

set::ping-cookie <yes|no>
Посылает запрос, используя PING, на который клиенты отвечают, используя PONG. Очень полезно для предотвращения слепых атак HTTP-POST и других вещей, таких как спуф TCP на старых операционных системах со сломанным TCP-стеком. По умолчанию включено (yes).

set::pingpong-warning <yes|no>
Когда включён set::ping-cookie (обычно в ОС Windows), то он посылает предупреждение каждому пользователю использовать '/quote pong ..', если он имеет проблемы с подключением. По умолчанию отключено (no).

set::watch-away-notification <yes|no>
Позволяет включать/отключать нотификацию AWAY (ухода) в команде WATCH. По умолчанию включено (yes).

4.38 - Блок Files НЕОБЯЗАТЕЛЕН

Вы не должны использовать TLD block для указания нахождения ваших файлов MOTDs и rules. Данный блок указывает на настройки по умолчанию для файлов pidfile и irc.tune. Если тут что-то не определено, значит используется значение по умолчанию, задокументированное в Дополнительных файлах.

Относительные пути будут расценены как относительные согласно корневой директории UnrealIRCd, которая содержит`unrealircd.conf`. Данный блок может быть полезен тем, если вы запускаете больше, чем один IRCd в одной и той же директории. В этом случае вам надо указать как минимум файлы pid и tune для каждого сервера.

Синтаксис:

    files {
    	motd <файл motd>;
    	shortmotd <короткий файл motd>;
    	opermotd <файл oper motd>;
    	svsmotd <файл services motd>;
    	botmotd <файл bot motd>;

    	rules <файл rules>;

    	tunefile <файл tune>;
    	pidfile <файл pid>;
    };

Пример:

    files {
    	motd /etc/motd;

    	pidfile /var/lib/run/unrealircd.pid;
    };

5 – Дополнительные файлы

В дополнение к указанным у Unreal есть ещё другие конфигурационные файлы, такие как MOTD, OperMOTD, BotMOTD и Rules. Ниже приведены имена файлов и их назначение.
Обратите внимание, что motd файлы (всех типов) и файлы правил могут быть определены в блоке tld или в блоке файлов, просто данные имена файлов используются по умолчанию (и для удалённых MOTD/RULES).

ircd.motd | Отображается по команде /motd и (если нет ircd.smotd) при подключении пользователей
ircd.smotd | Отображается только при подключении (сокращённый MOTD)
ircd.rules | Отображается по команде /rules
oper.motd | Отображается по команде /opermotd или при получении статуса оператора /oper
bot.motd | Отображается по команде /botmotd

6 – Режимы пользователя и канала

Режим | Описание
Режимы канала
A | Зайти могут только администраторы канала
a <nick> | Делает пользователя администратором канала
b <nick!user@host> | Банит указанного пользователя на канале
c | ANSI цвета не могут быть отправлены на канал
C | на канале запрещены CTCP
e <nick!user@host> | Исключение от бана – если кто-то попадает под него, он может зайти на канал, даже если он забанен
f [<число><тип>]:<секунды> | Защита канала от флуда. См. секцию 3.12 для подробного описания.
G | Включает на канале проверку цензуры. Проверяются слова из списка матов (блоки Badword) и при необходимости заменяются.
h <nick> | Устанавливает статус полуоператора
i | Необходимо приглашение, чтобы попасть на канал
I <nick!user@host> | Исключения приглашений ("invex") - если пользователь попадает, то требование +i опускается при входе на канал.
j <количество:секунды> | Ограничивает количество входов на канал пользователя до количество в течение секунды секунд
K | Запрещено использование /knock
k <ключ> | Устанавливает ключ (пароль), необходимый для входа на канал
l <##> | Устанавливает максимальное количество пользователей на канале
L <канал> | Если превышено число, установленное режимом +l, то пользователи будут отправлены на указанный канал
M | Говорить могут только зарегистрированные пользователи (+r)
m | Модерируемый канал. Говорить могут только пользователи с режимами +v/o/h
N | На канале запрещено изменение ников
n | Не разрешены сообщения извне
O | Зайти могут только ирц-операторы
o <nick> | Устанавливает статус оператора канала
p | Канал становится приватным
q <nick> | Устанавливает статус владельца канала
Q | Только серверы из U:Lines могут кикать пользователей
r | Канал зарегестрирован (устанавливается только сервисами)
R | Для входа на канал необходимо, чтобы ники были зарегистрированы
S | Вырезает из сообщений все цвета
s | Канал становится секретным
t | Полуоператоры, операторы и выше могут устанавливать топик
T | На канале запрещены NOTICE
u | Аудитория – исполнение команд /names и /who #channel выводит только операторов канала
V | Не разрешён /invite
v <nick> | Даёт право голоса пользователям. (Могут говорить на каналах с +m)
z | Зайти на канал могут только клиенты с защищённым соединением (SSL)
Z | Устанавливается сервером и сигнализирует о том, что все пользователи, находящиеся на канале, используют безопасное подключение (SSL). Будет активно, если указано +z. ULines (к примеру BotServ), игнорируются, при подсчёте "небезопасных пользователей". По прежнему, озаботиться безопасностью межсерверных линков должны администраторы (SSL, VPN, использование loopback интерфейсов и прочая, прочая), потому что IRCd не может и не сможет определить безопасность.

Режим | Описание
Режимы пользователя
A | Администратор сервера (устанавливается в блоке Oper)
a | Администратор сервисов (устанавливается в блоке Oper)
B | Помечает вас как бота :)
C | Помощник администратора [co-administrator] (устанавливается в блоке Oper)
d | Вы не сможете получать сообщения на каналах [channel PRIVMSGs] (за исключением текста, который начинается с указанных в set::channel-command-prefix символов)
G | Фильтрует маты во всех ваших сообщениях
g | Можно посылать и читать globops и locops
H | Скрывает статус ирцоператора (только для ирцоператоров)
h | Доступен для помощи (оператор помощи) (устанавливается в блоке Oper)
I | Скрывает от обычных пользователей время простоя (в /whois).
i | Невидим (не показывается при /who)
N | Администратор сети (устанавливается в блоке Oper)
O | Локальный ирцоператор (устанавливается в блоке Oper)
o | Глобальный ирцоператор (устанавливается в блоке Oper)
p | Скрывает каналы, на которых вы находитесь (выводимые по команде /whois)
q | Вас могут кикнуть только U:Lines (только для администраторов сервисов)
R | Позволяет принимать сообщения и нотисы [PRIVMSG/NOTICE] только от зарегистрированных пользователей (+r)
r | Показывает, что ник зарегистрирован
S | Используется для защиты сервисов
s | Может видеть уведомления сервера (смотрите секцию 3.3 для более детальной информации)
T | Отклоняет получение CTCP
t | Сообщает, что вы используете /vhost
V | Помечает вас как пользователя WebTV
v | Разрешает получать уведомления о потенциально опасных отклоненных DCC запросах
W | Позволяет видеть, когда на вас выполняют команду /whois (только для ирцоператоров)
w | Может читать сообщения wallop
x | Выдаёт пользователю скрытый хост
z | Указывает, что вы подключены к серверу через зашифрованное SSL-соединение

7 – Команды пользователя и оператора

Замечание: документация, доступная по /helpop, более информативна, используйте /helpop command (или /helpop ?command если вы оператор) для получения более подробной информации о команде.

Команда | Описание | Кто
nick <новый_ник> | Изменяет ваш ник. Уведомляет других, что вы изменили ник | Все
whois <ник> | Отображает информацию о пользователе, включая полное имя, хост, каналы, на которых находится пользователь и статус оператора | Все
whois <ник> <ник> | Исполняет удалённую команду WHOIS. Если пользователь находится на другом сервере, чем тот человек, от кого он пытается получить информацию (WHOIS), то далеко не все данные отобразятся. К примеру, не отобразится время простоя пользователя. Чтобы выполнить удалённо команду WHOIS, необходимо ник пользователя указать как аргумент дважды. | Все
who <маска> | Who позволяет искать пользователей. Маска включает в себя: ник, #канал, хостмаску (*.attbi.com) | Все
whowas <ник> <максимум_ответов> | Показывает информацию, когда ник отсоединился от сети. Поле <максимум_ответов> необязательно и ограничивает количество найденных результатов. | Все
ison <ник1 ник2 ник3 ...> | Позволяет проверить, находится ли пользователь (или несколько пользователей) в сети. Обычно используется для скриптов. | Все
join <канал1,канал2, ...> | Позволяет вам заходить на каналы. /join #канал1,#канал2,#канал3 позволяет зайти на несколько каналов одной командой. Команда /join 0 позволяет покинуть сразу все каналы. | Все
cycle <канал1, канал2, ...> | Перезаходит на указанный(-ые) канал(-ы). Команда эквивалентна 2-м подряд идущим командам PART и JOIN. | Все
motd <сервер> | Показывает motd сервера. Добавляя имя сервера, можно увидеть motd других серверов. | Все
rules <сервер> | Показывает ircd.rules сервера. Если дополнительно указано имя сервера, то позволяет просмотреть правила на указанном сервере | Все
lusers <сервер> | Показывает текущее и максимальное количество пользователей, как локальных, так и глобальных. Если дополнительно указано имя сервера, то можно посмотреть статистику на других серверах. | Все
map | Показывает карту сети | Все
quit <причина> | Отключает вас от сервера. Если указана причина, она будет показана на всех каналах при выходе. | Все
ping <пользователь> | Посылает запрос PING пользователю. Используется для проверки соединения и лага. Сервера используют пинги для того, чтобы определить, подключены ли пользователи или уже отключились. | Все
version <ник> | Посылает запрос CTCP Version пользователю. Если клиент пользователя сконфигурирован, то он ответит своей версией. | Все
links | Показывает список всех серверов, прилинкованных к сети. | Все
Admin <сервер> | Показывает информацию об администраторе сервера. Если указан сервер, то покажет информацию об администраторе указанного сервера. | Все
userhost <ник> | Показывает хост пользователя по нику. Используется для скиптов. | Все
topic <канал> <топик> | Topic <канал> покажет текущий топик указанного канала. Topic <канал> <топик> изменит топик на указанном канале. | Все
invite <ник> <канал> | Приглашает указанного пользователя на указанный канал (необходимо иметь статус оператора канала). | ОператорКанала
kick <канал, канал> <пользователь, пользователь> <причина> | Выбрасывает пользователя(ей) с канала(ов). Причина может быть не указана. | ОператорКанала
away <причина> | Помечает вас ушедшим. Причина может быть не указана. | Все
Watch [+|-]<ник> [+|-]<ник> | Watch - это новая система уведомлений в UnrealIRCd, которая работает быстрее и меньше нагружает сеть, чем старая. Сервер посылает вам сообщение, когда любой ник из вашего листа watch заходит или выходит. Лист watch НЕ ЗАПОМИНАЕТСЯ МЕЖДУ СЕССИЯМИ, поэтому вы или ваш скрипт должны добавлять ники в лист watch каждый раз при подключении к серверу. | All
helpop ?<топик> или !<топик> | HelpOp - это новая система помощи по IRC серверу. Вы можете напечатать /HELPOP ? <help system topic> или /HELPOP ! <вопрос>. "?" в /HELPOP значит запрос в систему помощи, и если вы не получили ответа, то, указав перед вашим вопросом '!', запрос пойдёт операторам помощи. Если не указаны ни ? ни !, тогда запрос сначала пойдёт в систему помощи, и если не будет найден ответ, он будет переадресован операторам помощи. | Все
list <строка поиска> | Если не указана строка поиска, то по умолчанию будет получен весь неотфильтрованный список каналов. Ниже указаны опции, которые можно использовать. >количество - показывает каналы, на которых больше людей, чем <количество> <количество - показывает каналы, на которых людей меньше, чем <количество>. C>количество - показывает каналы, созданные в интервале от <количество> минут назад до настоящего времени. C<количество - показывает каналы, созданные раньше, чем <количество> минут тому назад. T>количество - показывает каналы, у которых топики старше, чем <количество> минут (т.е. не изменялись за последние <количество> минут. T<количество - показывает каналы, у которых топик новее, чем <количество> минут. *маска* - список каналов, совпадающих с *маска* !*маска* - список каналов, не совпадающих с *маска* | Все
Knock <канал> <сообщение> | Позволяет постучатся [knock] на invite-only канал, куда можно попасть только по приглашениям. Не будет работать, если на каналах установлены режимы +K или +V или если вы забанены. | Все
setname | Позволяет пользователям поменять свое ‘real name’ без переподключения | Все
vhost <логин> <пароль> | Скрывает ваш хост, используя виртуальный хост, предлагаемый сервером. | Все
mode <канал/ник> <режим> | Позволяет установить режимы пользователя и канала. Список режимов смотрите в разделе Режимы Пользователя и Канала. | Все
credits | Список всех, кто помогал создавать UnrealIRCd | Все
license | Показывает лицензию GNU | Все
time <сервер> | Показывает дату и время на сервере. Если указано имя сервера, то проверяет дату и время на нем. | Все
botmotd <сервер> | Отображает bot.motd. Если указано имя сервера, отобразит bot.motd с указанного сервера. | Все
identify <пароль> | Отправляет ваш пароль системе сервисов для идентификации вашего ника. | Все
identify <канал> <пароль> | Отправляет ваш пароль системе сервисов для идентификации вас как владельца канала. | Все
dns <опция> | Возвращает информацию о кэше DNS IRC сервера. Замечание: сейчас большинство клиентов имеют встроенную команду DNS, поэтому вы должны будете воспользоваться командой /raw DNS. Операторы могут указать l в качестве первого параметра команды, чтобы получить список вхождений в кэш DNS. | Все
userip <ник> | Возвращает IP адрес пользователя. | Все
silence [+|-]<ник> | Игнорирует сообщения от пользователя или списка пользователей на стороне сервера. | Все
oper <пользователь> <пароль> | Даёт пользователю статус оператора, если он прописан в блоке Oper | Оператор
wallops <сообщение> | Отправляет сообщение всем пользователям с режимом +w | Оператор
globops <сообщение> | Отправляет сообщение всем глобальным операторам | Оператор
chatops <сообщение> | Отправляет сообщение всем операторам (и глобальным, и локальным) | Оператор
locops <сообщение> | Отправляет сообщение всем локальным операторам | Оператор
adchat <сообщение> | Отправляет сообщение всем администраторам | Оператор
nachat <сообщение> | Отправляет сообщение всем админстраторам сети | Оператор
kill <ник> <причина> | Отключает пользователя от сети, причину можно не указывать. | Оператор
kline [+|-]<пользователь@хост | ник> [<длительность бана> <причина>] | Банит хостмаску со стороны используемого сервера. kline - это не глобальный бан. Длительность бана это: 1) время в секундах; 2) переменная времени в виде '1d' (т.е. на 1 день); 3) '0' для постоянного бана. Время и причина необязательны, если они не указаны, то значение будет взято из set::default-bantime (по умолчанию: 0/постоянно) и будет указано 'no reason'. Чтобы убрать kline используйте /kline -пользователь@хост | Оператор
zline [+|-]<*@ip> [<длительность бана> <причина>] | Банит по IP адресу на вашем локальном сервере (не распространяется на всю сеть). Смотрите синтаксис команды kline. Чтобы убрать, используйте /zline -*@ip. | Оператор
gline [+|-]<пользователь@хост | ник> [<длительность бана> <причина>] | Добавляет глобальный бан на любого, кто попадает под маску. Смотрите синтаксис команды kline. Чтобы убрать, используйте /gline -пользователь@хост. | Оператор
shun [+|-]<пользователь@хост | ник> [<длительность бана> <причина>] | Запрещает пользователю говорить и выполнять ЛЮБУЮ команду. Shun глобален (как gline). Смотрите синтаксис команды kline. Чтобы убрать, используйте /shun -пользователь@хост. | Оператор
gzline [+|-]<ip> <длительность бана> :<причина> | Добавляет глобальный zline. Смотрите синтаксис команды kline. Чтобы убрать gzline, используйте /gzline -*@ip. | Оператор
rehash <сервер|global> –<флаги> | Осуществляет рехэш (Rehash - перечитать) конфигурационных файлов сервера. Если указано имя сервера, то позволяет осуществить рехэш конфигурационного файла на удалённом сервере. Если указан -global, то будет произведён рехэш ВСЕХ серверов в вашей сети (требует прав NetAdmin). Доступны некоторые флаги: -motd - Осуществляет рехэш всех MOTD и RULES файлов (включая tld {}) -opermotd - осуществляет рехэш только файла OPERMOTD -botmotd - осуществляет рехэш только файла BOTMOTD -garbage - запускает сбор мусора -ssl - перезагружает сертификаты SSL | Оператор
restart <пароль> <причина> | Перезапускает процесс IRCD. Необходим пароль, если присутствует блок drpass { }. По желанию можно указать причину. | Оператор
die <пароль> | Останавливает процесс IRCD. Пароль необходим, если присутствует блок drpass { }. | Оператор
lag <сервер> | Данная команда работает как Sonar или Traceroute для IRC серверов. Если вы напечатаете /LAG irc.fyremoon.net то вам ответит каждый сервер, через который проходит соединение, с указанием времени. Используется для нахождения задержек. | Оператор
sethost <новый_хост> | Позволяет изменить ваш vhost на любой. | Оператор
setident <новый_идент> | Позволяет изменить ваш идент на любой | Оператор
chghost <ник> <новый_хост> | Позволяет изменить хост для подключенного пользователя | Оператор
chgident <ник> <новый_идент> | Позволяет изменить идент для подключенного пользователя | Оператор
chgname <ник> <новое_имя> | Позволяет изменить реальное имя [real name] подключенного пользователя | Оператор
squit <сервер> | Отключает сервер от сети | Оператор
connect <сервер> <порт> <сервер> | Если указан только один сервер, то ваш текущий сервер попытается подключиться к указанному. Если указаны 2 сервера, то первый будет подключаться на указанный порт ко второму. | Оператор
dccdeny <маска_файла> <причина> | Добавляет в DCCDENY маску файла, тем самым блокируя его передачу. | Оператор
undccdeny <маска_файла> | Удаляет из DCCDENY указанную маску файла. | Оператор
sajoin <ник> <канал>, <канал> | Принудительно забрасывает пользователя на канал(-ы). Доступно только для администраторов сети и сервисов. | Оператор
sapart <ник> <канал>, <канал> | Пользователь принудительно покидает канал(-ы). Доступно только для администраторов сети и сервисов. | Оператор
samode <канал> <режим> | Позволяет администраторам сети и сервисов изменить режимы канала без статуса оператора канала. | Оператор
rping <маска_сервера> | Вычисляет в миллисекундах задержку между серверами | Оператор
trace <маска_сервера|ник> | Если будет указан ник, команда выдаст вам его класс и информацию о задержке. Если указан сервер, команда покажет информацию о class/version/link. | Оператор
opermotd | Показывает файл OperMotd сервера | Оператор
addmotd :<текст> | Добавит указанный текст в конец Motd | Оператор
addomotd :<текст> | Добавит указанный текст в конец файла OperMotd | Оператор
sdesc <Новое описание> | Позволяет администраторам сервера изменить информацию о своем сервере без его перезапуска. | Оператор
addline <текст> | Позволяет добавить строки в unrealircd.conf. Вы должны подгрузить модуль m_addline чтобы использовать эту команду (начиная с версии 3.2.9) | Оператор
mkpasswd <тип> <пароль> | Шифрует <пароль> используя <тип> хэширования. Смотри типы аутентификации для доступных методов хэширования. | Оператор
tsctl offset +/- <время> | Настраивает встроенные часы в IRCD (НЕ используйте, если вы до конца не понимаете, ЧТО делает эта команда) | Оператор
tsctl time | Даёт отчёт о TS | Оператор
tsctl alltime | Даёт отчёт о TS на ВСЕХ серверах | Оператор
tsctl svstime <временное_смещение> | Устанавливает время TS на всех серверах (НЕ используйте, если вы до конца не понимаете, ЧТО делает эта команда) | Оператор
htm <опция> | Контролирует настройки режима повышенного трафика (high traffic mode). HTM отключает некоторые команды пользователя (list, whois, who и другие) в случае экстремально высокого трафика на сервере. Опции: -ON - заставляет сервер переключится в HTM -OFF - заставляет сервер выйти из HTM -NOISY - сервер будет уведомлять пользователей и администраторов, когда он входит или выходит из режима HTM -QUIET - сервер не будет уведомлять никого при входе/выходе в/из режима HTM -TO <значение> - указывает, при какой величине входящего трафика активировать HTM | Оператор
stats <опция> | B - banversion - показывает список забаненых версий клиентов b - badword - показывает список нецензурных слов C - link - показывает список линк-блоков d - denylinkauto - показывает список запрещённых линк-блоков (auto) D - denylinkall - показывает список запрещённых линк-блоков (все) e - exceptthrottle - показывает список исключений троттл-блоков E - exceptban - показывает список исключений банов и tkl f - spamfilter - показывает список спамфильтров F - denydcc - показывает список запрещенных dcc G - gline - показывает список gline и gzline Расширенные флаги: [+/-mrs] [маска] [причина] [установлено] m возвращает gline, попадающие/не попадающие под указанную маску r возвращает gline, попадающие/не попадающие под указанную причину s возвращает gline, которые были установлены/не были установлены клиентами с указанным именем I - allow - возвращает список allow-блоков j - officialchans - показывает список оффициальных каналов сети K - kline - показывает список блоков банов user/ban ip/except l - linkinfo - показывает информацию о соединениях L - linkinfoall - показывает всю информацию о соединениях M - command - показывает, сколько раз использовалась каждая команда n - banrealname - показывает список банов по настоящему имени[realname] O - oper - показывает опер-блоки P - port - показывает информацию о портах q - sqline - показывает список SQLINE Q - bannick - показывает список банов по нику r - chanrestrict - показывает список блоков deny/allow каналов R - usage - показывает информацию об использовании S - set - показывает список блока set s - shun - показывает список shun Расширенные флаги: [+/-mrs] [маска] [причина] [установлено] m Возвращает shun, попадающие/не попадающие под указанную маску r Возвращает shun, попадающие/не попадающие под указанную причину s Возвращает shun, которые были установлены/не установлены клиентами с указанным именем t - tld - показывает список блоков tld T - traffic - показывает информацию о траффике u - uptime - показывает аптайм сервера и счётчик подключений U - uline - показывает список блока ulines v - denyver - показывает список блоков запрещённых для линковки версий серверов V - vhost - показывает список блоков vhost X - notlink - показывает список серверов, которые в данный момент не подключены Y - class - показывает список блоков class z - zip - показывает информацию о сжатии трафика от серверов, его использующих (если включена поддержка zip-компрессии) Z - mem - показывает информацию об использовании памяти | Все
module | Список всех загруженных модулей | Все
close | Данная команда отсоединяет от сервера все неизвестные соединения. | Оператор

8 – Советы/рекомендации по безопасности

Если вас волнуют вопросы безопасности, данный раздел поможет получить представление о возможных рисках. Вы можете использовать данный раздел, как список рекомендаций для построения действительно надежной в плане безопасности IRC-сети.

Список отсортирован по популярности/уровню риска наиболее часто используемых атак:

8.1 Пароли

Выбирайте сложные пароли для операторов, линк-секций и др.:
- используйте смесь прописных и строчных букв и цифр ("Whbviwf5") и/или что-то длинное ("blaheatsafish", "AlphaBeta555").
- НЕ ИСПОЛЬЗУЙТЕ ваши линк/оператор пароли такие же, как от почтовых ящиков, форумов, паролей на ботов и т.п...

8.2 Не относящиеся к IRCD уязвимости

Гораздо больше шансов, что ваш сервер будет хакнут через другую уязвимость, чем через баг в UnrealIRCd. К примеру, если на сервере запущены ещё и http, dns, smtp и ftp сервисы, то риск возрастает. Также, если сервер многопользовательский (т.е. у вас есть шелл), возрастает риск локальных эксплоитов и плохих уровней доступа (см. далее). Этот риск наиболее опасен, так что будьте внимательны при выборе поставщика шелла.

8.3 Разрешения[permissions] и конфигурационный файл

Всегда проверяйте, правильность разрешений для вашей домашней директории и директории UnrealIRCd, группы/остальные не должны иметь разрешение на чтение. Иначе любой локальный пользователь может просто посмотреть ваш конфигурационный файл, а в нём-то ваши пароли... Вкратце: chmod -R go-rwx /path/to/Unreal3.2 если вы не уверены.
Другие вещи, относящиеся к данной проблеме: никогда не кладите ваш UnrealIRCd в каталог вебсервера или в какую-нибудь другую разделяемую директорию. И для бэкапов, удостоверьтесь, что вы имеете правильные разрешения (иногда часто бывает, что всё защищено, а backup.tar.gz может прочитать любой человек).
Если вы желаете зашифровать пароли везде, где только возможно, вам необходимо скомпилировать сервер с поддержкой OpenSSL (вы же заботитесь о своей безопасности?), тогда можно использовать sha1, ripemd160 или md5 методы шифрации паролей . Если у вас остались зашифрованные блоки от Unreal3.2.1 или более ранней версии, я предлагаю вам перезашифровать (просто перезапустить /mkpasswd), потому что 3.2.1 была с некоторыми уязвимостями.
Замечу, что это просто 'другой уровень защиты', так что если вы оставите старые пароли, то они могут быть сломаны довольно легко. Если кто-то получит доступ к вашему файлу конфигурации, можно узнать много интересных вещей, таких как link::password-connect для атаки на другие сервера.

8.4 Проблемы, относящиеся к пользователям

Это не специфика UnrealIRCd, но всё же есть вещи, зависимые от пользователей...
Всегда выбирайте ваших операторов и администраторов очень внимательно. И всегда помните, что это - самое слабое звено. Может вы не полностью прочитали данный документ, может ваш друг, как оператор, сделает что-то глупое. Например расшарит свой жёсткий диск через netbios/kazaa/morpheus/.., получит трояна, будет использовать простой пароль и проч. и проч. и проч. Не всё же находится под вашим контролем.
И ещё, всегда очень внимательно выбирайте уровни привилегий для людей(oper::flags), указывайте только самые необходимые.

8.5 SSL/SSH & сниффинг

Используйте зашифрованное по SSL соединение между серверами и как оператор, это защитит вас от перехвата трафика. Перехват трафика возможен, если атакующий хакнул сервер где-то между вами и вашим сервером, тогда он может видеть ВЕСЬ сетевой трафик, который проходит через него: смотреть все данные, захватывать все пароли (логины операторов, сервисов и т.д.). По этому, всегда используйте ssh вместо telnet.

8.6 Отказ в обслуживании (DoS) [или: как защитить мой хаб]

Большинство сетей имеют печальный опыт атак флудеров или атак вида "отказ в обслуживании". Большинство сетей имеют главный хаб-сервер, однако его забывают защитить от атак.
Я вам объясню:
1. Установите имя хаба, но не добавляйте для него запись в dns. Данным образом, атакующий не сможет преобразовать хост и не сможет его зафлудить. По этому просто соединяйте ваши сервера на хаб через IP адрес или другим, непубличным хостнеймом.
Пример 1: link visibiblename.yournet.com { hostname 194.15.123.16; [etc] };.
Пример 2: link visibiblename.yournet.com { hostname thehostnamethatworks.yournet.com; [etc] };.
Замечание, что в последнем примере вы должны быть уверены,
что ваш dns сервер не позволяет передачу зон, но это уже совсем другая история ;).
2. Другим важным шагом будет скрытие результата команды '/stats c' и другой stats информации, иначе атакующие могут просто просмотреть ваши блоки соединений. Обычно, если вы параноик (как и я), вы можете просто сделать: set { oper-only-stats "*"; }; чтобы ограничить использование /stats полностью.
Если вы не хотите этого, просто скройте "CdDlLXz". Более подробно об этом объяснено в следующей секции.
Конечно, данные шаги станут менее эффективными, если вы это сделаете позже (например, через несколько месяцев),
чем если бы вы это сделали с самого начала, потому что IP адреса уже смогли узнать плохие парни.
Атакующие могут зафлудить сервера, не являющиеся хабами, однако это им доставит больше трудностей, чем просто атаковать одну или 2 точки (хабы), и ваши хабы и сервисы будут оставаться живыми :).

8.7 Раскрытие информации

STATS
Команда /stats весьма информативна, по этому, вероятно, вы захотите ограничить к ней доступ. Вопрос, который вы должны задать себе: "Что я хочу, чтобы видели мои пользователи?". Большинство больших сетей отвечают "ничего", в то время, как другие позволяют видеть даже '/stats g' и '/stats k'.
Я вам предлагаю использовать set { oper-only-stats "*"; }; чтобы запретить всю информацию от /stats для пользователей, однако, если вы не хотите этого делать, пройдитесь по списку '/stats' (чтобы просмотреть все опции) и блокировать всё, кроме того, что вы хотите разрешить (если вы не уверены, то лучше запретить. Почему они должны видеть то, в чём не уверены вы?).
Вот вам несколько примеров:
- /stats o: выдаёт ники операторов (с правильным регистром) и их хостмаски.
- /stats c: выдаёт информацию о возможных соединениях серверов, которые используются как "запасные" и др.
- /stats g, /stats k: обычно используется для забаненых прокси... так же просто даёт атакующим список прокси, которые они могут использовать.
- /stats E, /stats e: замечательная информация, особенно если атакующий решит использовать эти адреса
- /stats i, /stats y: может помочь атакующему найти хосты, позволяющие много соединений.
- /stats P: позволяет найти ему только порты серверов
и проч. и проч.
MAP / LINKS
Некоторые люди спрашивают, как отключить использование команд /map и /links. Наша позиция такова, что лучше этого не делать, это не лучший выход для защиты, позвольте объяснить... Скрытие ваших серверов будет бесполезно, если пользователи уже используют их (иначе, как они попали к вам в первый раз?). Смотрите секцию 8.6, если вы хотите скрыть сервера.
Так всё же, что же вы МОЖЕТЕ сделать? Начиная с версии 3.2.1 существует опция, называемая 'ровная карта' (set::options::flat-map), которая отображает все сервера как "присоединённые непосредственно" по командам /map и /links, по этому обычные пользователи не видят, куда прилинкован какой сервер... Это отличное дополнительное средство защиты от малышей, которые уже не смогут легко отследить "центральные точки" с помощью /map или /links. По этому, использование данной вещи рекомендовано. Замечание: это не является полной защитой. При любом сплите (потере соединения) можно увидеть, между какими серверами это произошло.
ОБЫЧНЫЕ ПОЛЬЗОВАТЕЛИ И SNOMASKs
Ещё одно преимущество, которое лучше ограничить для нормальных пользователей - это snomasks, которые называются +s +sk. Если они будут установлены, то пользователи могут видеть рехэши, kill'ы и другие различные сообщения.
Чтобы отключить их, используйте set::restrict-usermodes, что-то вроде: set { restrict-usermodes "s"; };.
Конечно же, вся эта " информация для скрытия" не является "настоящей" безопасностью, однако позволяет усложнить/увеличить сложность, необходимую для атаки/взлома.

8.8 Защита против эксплоитов

Патчи ядра усложняют задачу взлома от различных типов атак. По этому Unreal не является центральной точкой, которую будут атаковать, гораздо большая вероятность, что атака будет идти с другой стороны... по различным причинам.
Ещё один из способов обезопасить себя (только в *NIX системах) - chroot. При использовании данного средства, если сервер таки взломают, то злоумышленник не сможет выйти за пределы директории UnrealIRCd и, соответственно, не сможет причинить вреда другим файлам и системе. Данный способ требует прав доступа root, изменения файла include/config.h (поищите CHROOTDIR, а так же установите IRC_USER и IRC_GROUP) и перекомпилировании.
Первое, что вы должны сделать - это ВСЕГДА ИСПОЛЬЗОВАТЬ ПОСЛЕДНЮЮ ВЕРСИЮ, поэтому прямо сейчас подпишитесь на рассылку по уведомлениям от unreal, и вы будете получать уведомления о релизах (unreal-notify служит только для релизов, т.е. одно письмо в X месяцев). Приходят уведомления об исправленных уязвимостях высокого риска, добавлениях обновлений для обеспечения безопасности.

8.9 Итоги

Вы должны хорошо понимать, что никогда не будете защищены на 100%. Вы (и мы) находим и исправляем каждую уязвимость, однако атакующему достаточно будет воспользоваться одним "дырявым" сервером, чтобы парализовать работу сети. Всё, что было описано выше - это помощь, чтобы сократить и уменьшить вероятность риска. Найдите время для защиты своей сети и обучения ваших операторов. И помните, что многие люди не беспокоятся о защите до тех пор, пока их не взломают... и попробуйте это опровергнуть ;).

9 – Часто задаваемые вопросы (ЧАВО)

ЧАВО доступны в сети Интенет по этому адресу.

10 – Modules

Данная секция описывает модули, идущие в комплекте с UnrealIRCd. К сожалению в настоящее время только один модуль, идущий вместе с UnrealIRCd, документирован.

10.1 m_nopost
Данный модуль автоматически банит любого пользователя, кто пытается использовать запрос в стиле HTTP. Модуль был написан Syzop в ответ на использование Firefox XPS атак, которые позволяли AJAX-совместимым браузерам выступать в роли спамботов в IRC. Выбрать, что будет делать модуль m_nopost, когда получит подобный запрос, можно в секции set::nopost::ban-action и set::nopost::ban-time.
Модуль появился в UnrealIRCd версии 3.2.9 и компилируется в commands.so, так что он загружается автоматически в большинстве случаев.

Регулярные выражения

Регулярные выражения часто используются в Unreal (например, в badwords, spamfilter, и aliases), они являются отличным инструментом для поиска и замены по образцу. Иногда встречаются сокращения вроде "regexp (регексп)" или "regex (регекс)". Unreal использует TRE библиотеку регулярных выражений, которая поддерживает обычный и расширенный синтаксис. Информация, представленная ниже, поможет Вам понять как работают регексы. Если вы заинтересованы в более подробной информации, посетите TRE homepage.

A.1 Литералы

Литералы являются самой простой частью регулярных выражений. Обычно литералы - это символы, из которых состоит текст. Например, образец "test" состоит из четырех литералов, "t," "e," "s," и "t." В Unreal литералы чувствительны к регистру, так что предыдущий регекс соответствует "test", в отличие от "TEST". Любой символ, кроме "метасимволов", рассматривается как литерал. Вы можете представить любой символ как литерал с помощью наклонной черты (\). Например, точка (.) является метасимволом. Если вы хотите использовать литерал ".", просто напишите "\." . Также это применимо в случаях, когда вы хотите найти символ, который так просто не печатается, например ASCII символ 3 (цвет). Для создания этого символа можно использовать IRC клиент, а можно специальную конструкцию регексов \x. Если вы наберете \x3, это интерпретируется как ASCII символ 3. Номер после \x представлен в шестнадцатеричном виде и может принимать значения от \x0 до \xFF.

A.2 Оператор "точка"

Оператор точка (.) интерпретируется как "любой символ". Одна "точка" заменяет один любой символ. Например, регекс "a.c" интерпретируется как "abc", "adc" и т.д. Однако, результат не содержит "abd", потому что "a" и "c" являются литералами, которые точно должны быть в образце.

A.3 Операторы повторения

Отличие операторов повторения в регексах от привычных всем символов замены в масках в том, что в регексах "*" и "?" означают повторение предыдущего символа.

Оператор "?" означает повторение предыдущего символа 0 или 1 раз. Например, регекс "a?c" будет соответствовать образцам "ac" или "c" (т.е. символ "a" может быть, а может и не быть). Чтобы использовать "?" как в знакомых вам масках, применим оператор точки: регекс "a.c" будет соответствовать образцу, в котором между символами "a" и "c" будет любой символ.

Оператор "*" означает повторение предыдущего символа 0 или более раз. Например, регекс "a*c" будет соответствовать образцам "ac", "aaaaaaac" или "c" (символ "a" может повторяться 0 или более раз). Как и в операторе "?", "*" можно использовать вместе с точкой: регекс "a.*c" будет соответствовать повторению между "a" и "с" любого символа 0 или более раз.

Оператор "+" очень похож на "*". Он означает повторение предыдущего символа 1 или более раз.

Более сложным оператором повторения являются фигурные скобки. С их помощью вы можете указать, сколько раз должен повторяться предыдущий символ в образце. Например, регекс "a{5}" будет соответствовать "aaaaa" (повторение символа "a" 5 раз), регекс "a{1,3}" - от 1 до 3 раз, регекс "a{7,}" - 7 и более раз.

По умолчанию, алгоритм поиска в операторах повторения "жадный". Чтобы понять, что это такое, рассмотрим пример:

Исходный текст:
первая часть, вторая часть
Регекс:
.*часть

В данном примере найденный фрагмент будет "первая часть, вторая часть". "Жадность" регексов получает максимальный подходящий фрагмент из образца. Чтобы этого избежать и получить минимальный (в нашем случае "первая часть"), после оператора "*" надо использовать "?". Этот метод также приемлен ко всем операторам повторения (даже для самого оператора "?". В этом случае выражение будет иметь вид "??").

A.4 Выражения в скобках

Выражение в скобках являются удобным средством для создания условий. Так, между литералами, помещенными в квадратные скобки, подразумевается условие "или". Например, регексп "[abc]" интерпретируется как "a или b или c", регексп "a[bd]c" - как "abc" или "adc", но не "acc".

Можно использовать квадратные скобки для проверки того, чем является символ, буквой или цифрой. Можно перебирать все подходящие символы, а можно использовать символ диапазона "-". Например, регекс "[0123456789]" равносилен "[0-9]". Если вы хотите задать буквы латинского алфавита, просто используйте регекс "[a-z]" (по умолчанию Unreal не чувствителен к регистру букв в регексах). В одних скобках можно размещать несколько диапазонов, например, регекс "[0-9a-z]" интерпретируется как "все цифры и буквы". Для включения литерала "-" в регекс, просто напишите его первым или последним в скобках (например, "[0-9-]" или "[-0-9]").

Для упрощения выражений в квадратных скобках, существуют установленные "классы символов". Они содержат основные диапазоны символов, разбитые на группы. Классы символов пишутся внутри скобок, их имена начинаются и заканчиваются с ":". Например, регекс "[0-9]" может быть записан в виде "[:isdigit:]". Ниже представлен список классов символов и их значений:

- `alnum` - буквы и цифры
- `alpha` - буквы
- `blank` - символы-разделители
- `cntrl` - управляющие символы
- `digit` - десятичные цифры (от 0 до 9)
- `graph` - все печатные символы кроме пробела
- `lower` - буквы нижнего регистра
- `print` - печатные символы и пробел
- `punct` - знаки пунктуации
- `space` - символы пробела
- `upper` - буквы верхнего регистра
- `xdigit` - шестнадцатеричные цифры

Классы символов ДОЛЖНЫ использоваться в скобках. Например, регекс [:isdigit:-] неверный. Вы должны использовать "[[:isdigit:]-]" в данном примере.

Ещё одна возможность выражений в квадратных скобках это отрицание. Иногда необходимо создать условие "всё кроме определенных символов". Например, иногда легче перечислить символы, которые не должны включаться, чем те, которые должны. Для создания отрицания служит литерал "^", который пишется первым в квадратных скобках. Например, регекс "[^a-z]" интерпретируется как "всё кроме букв". Чтобы добавить сам символ "^" в список, поместите его в конце (например, регекс "[a-z^]" будет включать все буквы + символ "^"). Также "^" может использоваться для создания отрицаний классов символов. Например, "[^[:isdigit:]]" - "не цифры".

A.5 Метапоследовательности

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

Символ "^" соответствует началу строки. Например, выражение "test" найдет любое вхождение данного слова в образце, а выражение "^test" укажет, что образец должен обязательно начинаться с "test". По аналогии, символ "$" соответствует концу строки, и может применяться совместно с символом "^". Например, регекс "^test$" укажет на то, что образец эквивалентен слову "test".

Метапоследовательности представлены в двух видах, положительном и отрицательном:

- `\b` - граница слова
- `\B` - "не граница слова"
- `\d` - цифры (эквивалентно `[[:digit:]]`)
- `\D` - "не цифры" (эквивалентно `[^[:digit:]]`)
- `\s` - пробел (эквивалентно `[[:space:]]`)
- `\S` - "не пробел" (эквивалентно `[^[:space:]]`)
- `\w` - слова (эквивалентно `[[:alnum:]_]`)
- `\W` - "не слова" (эквивалентно `[^[:alnum:]_]`)

A.6 Чередование

Чередование является способом создания условия "или". Символом оператора чередования служит вертикальная черта "|". Например, если вы хотите сказать "a или b", вы можете использовать "a|b". Для обычных символов легче и удобнее будет использование выражений в квадратных скобках, однако оператор чередования может применяться в более сложных условиях с использованием подвыражений.

A.7 Подвыражения

Подвыражение - это последовательность символов, которая рассматривается как одно целое. Существует два способа создания подвыражений. Эти два способа отличаются наличием "обратных ссылок", которые будут рассмотрены ниже. Для объявления подвыражения с использованием обратных ссылок просто поместите его в скобки (). Для создания подвыражения без обратных ссылок, замените скобки на "(?:". Например, "([a-z])" и "(?:[a-z])". Все операторы повторения, например "X или больше предыдущих символов", могут быть использованы и в виде "X или более предыдущих подвыражений". Например, если у вас есть регекс "[0-9][a-z][0-9]" для поиска цифр, букв и затем снова цифр, и вам необходимо повторить это дважды. Обычно, вы бы сделали "[0-9][a-z][0-9][0-9][a-z][0-9]", а с использованием подвыражений можно написать просто "([0-9][a-z][0-9]){2}".

A.8 Обратные ссылки

Обратные ссылки позволяют вам возвращать часть строки, на которую ссылалось одно из подвыражений регекса. Вы можете пользовать обратные ссылки с помощью "\" и последующей цифрой (0-9), например "\1". "\0" - специальная обратная ссылка, которая обращается ко всему регексу, а не к определённому подвыражению. Обратные ссылки полезны для поиска строки, содержащей образец дважды. Например, у вас есть строка nick!user@host. Вы знаете, что есть троян, nick и username которого содержат "[0-9][a-z]{5}", и они одинаковы. Регекс "[0-9][a-z]{5}![0-9][a-z]{5}@.+" не подходит, потому что nickname и username в данном случае могут быть разные. Например, nickname будет "1abcde", а username "2fghij". Проблема решается с помощью обратных ссылок, используя "([0-9][a-z]{5})!\1@.+". Этот регекс ищет [0-9][a-z]{5} в нике пользователя, а потом подставляет найденное значение вместо username с помощью обратной ссылки.

Всего можно использовать до 9-ти обратных ссылок, что является причиной использования (:?). В этом случае создается подвыражение без обратной ссылки. Кроме того, что обратные ссылки не сохраняются, это ещё и быстрее работает. Подвыражения без обратных ссылок используются в тех случаях, когда нет надобности в создании обратной ссылки и её запоминании.

A.9 Чувствительность к регистру

По умолчанию, Unreal не чувствителен к регистру букв в регексах. Это позволяет, например, вместе с "www.test.com" блокировать и "WWW.TEST.COM". Конечно, существует способ сделать регексы чувствительными к регистру букв, например, для поиска троянов. Вы можете динамически включать чувствительность с помощью (?-i) и выключать с помощью (?i). Например, регекс "(?-i)[a-z](?i)[a-z]" будет искать в образце буквы только нижнего регистра, следующие за буквами нижнего или верхнего (чувствительность выключена). Также необходимо не забывать выключать чувствительность к регистру, или использовать чувствительность только для конкретного подвыражения. Например, регекс "(?-i:[a-z])[a-z]" будет эквивалентен предыдущему, т.к. -i применится только для подвыражения в скобках, а остальная часть регекса будет не чувствительна к регистру по умолчанию.