UnrealIRCd - это самый популярный IRC сервер в русско-язычном IRC пространстве. Версия 3.3 - самая свежая в ветке 3 (уже есть UnrealIRCd 4 версии), но, к сожалению, мало адаптирована для русских IRC сетей, где используются две разные кодировки одновременно - windows-1251 и utf-8. С этим IRCd придется отказаться от одной из них и, как следсвие, создать неудобства пользователям.

Проблему различия кодировок прекрасно решают русские модификации UnrealIRCd: классический UnrealIRCd 3.2.1 (DalNetRU2.2.9.2 мод) и её обновлённый вариант UnrealIRCd 3.2.1 (LineIRCd/Dreamterra мод), но, к сожалению, они устарели.

Разработчики UnrealIRcd: Bram Syzop Matthys и команда.

Установка UnrealIRCd

Работаем через SSH клиент в Linux сервере Debian 7 от обычного пользователя.
  1. Переходим в папку, в которую будем устаналивать UnrealIRCd:
    cd /home/dim/irc
  2. Скачиваем архив с UnrealIRCd:
    wget https://raw.githubusercontent.com/dimst/IRC/master/unrealircd-3.3.zip
  3. Распаковываем его:
    unzip unrealircd-3.3.zip
  4. Для удобства переименовываем распакованную директорию:
    mv unrealircd-unreal33 unreal3
  5. Переходим в директорию с UnrealIRCd:
    cd unreal3
  6. Запускаем конфигурацию, в которой нужно ответить на несколько вопросов:
    ./Config -nointro
    1. What directory are all the server configuration files in?
      [/home/dim/unreal]
      В какой директории будут храниться конфигурационные файлы?
      Указываем:
      /home/dim/irc/unreal3
    2. What is the path to the ircd binary including the name of the binary?
      [/home/dim/unreal/ircd]
      Какой путь будет до запускающего бинарного файла ircd?
      Указываем:
      /home/dim/irc/unreal3/ircd
    3. What should the default permissions for your configuration files be? (Set this to 0 to disable)
      It is strongly recommended that you use 0600 to prevent unwanted reading of the file
      [0600]
      Какие права устанавливать на конфигурационные файлы?
      нажимаем клавишу ENTER
    4. Do you want to support SSL (Secure Sockets Layer) connections?
      [No]

      Хотите ли вы разрешить использовать SSL для подключения к IRCd?
      пишем YES, нажимаем клавишу ENTER
      При положительном ответе будет задан вопрос:
      If you know the path to OpenSSL on your system, enter it here. If not
      leave this blank
      []
      Укажите путь до OpenSSL в вашей системе:
      нажимаем клавишу ENTER
    5. Do you want to enable IPv6 support?
      [No]
      Включить поддержку IP протокола версии 6 (IPv6)?
      Если на сервере есть IPv6:
      пишем YES, нажимаем клавишу ENTER
    6. Do you want to enable ziplinks support?
      [No]
      Включить поддержку сжатия трафика между серверами?
      нажимаем клавишу ENTER
    7. Do you want to enable remote includes?
      This allows stuff like this in your configuration file:
      include "http://www.somesite.org/files/opers.conf";
      [No]
      Хотите использовать удаленные включения? Подробнее.
      Если это нужно,
      пишем YES, нажимаем клавишу ENTER
      При положительном ответе будет задан вопрос:
      Specify the directory you installed libcurl to
      []
      В какой директории сервера лежит curl?
      Какой путь указывать, читаем здесь.
    8. Do you want to enable prefixes for chanadmin and chanowner?
      This will give +a the & prefix and ~ for +q (just like +o is @)
      Supported by the major clients (mIRC, xchat, epic, eggdrop, Klient,
      PJIRC, irssi, CGI:IRC, etc.)
      This feature should be enabled/disabled network-wide.
      [Yes]
      Включить поддержку префиксов админа (&) и овнера (~) канала?
      нажимаем клавишу ENTER
    9. What listen() backlog value do you wish to use? Some older servers
      have problems with more than 5, others work fine with many more.
      [5]
      нажимаем клавишу ENTER
    10. How far back do you want to keep the nickname history?
      [2000]
      Как долго хранить историю ников (для команды /whowas)?
      нажимаем клавишу ENTER
    11. What is the maximum sendq length you wish to have?
      [3000000]
      Какой максимальный лимит отправляемых данных установить (sendq)?
      нажимаем клавишу ENTER
    12. How many buffer pools would you like?
      This number will be multiplied by MAXSENDQLENGTH.
      [18]
      Сколько буферных пулов использовать?
      нажимаем клавишу ENTER
    13. How many file descriptors (or sockets) can the IRCd use?
      [1024]
      Сколько файловых дескрипторов (сокетов) использовать?
      нажимаем клавишу ENTER
    14. Would you like to pass any custom parameters to configure?
      See './configure --help' and write them here:
      []
      Хотите внести дополнительные параметры для конфигурации? Подробнее ./configure --help.
      нажимаем клавишу ENTER
    15. Если нв вопрос по поводу SSL ответили YES, то по окончанию конфигрурации будет задан вопрос:
      Do you want to generate an SSL certificate for the IRCd?
      Only answer No if you already have one.
      [Yes]

      Хотите ли вы сгенерировать SSL сертификаты для IRC сервера?
      Если это первая установка IRCd и ранее SSL сертификаты не создавались, то
      нажимаем клавишу ENTER
  7. Запускаем компиляцию:
    make
  8. Создаём файлы ircd.motd (описание сервера, команда /motd) и ircd.rules (правила сервера, команда /rules) и файл логов IRC сервера ircd.log:
    touch ircd.motd && touch ircd.rules && touch ircd.log
    Позже их можно наполнить информацией.
  9. Копируем из директории doc файл help.ru.conf (переведенный на русский язык справочник /helpop) в корень директории с UnrealIRCd:
    cp doc/help.ru.conf help.ru.conf
  10. Копируем демонстрационный конфигурационный unrealircd.conf в корень директории с UnrealIRCd:
    cp doc/example.ru.conf unrealircd.conf
    В строке 716 допущена ошибка - не хватает закрывающий кавычки ".

