/*
 * 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,
 *    но мы требуем, чтобы вы ПРЕЖДЕ ПРОЧИТАЛИ ДОКУМЕНТАЦИЮ и ЧаВО!
 */