Настройка UnrealIRCd

  1. Редактируем unrealircd.conf под свой IRC-сервер (каждый параметр конфигурации подробно описан в документации):
    nano unrealircd.conf
    Содержимое файла:
    /*
     * example.conf by Daniel Hawton AKA Osiris (osiris@unrealircd.org).
     * example.ru.conf by Samets Anton aka Bock (bock@bynets.org).
     * $Id$
     * 
     * (Encoding): Windows-1251
     *
     * Работает для Unreal3.2.x
     * 
     * Итак, это русскоязычный пример example.conf. По синтаксису похож на C++.
     * По началу будет тяжело понять, что тут написано, однако во время практики и чтения
     * вы научитесь это делать.
     *
     * Просто скопируйте этот файл в главную директорию unrealircd и переименуйте в 'unrealircd.conf'.
     * 
     * Замечание: Все линии, кроме тех, которые начинаются с {, заканчиваются ; включая и закрывающую }. 
     * IRCd проигнорирует закомментированные линии.
     *
     * ПРОЧТИТЕ doc/unreal32docs.ru.html! Версия в интернете доступна по адресу:
     * www.vulnscan.org/UnrealIRCd/unreal32docs.ru.html
     * Она содержит большинство информации о конфигурировании, даёт представление о каждом блоке,
     * переменной и так далее...
     * Если вы пытаетесь редактировать этот файл без прочтения документации, вы гарантированно
     * потерпите неудачу!
     */
    
    /* Типы комментариев */
    # Первый тип (Shell type)
    // Второй тип (C++ style)
    /* Третий тип (C Style) */
    # данные линии игнорируются ircd.
    
    /*
     * UnrealIRCd поддерживает модули, загрузка некоторых необходима для запуска.
     * Вам необходимо загрузить как минимум модули команд и скрытия хоста.
     */
    
    /* Для *NIX систем раскомментируйте следующие 2 линии: */
    //loadmodule "src/modules/commands.so";
    //loadmodule "src/modules/cloak.so";
    
    /* Для Windows систем раскомментируйте следующие 2 линии: */
    //loadmodule "modules/commands.dll";
    //loadmodule "modules/cloak.dll";
    
    /*
     * Вам необходимо подключить и другие конфигурационные файлы.
     * help.ru.conf содержит весь текст команды /helpop. Файлы badwords.*.conf
     * содержат все включения матных слов для режима +G...
     * spamfilter.conf содержит правила для защиты от троянских коней.
     * Вы вероятно захотите подключить эти файлы:
     */
    include "help.ru.conf";
    include "badwords.channel.conf";
    include "badwords.message.conf";
    include "badwords.quit.conf";
    include "spamfilter.conf";
    
    /*
     * НОВОЕ: me {} 
     * СТАРОЕ: M:Line 
     * me {} определяет имя, описание и нумерик сервера unreal для данного сервера.
     * Синтаксис: 
     * me { 
     *  name "Имя.сервера"; 
     *  info "Описание сервера";
     *  numeric (нумерик сервера*);
     * }; 
     * При соединении с другими серверами, нумерик должен быть уникальным в сети. Имя сервера - англоязычное.
     */
    me
    {
        name "irc.foonet.com";
        info "Сервер FooNet";
        numeric 1;
    };
    
    /*
     * НОВОЕ: admin {} 
     * СТАРОЕ: A:Line
     * Данный блок предоставляет информацию об администраторе сервера.
     * Вы можете поместить сколько угодно линий после admin {. 
     * Синтаксис:
     * admin {
     *   "первая линия"; 
     *   "вторая линия"; 
     *   [так далее]
     * };
     */
    admin {
        "Вася Пупкин!";
        "vasya_pupkin";
        "haker@lamer.ru";
        "ICQ: 987654321";
    };
    
    /*
     * НОВОЕ: class {} 
     * СТАРОЕ: Y:line (был слишком запутан) 
     * Определяет настройки для классов. Класс определяет групповые настройки для подключений.
     * Например, подключение сервера, вместо включения его в класс пользователей, вы направляете в
     * класс серверов. Используется следующий синтаксис:
     * class (имя класса)
     * {
     *     pingfreq (как часто пиновать пользователя/сервер в секундах);
     *     maxclients (сколько максимально соединений разрешено данному классу);
     *     sendq (максимальная очередь для отправки от подключения);
     *     recvq (максимальная очередь для получения от подключения [контроль за флудом]);
     *  };
     */
    
    class           clients
    {
        pingfreq 90;
        maxclients 500;
        sendq 100000;
        recvq 8000;
    };
    
    class           servers
    {
        pingfreq 90;
        maxclients 10;        /* Какое максимальное количество серверов может быть прилинковано к этому серверу */
        sendq 1000000;
        connfreq 100; /* Через сколько секунд проводить следующую попытку подключения */
    };
    
    /*
     * НОВОЕ: allow {} 
     * СТАРОЕ: I:Line
     * Определяет, кому разрешено подключаться к серверу...
     * В основном используется для клиентов, это разрешает им подключаться к серверу, а вы можете их контролировать
     * и/или устанавивать пароль.
     * Синтаксис: 
     * allow {
     *    ip (разрешённая маска ip);
     *    hostname (маска хоста);
     *    class (класс, в который определить[смотри class {}]);
     *    password "(пароль)"; (необязательно)
     *    maxperip (сколько подключений с одного ip); (необязательно) 
     * };
     */
    
    allow {
        ip             *@*;
        hostname       *@*;
        class           clients;
        maxperip 5;
    };
    
    /* Разрешение подключения с паролем */
    allow {
        ip             *@255.255.255.255;
        hostname       *@*.passworded.ugly.people;
        class           clients;
        password "аццкип0р0ль";
        maxperip 1;
    };
    
    /*
     * НОВОЕ: allow channel {} 
     * СТАРОЕ: chrestrict 
     * Позволяет пользователю зайти на канал...
     * служит как исключение из запрещённых каналов. 
     * Синтаксис:
     * allow channel {
     *   channel "имя канала";
     * };
     */
    allow           channel {
        channel "#WarezSucks";
    };
    
    /*
     * НОВОЕ: oper {} 
     * СТАРОЕ: O:Line 
     * Определяет IRC оператора
     * IRC операторы следят за сервером, занимаются его поддержкой и подключением к сети. 
     * Синтаксис: 
     * oper (логин) { 
     *     class (класс, в который определять их, если отличен от блока I, в какой класс переместить); 
     *     from { 
     *        userhost (идент@хост);
     *        userhost (идент@хост);
     *     }; 
     *     flags
     *     { 
     *       (тут флаги*);
     *     };
     *     ИЛИ
     *     flags "флаги старого типа, вида OAaRD";
     * };
     */
    
    
    /* Для списка флагов оператора прочитайте doc/unreal32docs.ru.html#operblock
     * [ОЧЕНЬ НАСТОЯТЕЛЬНО рекомендуется к прочтения]
     */
    
    oper vasyapupkin {
        class           clients;
        from {
            userhost vasya@somewhere.by;
        };
        password "p0r0l'";
        flags
        {
            netadmin;
            can_zline;
            can_gzline;
            can_gkline;
            global;
        };
    };
    
    /*
     * НОВОЕ: listen {}
     * СТАРОЕ: P:Line
     * Определяет, на каких портах будет работать ircd,
     * позволяя пользователям/серверам подключаться к серверу. 
     * Синтаксис:
     * listen (ip):(номер порта) 
     * { 
     *   options {
     *     (тут опции);
     *   };
     * };
     * или просто
     * listen: listen (ip):(порт);
     * 
     * ЗАМЕЧАНИЕ: для протокола ip v6 (3ffe:b80:2:51d::2), используйте [ip]:порт;
     * 
     * Это так же будет работать.
     */
    
    /* Опции для listen:
        СТАРЫЕ    |     НОВЫЕ
        S        serversonly
        C        clientsonly
        J        java
        s        ssl
        *        standard
    */
    
    /* ЗАМЕЧАНИЕ ДЛЯ ПОРТОВ SSL: SSL порты стандартизированы,
     * за исключением многочисленных "высоких" портов SSL, некоторые люди могут сказать вам, 
     * чтобы вы запустили на порту 994, потому что он официальный порт SSL... Но это же
     * требует привилегий пользователя root! К слову, порт 194 - официальный порт irc, 
     * но вы видели когда-нибудь ircd, запущенный на нём?
     * Итак, наше предложение - использовать порт 6697 для SSL, он используется уже рядом сетей
     * и используется в примере StunTour.
     * Вы можете открыть сколько угодно портов SSL, но используя так же и 6697, вы поможете
     * стандартизировать его;).
     */
    listen         *:6697
    {
        options
        {
            ssl;
            clientsonly;
        };
    };
    
    listen         *:8067;
    listen         *:6667;
    
    /* ЗАМЕЧАНИЕ: Если вы используете шелл IRCd, где несколько IP адресов, вы можете получить сообщение типа
     *            'Address already in use', ошибки в вашем лог-файле и ircd не запустится.
     *            Это значит, что вам необходимо указать определённый адрес IP вместо '*', к примеру:
     *            listen 1.2.3.4:6667;
     *            Конечно же, измените IP адрес на тот, который назначен вам.
     */
    
    /*
     * НОВОЕ: link {}
     * СТАРОЕ: C/N:Lines
     * Определяет блок для подключения серверов.
     * ЗАМЕЧАНИЕ: ЧТОБЫ ПОДКЛЮЧИТЬСЯ БЕЗ ВОПРОСОВ, НА ОБОИХ СЕРВЕРАХ НЕОБХОДИМЫ ПРАВИЛЬНЫЕ НАСТРОЙКИ LINK {}!
     * Синтаксис:
     * link (имя сервера)
     * {
     *    username    (имя пользователя, * работает тоже);
     *     hostname    (адрес ip/маска хоста);
     *    bind-ip        (На каком адресе IP слушать или *);
     *    port        (порт для соединения);
     *    hub (если это хаб, * так же работает, или макси сервера, которые могут быть под ним);
     *    [или leaf *;]
     *    password-connect "(пароль для отправки)";
     *    password-receive "(пароль, что мы должны получить)";
     *    class        (класс, в который определить сервер);
     *    options {
     *        (тут указываются опции*);
     *    };
     *      // Если мы используем SSL, мы можем указать, какой шифр использовать в режиме SSL
     *      // Получить список можно "openssl ciphers", шифры разделяются двоеточиями (:)
     *      
     *      ciphers "DES-CBC3-MD5";
     * 
     * };
    */
    
    /*
        опции:
        СТАРЫЕ    |    НОВЫЕ
        S        ssl
        Z        zip
        N/A        autoconnect
        N/A        quarantine
        N/A        nodnscache
    */
    
    
    link		hub.ru.by
    {
        username    *;
        hostname     1.2.3.4;
        bind-ip     *;
        port         7029;
        hub             *;
        password-connect "LiNk";
        password-receive "LiNk";
        class           servers;
            options {
                /* Замечание: Вы не должны использовать автоподключение (autoconnect) при подключении сервисов */
                autoconnect;
                ssl;
                zip;
            };
    };
    /*
     *
     * НОВОЕ: ulines {}
     * СТАРОЕ: U:Line
     * U-lines обладают большей силой/властью, чем другие сервера. Это нужно устанавливать только на
     * сервисы/сервера сбора статистики и НИКОГДА на обычные сервера UnrealIRCd!
     * Синтаксис:
     * ulines {
     *    (сервер в uline);
     *    (сервер в uline);
     *  [и т.д.]
     * };
    */
    ulines {
        services.roxnet.org;
        stats.roxnet.org;
    };
    
    /*
     * НОВОЕ: drpass {}
     * СТАРОЕ: X:Line
     * Определяет пароли для использования команд /die и /restart.
     * Синтаксис:
     * drpass { 
     *  restart        "(пароль для перезапуска)";
     *  die            "(пароль для отключения)";
     * };
     */
    drpass {
        restart "Я-люблю-перезапускать-сервер";
        die "умри-тупое!:)";
    };
    
    /*
     * НОВОЕ: log {} 
     * СТАРОЕ: N/A 
     * Указыает ircd куда и что протоколировать (вести лог). Вы можете указать столько, сколько пожелаете.
     * 
     * ФЛАГИ: errors, kills, tkl, connects, server-connects, oper
     * 
     * Синтаксис: 
     * log "путь_к_лог_файлу" 
     * {
     *    flags
     *    {
     *        flag;
     *        flag; 
     *        etc.. 
     *    }; 
     * };
     */
    
    log "ircd.log" {
        /* Удалять логфайл и старовать новый, если размер превышает 2MB, оставьте это как есть, чтобы использовать
    	тот же самый файл */
        maxsize 2097152;
        flags {
            oper;
            connects;
            server-connects;
            kills;
            errors;
            sadmin-commands;
            chg-commands;
            oper-override;
            spamfilter;
        };
    };
    
    /*
     * НОВОЕ: alias {}
     * СТАРОЕ: N/A
     * Позволяет установить вам псевдонимы на команды, такие как /nickserv, /chanserv и т.д.
     * ФЛАГИ: services, stats, normal
     *
     * Синтаксис:
     * alias "имя" {
     *    target "куда направить";
     *    type aliastype;
     * };
     *
     * [ЗАМЕЧАНИЕ: Вы так же можете подключить уже определённый файл с псевдонимами,подробнее doc/unreal32docs.ru.html в секции 2.9]
     */
    
    // Данный псевдноним /nickserv направляет команды пользователю NickServ, который подключён к серверу set::services-server
    /*alias NickServ {
        target "NickServ";
        type services;
    };*/
    
    // Если вы хотите, чтобы команды направлялись на тот же ник, что и команда, вы можете не указывать target
    //alias ChanServ { type services; };
    
    // Указывает, что команда /statserv будет отправлена пользователю StatServ, подключённого к серверу set::stats-server
    //alias StatServ { type stats; };
    
    // Указывает, что команда /superbot будет отправлена пользователю SuperBot
    //alias SuperBot { type normal; };
    
    
    /* Стандартные псевдонимы */
    alias NickServ { type services; };
    alias ChanServ { type services; };
    alias OperServ { type services; };
    alias HelpServ { type services; };
    alias StatServ { type stats; };
    
    /*
     * НОВОЕ: alias {}
     * СТАРОЕ: N/A
     * Позволяет установить такие псевдонимы на команды как /identify, /services и т.д.
     *
     * Синтаксис:
     * alias "имя" {
     *    format "строка формата" {
     *        target "кому";
     *              type aliastype;
     *        parameters "список параметров";
     *    };
     *    type command;
     * };
     */
    /* Вынесено отдельно, так как имеются отличия по сравнению с предыдущим типом псевдонимов и имеются очень большие отличия в
     * синтаксисе, так же используется для других целей, чем стандартные псевдонимы.
     */
    /*
    alias "identify" {
        format "^#" {
            target "chanserv";
            type services;
            parameters "IDENTIFY %1-";
        };
        format "^[^#]" {
            target "nickserv";
            type services;
            parameters "IDENTIFY %1-";
        };
        type command;
    };
    */
    /* Директива alias::format является регулярным выражением. Под первый формат подпадает команда /identify, 
     * если первым символом является #. Она посылает команду chanserv с параметрами IDENTIFY %1-.
     * Второй формат срабатывает, если в команде, посланной посредством /identify первый символ не #. Тогда ircd
     * передаёт эту команду nickserv с параметрами IDENTIFY %1-.
     */
    
    /* alias::format::parameters сходно со скриптовыми языками. %N (где N число) представляет собой параметр, посланный командой
     * (в случае /identify). Если вы указали %N-, так вы определили все параметры, начиная от N до последнего в этой строке.
     * Вы можете так же указать %n, что будет означать ник пользователя.
    */
    
    /* Стандартные псевдонимы */
    alias "services" {
        format "^#" {
            target "chanserv";
            type services;
            parameters "%1-";
        };
        format "^[^#]" {
            target "nickserv";
            type services;
            parameters "%1-";
        };
        type command;
    };
    
    alias "identify" {
        format "^#" {
            target "chanserv";
            type services;
            parameters "IDENTIFY %1-";
        };
        format "^[^#]" {
            target "nickserv";
            type services;
            parameters "IDENTIFY %1-";
        };
        type command;
    };
    
    /* Тут идёт пример использования "действительно псевдонима" (real command alias) */
    /* Данный пример - использование /GLINEBOT как /GLINE <параметры> 2d и т.д... */
    alias "glinebot" {
        format ".+" {
            command "gline";
            type real;
            parameters "%1 2d Боты запрещены на этом сервере, прочитайте ЧаВО на http://www.example.com/faq/123";
        };
        type command;
    };
    
    
    
    /*
     * НОВОЕ: tld {}
     * СТАРОЕ: T:Line
     * Устанавливает различные different motd и rules файлы
     * в зависимости от маски хостов клиентов.
     * Синтаксис: 
     * tld {
     *    mask (идент@хост);
     *    motd "(файл motd)";
     *    rules "(файл rules)";
     * };
     */
    
    tld {
        mask *@*.ru;
        motd "ircd.motd.ru";
        rules "ircd.rules.ru";
    };
    
    /* замечание: вы можете просто удалить блок выше, указанный для примера в случае, если есть в наличии
     * файлы motd/rules, используемые по умолчанию (ircd.motd, ircd.rules), которые будут использоваться всеми
     */
    
    /*
     * НОВОЕ: ban nick {}
     * СТАРОЕ: Q:Line
     * Банит ник, он не может быть использован.
     * Синтаксис:
     * ban nick {
     *    mask "(ник для бана)";
     *    reason "(причина)";
     * };
    */
    ban nick {
        mask "*C*h*a*n*S*e*r*v*";
        reason "Зарезервирован для сервисов";
    };
    /*
     * НОВОЕ: ban ip {}
     * СТАРОЕ: Z:Line
     * Банит адрес ip при подключении в сеть.
     * Синтаксис:
     * ban ip { mask (адрес ip/маска хоста); reason "(причина)"; };
    */
    ban ip {
        mask 195.86.232.81;
        reason "Отключённый сервер";
    };
    /*
     * НОВОЕ: ban server {}
     * СТАРОЕ: Серверный Q:Line
     * Отключает сервер от попыток подключиться в сеть.
     * Если сервер подключается к удалённому серверу в сети, локальный сервер
     * будет отключён он сети.
     * Синтаксис:
     * ban server {
     *    mask "(имя сервера)";
     *    reason "(причина)";
     * };
    */
    
    ban server {
        mask eris.berkeley.edu;
        reason "Ламерский сервер :).";
    };
    /*
     * НОВОЕ: ban user {}
     * СТАРОЕ: K:Line
     * Пользователь с указанной маской не может подключиться к вашему серверу.
     * Синтаксис:
     * ban user { mask (маска хоста/адрес ip); reason "(причина)"; };
    */
    
    ban user {
        mask *newiceman@*.irc.by;
            reason "Идиот!";
    };
    
    /*
     * НОВОЕ: ban realname {}
     * СТАРОЕ: n:Line
     * Банит по указанному пользователем реальному имени.
     * Синтаксис:
     * ban realname {
     *    mask "(Реальное имя)";
     *     reason "(причина)";
     * };
    */
    
    ban realname {
        mask "Swat Team";
        reason "mIRKFORCE";
    };
    
    ban realname {
        mask "sub7server";
        reason "sub7";
    };
    
    /*
     * ЗАМЕЧАНИЕ ДЛЯ ВСЕХ БАНОВ: они могут повторятся в случае необходимости уточнений!
     * 
     * НОВОЕ: except ban {} 
     * СТАРОЕ: E:Line
     * Предотвращает бан. 
     * Синтаксис:
     * except ban { mask (идент@хост); };
     * Повторите except ban {} столько раз, сколько хотите использовать различные хосты.
     */
    
    except ban {
        /* не банить wax */
        mask           *wax@195.222.*;
    };
    
    /*
     * НОВОЕ: deny dcc {} 
     * СТАРОЕ: dccdeny.conf
     * Используется чтобы запретить отправку dcc... служит для защиты от вирусов
     * Синтаксис: 
     * deny dcc 
     * { 
     *   filename "имя файла для блокироваки (т.е. *exe)";
     *   reason "причина";
     * };
     */
    deny dcc {
        filename "*sub7*";
        reason "Вероятность вируса Sub7";
    };
    
    /*
     * НОВОЕ: deny channel {}
     * СТАРОЕ: N/A (НОВОЕ)
     * Запрещает вход на указанные каналы.
     * Синтаксис:
     * deny channel {
     *     channel "(канал)";
     *     reason "причина";
     * };
    */
    deny channel {
        channel "*warez*";
        reason "Warez нелегален";
    };
    
    /*
     * НОВОЕ: vhost {}
     * СТАРОЕ: файл Vhost.conf
     * Устанавливает фейковый ip для не-операторов или операторы слишком
     * ленивые, чтобы сделать /sethost :P
     * Синтаксис:  
     *   vhost { 
     *       vhost (vhost.com); 
     *       from {
     *            userhost (идент@хост, кому разрешено использовать);
     *       };
     *       login (логин);
     *       password (пароль);
     *   };
     *        чтобы использовать vhost, наберите /vhost (логин) (пароль) в IRC
     */
    vhost {
        vhost           i.hate.microsefrs.com;
        from {
            userhost       *@*.image.dk;
        };
        login           stskeeps;
        password        moocowsrulemyworld;
    };
    
    /* Вы так же можете подключить и другие конфигурационные файлы */
    /* include "klines.conf"; */
    
    /* Конфигурация Сети */
    set {
        network-name         "ROXnet";
        default-server         "irc.roxnet.org";
        services-server     "services.roxnet.org";
        stats-server         "stats.roxnet.org";
        help-channel         "#ROXnet";
        hiddenhost-prefix    "rox";
        /* prefix-quit         "no"; */
        /* Ключи скрытия хостов должны быть одинаковы на всех серверах в сети.
         * Они использутся для генерации замаскированных хостов и должны держаться в секрете.
         * Ключи должен быть 3-мя случайными срочками с 5-100 символами в каждой
         * (10-20 символов должно быть достаточно) и должны содержать прописные (a-z),
         * заглавные (A-Z) буквы и цифрты (0-9) [смотрите пример первого ключа].
         * Подсказка: В *NIX системах вы можете запустить './unreal gencloak' в вашем шелле, чтобы получить
         * 3 строки, сгенерированные случайным образом.
         */
        cloak-keys {
            "aoAr1HnR6gl3sJ7hVz4Zb7x4YwpW";
            "и ещё одна";
            "и ещё одна";
        };
        /* хост on-oper */
        hosts {
            local        "locop.roxnet.org";
            global        "ircop.roxnet.org";
            coadmin        "coadmin.roxnet.org";
            admin        "admin.roxnet.org";
            servicesadmin     "csops.roxnet.org";
            netadmin     "netadmin.roxnet.org";
            host-on-oper-up "no";
        };
    };
    
    /* Специфическая конфигурация сервера */
    
    set {
        kline-address "set.this.email";
        modes-on-connect "+ixw";
        modes-on-oper     "+xwgs";
        oper-auto-join "#opers";
        options {
            hide-ulines;
            /* Если желаете, вы можете включить проверку ident  */
            /* identd-check; */
            show-connect-info;
        };
    
        maxchannelsperuser 10;
        /* Указывает минимальное время, сколько был подключен пользователь, 
         * прежде чем разрешать ему использовать сообщение QUIT.
         * Должно помочь в борьбе со спамом */
        anti-spam-quit-message-time 10s;
        /* Устанавливает постоянное сообщение о выходе - значит, что локальный сервер не разрешит
               различные сообщения о выходе */
        /* static-quit "Клиент вышел";    */
    
        /* Вы так же можете блокировать все сообщения о выходе из канала просто раскомментировав это и указать'yes'
         * или указать какой-нибудь другой текст (например: "Пока пока!"), который всегда будет использован как причина. */
        /* static-part yes; */
    
        /* Позволяет сделать важные сообщения stats были использованы только операторами, используйте * для всех сообщений stats,
         * или закомментируйте, что позволит пользователям видеть все сообщения stats. Чтобы получить весь список, введите '/stats'.
         * Некоторые администраторы могут убрать 'kGs' для того, чтобы разрешить обычным пользователям видеть список
         * klines, glines и shuns.
         */
        oper-only-stats "okfGsMRUEelLCXzdD";
    
        /* Тротлинг: данный пример устанавливает предел в 3 попытки подключения в 60 секунд (для одного хоста). */
        throttle {
            connections 3;
            period 60s;
        };
    
        /* Защита от флуда */
        anti-flood {
            nick-flood 3:60;    /* 3 изменения ника в 60 секунд (по умолчанию) */
        };
    
        /* Фильтр спама */
        spamfilter {
            ban-time 1d; /* длительность по умолчанию бана *line, установленного spamfilter */
            ban-reason "Спам/Реклама"; /* причина по умолчанию */
            virus-help-channel "#help"; /* канал при использовании действия 'viruschan' */
            /* except "#help"; канал для исключения действия фильтра */
        };
    };
    
    /*
     * Проблемы или нуждаетесь в более подробной информации?
     * 1) www.vulnscan.org/UnrealIRCd/unreal32docs.ru.html
     * 2) www.vulnscan.org/UnrealIRCd/faq/ <- содержит 80% ваших вопросов!
     * 3) Если у вас до сих пор остались проблемы, зайдите на irc.unrealircd.org #unreal-support,
     *    но мы требуем, чтобы вы ПРЕЖДЕ ПРОЧИТАЛИ ДОКУМЕНТАЦИЮ и ЧаВО!
     */
  2. Редактируем файл ircd.motd - информация об IRC сервере, которая выводится каждому пользователю при подключении или выполнении команды /motd.
    nano ircd.motd
  3. Редактируем файл ircd.rules - правила использования IRC сервера, выдаваемые по запросу /rules:
    nano ircd.rules

Русские ники в UnrealIRCd

  1. В unrealircd.conf в блок set добавим:
    allowed-nickchars { windows-1251; };
  2. Перезагрузим конфигурационный файл, введя в IRC команду:
    /rehash

Запуск UnrealIRCd

В директории с установленным UnrealIRCd выполним команду:
./unreal start
При удачном запуске видим:
* Loading IRCd configuration ..
* Configuration loaded without any problems ..
* Initializing SSL.
* Dynamic configuration initialized .. booting IRCd.
Если допущены ошибки, сервер укажет ошибку и ее расположение.

Настройка автозапуска (crontab) UnrealIRCd

Crontab через каждый N промежуток времени запускает указанный в его списке файл. В свою очередь в файле скрипт, проверяющий, запущена на ли программа. Если нет - запускает ее. В директории с установленным UnrealIRCd лежит файл ircdchk, который после установки UnrealIRCd автоматически сгенерирован со всеми необходимыми параметрами. Остается лишь добавить в crontab выполнение этого файла по таймеру. Вызываем редактор crontab:
crontab -e
Добавим правило:
*/5 * * * * /home/dim/irc/unreal3/ircdcron/ircdchk > /dev/null 2>&1
Путь до ircdchk указываем свой. В конце файла обязательно оставляем пустую строку. Данное правило означает, что каждые 5 минут будет выполняться файл ircdchk.

Удалённые включения (remote includes)

Описано тут.

Линковка двух IRC серверов

Описано тут.

Дополнительные модули для UnrealIRCd

Описано тут.