UnrealIRCd - это самый популярный IRC сервер в русско-язычном IRC пространстве. LineIRCd/Dreamterra мод - усовершненствованная модификация сборки UnrealIRCd 3.2.1 (DalNetRU2.2.9.2 мод). Но тем неменее эта модификация давно устарела в техническом плане в сравнении с оригинальным UnrealIRCd 3.2.10.

Разработчики UnrealIRcd: Bram Syzop Matthys и команда, автор русской модификации DalNetRU2.2.9.2: Сергей JSergey, дальнейшая модификация LineIRCd: Hamper и Archangel, адаптация под IRC-сеть Дримтерра и легкая модификация: Дмитрий DiM.

Достоинства и недостатки LineIRCd/Dreamterra мод

Достоинства: Недостатки:

Отличия от DalNetRU2.2.9.2 мод

Установка UnrealIRCd

Работаем через SSH клиент в Linux сервере Debian 7 от обычного пользователя.
  1. Переходим в папку, в которую будем устаналивать UnrealIRCd:
    cd /home/dim/irc
  2. Скачиваем архив с UnrealIRCd:
    wget https://raw.githubusercontent.com/dimst/IRC/master/unrealircd-3.2.1-linedtmod.tgz
  3. Распаковываем его:
    tar xf unrealircd-3.2.1-linedtmod.tgz
  4. Переходим в директорию с исходниками:
    cd unreal-src
  5. Запускаем конфигурацию, в которой нужно ответить на несколько вопросов:
    ./Config
  6. Запускаем компиляцию:
    make
  7. Если сервер сконфигурирован с поддержкой SSL, то необходимо создать SSL-сертификаты:
    make pem
  8. Запускаем инсталяцию:
    make install
  9. Переходим в директорию с установленным сервером:
    cd ../unrealircd
  10. Копируем готовые конфигурационные файлы (unrealircd.conf, help.conf, ircd.motd, ircd.rules, ircd.log) в корень директории установленного IRC сервера:
    cp configs/* ./

Настройка UnrealIRCd

  1. Редактируем unrealircd.conf под свой IRC-сервер (каждый параметр конфигурации подробно описан в документации):
    nano unrealircd.conf
    Содержимое файла:
    /*
    ------------------------------------
    Конфигурационный файл unrealircd.conf
    для UnrealIRCd 3.2.1 (LineIRCd/Dreamterra мод)
    Инструкция по установке и настройке
    https://dim.st/irc/unrealircd-linedtmod
    Документация
    https://dim.st/irc/unrealircd-doc
    ------------------------------------
    */
    
    // ОБЩАЯ ИНФОРМАЦИЯ О СЕРВЕРЕ (команда /whois ник)
    me
    {
      // название IRC-сервера (точка обязательна)
      name "dreamterra.net";
    
      // описание (любое, даже с цветом)
      info "Частная IRC-сеть 'дримтерра'";
    
      // номер, numeric (0-254, на каждом сервере в сети
      // должен быть уникальный нумерик, иначе сервера не слинкуются)
      numeric 13;
    };
    
    
    
    // ИНФОРМАЦИЯ ОБ АДМИНИСТРАЦИИ СЕРВЕРА (команда /admin)
    admin
    {
      "Главный администратор - Дмитрий 'DiM' (admin@dim.st)";
      # "вторая строчка";
      # "третья строчка";
    };
    
    
    
    // КЛАССЫ ПОДКЛЮЧАЮЩИХСЯ КЛИЕНТОВ
    
    // стандартный класс для большинства пользователей
    class USER
    {
      // частота пинга (90-180)
      pingfreq 90;
    
      // максимальное число подключений для этого класса
      // (51 пользователь не сможет подключиться)
      // своеобразная защита от флуда - когда ботов много, это их сдерживает
      maxclients 50;
    
      // количество данных, которое можно передавать подряд
      sendq 100000;
    
      // количество данных, которое можно получить одновременно (3000-8000)
      // своеобразная защита от флуда - активно флудящих ботов будет
      // выкидывать из IRC с причиной Excess flood
      recvq 3000;
    };
    
    // особый класс для иркопов, в котором нет
    // жестких ограничений, как для обычных пользователей
    class IRCOP { pingfreq 90; maxclients 10; sendq 500000; recvq 10000; };
    
    // класс для мобильных пользователей с увеличенным тайм-аутом пинга
    class MOBUSER { pingfreq 300; maxclients 50; sendq 100000; recvq 3000; };
    
    // класс для серверов
    class SERVER { pingfreq 90; maxclients 10; sendq 1000000; connfreq 60; };
    
    
    
    // ПРАВИЛА ПОДКЛЮЧЕНИЯ К СЕРВЕРУ
    
    // правила подключения для обычных пользователей
    allow
    {
      // маска (идент, IP), с которой разрешено подключаться к IRC
      // *@* - нет ограничений
      ip *@*;
    
      // аналогично. если хоста нет, нужно указывать *@NOBODY
      hostname *@*;
    
      // для какого класса пользователей данное правило
      class USER;
    
      // сколько одинаковых IP адресов (хостов) смогут подключиться
      // третий клиент с тем же IP не сможет войти в IRC
      // для BNC создаем класс без ограничений
      maxperip 2;
    
      // доступ к серверу только с паролем. пароль можно зашифровать
      // (подробнее в документации)
    /*
      password "secret"
      {
        // если пароль шифруется, здесь нужно указать тип шифрования
      };
    */
      // перенаправлять на указанный сервер, если пользователи
      // упёрлись в лимит maxclients (смотри class clients)
      #redirect-server irc.server.net;
    
      // порт IRC сервера, на который перенаправляются пользователи
      #redirect-port 6667;
    
    /*
      options
      {
         // всегда показывать IP вместо хоста у пользователей
         useip;
    
         // вместо идента использовать имя пользователя из клиента
         noident;
    
         // только пользователи из этого блока могут подключаться к серверу по SSL
         ssl;
    
         // продолжить совпадение, если пароль не был задан (можно клиентов определить в специальные классы, если они подставили пароль)
         nopasscont;
      };
    */
    
    };
    
    // правила подключений для BNC
    // замени IP и хост на свои значения
    // (если BNC не используется, можно удалить этот блок)
    allow
    {
      ip *@127.0.0.1;
      hostname *@bnc.dreamterra.net;
      class USER;
    };
    
    // правила подключений для IRC операторов. в данном случае пользователь
    // с маской *admin@dim.st будет подключаться как привелегированный класс IRCOP
    allow
    {
      ip *admin@188.226.150.107;
      hostname *admin@dim.st;
      class IRCOP;
    };
    
    // правила подключений для мобильных пользователей
    allow { ip *@*; hostname *@*; options { mobile; }; class MOBUSER; maxperip 3; };
    
    
    
    // ПОРТЫ, КОТОРЫЕ ДОЛЖЕН СЛУШАТЬ IRC-СЕРВЕР
    
    // слушать порт 6667 на всех IP-адресах сервера (о чем говорит *)
    // если на сервере несколько IP-адресов,
    // то нужно указать IP адрес явно, например, 1.2.3.4:6667
    listen *:6667
    {
      options
      {
        // подключиться к указанному порту смогут только пользователи
        // serversonly - только сервера
        clientsonly;
    
        // кодировка CP1251 (windows-1251)
        // другие кодировки: cp_utf, cp_dos, cp_koi, cp_mac
        cp_win;
    
        // порт c поддержкой SSL. Для SSL выделен отдельный порт 6697 ниже
        #ssl;
    
        // параметр, указывающий на порт для мобильных клиентов
        // выделен отдельный порт 6677 ниже
        #mobile;
    
        // CR поддержка чата на java
        #java;
      };
    };
    
    // порт для кодировки UTF-8
    listen *:6665 { options { clientsonly; cp_utf; }; };
    
    // порт c поддержкой SSL. активируй, только если
    // сконфигурировал IRC сервер с поддержой SSL
    #listen *:6697 { options { clientsonly; cp_win; ssl; }; };
    
    // порт c поддержкой SSL, кодировка UTF-8
    #listen *:6695 { options { clientsonly; cp_utf; ssl; }; };
    
    // порт для мобильных клиентов
    // активируй, если требуется
    #listen *:6677 { options { clientsonly; mobile; cp_win; }; };
    
    // порт для мобильных клиентов с кодировкой UTF-8
    // активируй, если требуется
    #listen *:6675 { options { clientsonly; mobile; cp_utf; }; };
    
    // порт для линковки серверов и сервисов
    listen *:5555 { options { serversonly; }; };
    
    
    
    // IRC операторы (/oper логин пароль)
    
    // логин иркопа
    oper DiM
    {
      // маски, с которых будет возможно авторизоваться под этой оперкой
      // (по-умолчанию с любой, для большей безопасности можно вписать свой
      // IP-адрес, если статический, или блок адресов и дополнительно
      // указать идент)
      from
      {
        userhost *@*;
        #userhost *@1.2.3.4;
        #userhost root@1.2.3.*;
      };
    
      // пароль иркопа
      // можно зашифровать (смотри документацию)
      password "123456"
      {
        // если пароль шифруется, здесь нужно указать тип шифрования
      };
    
      // класс
      class IRCOP;
    
      // уровень
      // netadmin - админ сети (+N), sadmin - сервис-админ (+a), admin - сервер-админ (+A),
      // global - глобальный иркоп (+o), local - локальный иркоп (+O)
      level netadmin; 
    
      // права иркопа, флаги
      // для админа сети перечислены все доступные флаги
      flags
      {
        // статус
        // netadmin - админ сети (+N), services-admin - сервис-админ (+a), admin - сервер-админ (+A),
        // global - глобальный иркоп (+o), local - локальный иркоп (+O)
        netadmin;
    
        // доступ к выключению IRC сервера (команда /die)
        // для безопасности отключено
        #can_die;
    
        // доступ к перезапуску сервера (команда /restart)
        can_restart;
    
        // доступ к перезагрузке конфигурационного файла unrealircd.conf
        // команда /rehash
        can_rehash;
    
        // доступ к OperOverride
        can_override;
    
        // доступ к принудительному отключению (KILL) всех пользователей сети
        // команда /kill
        can_globalkill;
    
        // доступ к принудительному отключению (KILL) только тех пользователей сервера,
        // на котором прописан иркоп
        #can_localkill;
    
        // доступ к бану только на сервере, на котором иркоп прописан
        // команда /kline
        can_kline;
    
        // доступ к снятию бана только на сервере, на котором иркоп прописан
        // команда /kline
        can_unkline;
    
        // доступ к бану только на сервере, на котором иркоп прописан
        // команда /zline
        can_zline;
    
        // доступ к глобальному бану, шуну и управлению спамфильтром
        // команды /gline, /shun, /spamfilter
        can_gkline;
    
        // доступ к глобальному бану
        // команда /gzline
        can_gzline;
    
        // доступ к моду +W (видеть, кто на тебя делает /whois)
        get_umodew;
    
        // доступ к моду +q (защита от кика)
        can_setq;
    
        // автополучение мода +h (хелпер)
        helpop;
    
        // доступ к локальному чату иркопов
        // команда /wallops
        can_wallops;
    
        // доступ к глобальному чату иркопов
        // команда /globops
        can_globops;
    
        // доступ к глобальному соединению серверов
        can_globalroute;
    
        // доступ только к локальному соединению серверов
        #can_localroute;
    
        // доступ к уведомлению всех пользователей
        can_globalnotice;
    
        // доступ к уведомлению только локальных пользователей
        #can_localnotice;
    
        // автоустановка вирт хостов (указаны в блоке set)
        #get_host;
    
        // доступ к DCC командам /dccdeny и /undccdeny
        can_dccdeny;
    
        // доступ к записи в unrealircd.conf с IRC-сервера
        // команда /addline
        can_addline;
      };
    
      // автоматически получаемые сно-маски
      snomask kcfFjveGqSso;
    
      // автоматически получаемые моды
      #modes HLq;
    
      //дополнительная строка в /whois (любой текст)
      #swhois "Админ всей сети!";
    
      // максимальное число иркопов с этой оперки
      maxlogins 2;
    };
    
    
    
    // НАСТРОЙКА СЕРВЕРА И СЕТИ
    set
    {
      // название сети
      network-name Dreamterra;
    
      // сообщение, показываемое локально забаненным юзерам (/kline, /zline)
      kline-address http://dreamterra.net/Bans;
      
      // сообщение, показываемое глобально забаненным юзерам (/gline, /gzline)
      gline-address http://dreamterra.net/Bans;
    
      // автозаход на канал для всех пользователей при подключении.
      // если несколько каналов, то "#канал1,#канал2"
      #auto-join "#dreamterra";
    
      // автозаход на канал для иркопов после /oper
      oper-auto-join "#opers";
    
      // канал помощи
      help-channel "#support";
    
      // моды, устанавливаемые юзерам при подключении к серверу
      modes-on-connect +w;
      
      // блокируемые пользовательские моды, которые нельзя снять или установить
      #restrict-usermodes i;
    
      // сномаски, устанавливаемые юзерам при подключении к серверу
      #snomask-on-connect ;
    
      // моды, выдаваемые всем иркопам после /oper
      modes-on-oper +wgxWsf;
    
      // сномаски, выдаваемые всем иркопам после /oper
      snomask-on-oper +kcfFjqegGSsov;
    
      // моды, выставляемые на пустом канале при входе на него
      modes-on-join +nt;
    
      // блокируемые канальные моды, которые нельзя снять или установить
      #restrict-channelmodes G;
    
      // блокировать расширенные типы банов (~q,~c)
      // значения: * - блок всех расширенных банов, qc - блокировать типы ~q и ~c
      #restrict-extendedbans *;
    
      // название сервисного сервера (Anope)
      services-server Anope.Service;
    
      // название сервера статистики (Denora Stats или NeoStats)
      stats-server Denora.Stats;
      
      // сервер, который сообщается пользователям, если текущий сервер полон
      default-server dreamterra.net;
    
      // добавляемый текст в /quit сообщении
      prefix-quit "1,0 дримтерра™ ";
    
      // постояное неизменяемое quit-сообщение
      #static-quit "1,0 дримтерра™ ";
    
      // постоянное неизменяемое part-сообщение. зачения: no, yes, текст
      #static-part  "";
    
      // время, в течение которого не будет показываться /quit сообщение. указанное самим юзером (защита от quit спама)
      anti-spam-quit-message-time 5m;
    
      // максимальное колличество данных, выдаваемых при выполнении /who
      #who-limit 10;
    
      // максимальное количество записей в списке игнора для одного юзера
      silence-limit 10;
    
      // максимальное колличество символов в бане (по-умолчанию 2048 байт = 34 символа)
      #maxbanlength 4096;
    
      // команда /stats доступна только иркопам
      oper-only-stats "*";
    
      // максимальное число открытых каналов для одного пользователя
      maxchannelsperuser 20;
    
      // // максимальное число разрешающих правил DCC для одного пользователя
      maxdccallow 15;
    
      // префикс команд для ботов
      channel-command-prefix "!";
    
      // разрешить смену хоста для всех
      // значения: always - разрешить, never - запретить,
      // not-on-channels - разрешить, если юзер не находится на каналах,
      // force-rejoin - разрешить и принудительно перезайти на всех открытых каналах
      allow-userhost-change always;
    
      // префикс, указываемый при скрытии хоста
      // работает, если активен модуль cloak
      hiddenhost-prefix x;
    
      // время бана (/k(g,z,gz)line, /shun) по-умолчанию (m - минуты, h - часы, d - дни)
      default-bantime 1h;
    
      // время отключения действий при срабатывании +f (защиты от флуда) по-умолчанию (в минутах)
      modef-default-unsettime 1;
    
      // максимальное время отключения действий при срабатывании +f (защиты от флуда) по-умолчанию (в минутах)
      modef-max-unsettime 60;
    
      // время бана (/k(g,z,gz)line, /shun) по версии клиента по-умолчанию (m - минуты, h - часы, d - дни)
      ban-version-tkl-time 1h;
    
      options
      {
        // oidentd идентификация
        #identd-check;
    
        // показывать информационные нотисы при подключении
        #show-connect-info;
    
        // скрывать сервера, указанные в uline-блоке (как правило это сервисы) из /map и /links
        hide-ulines;
    
        // все сервера в /map и /links будут выглядеть, как будто напрямую прилинкованы к данному серверу
        // т.е. невозможно определить, куда и какой сервер прилинкован, если разветвленная сеть           
        flat-map;
    
        // иркопу после авторизации (/oper) будет показано opermotd-сообщение
        #show-opermotd;
    
        // не преобразовывать IP-адреса в хосты
        #dont-resolve;
    
        // разрешить доступ к команде /mkpasswd (генератор хэша пароля) всем
        #mkpasswd-for-everyone;
    
        // разрешить выходить с канала (/part), если на пользователе /shun
        allow-part-if-shunned;
    
        // уведомлять юзера о том, что его неудачная попытка авторизоваться
        // как иркоп (/oper) была сообщена активным иркопам
        fail-oper-warn;
      };
    
      // защита от частых подключений (флуд подключениями)
      throttle
      {
        // не более 3х подключений
        connections 3;
    
        // за 60 секунд
        period 60s;
      };
    
      // защита от различного флуда
      anti-flood
      {
        // бан за неизвестный флуд на 1 минуту
        unknown-flood-bantime 1m;
    
        // кол-во переданных от юзера данных (в килобайтах), после чего юзер будет килльнут (/kill)
        unknown-flood-amount 1;
    
        // защита от флуда /away (не чаще 3х раз за 60 секунд)
        away-flood 3:60;
        
        // защита от флуда сменой ника (/nick) (не чаще 3х смен ника за 60 секунд)
        nick-flood 3:60;
      };
    
      // подключение к oidentd серверу если в options активен параметр identd-check
      ident
      {
        // время истечения попытки подключиться к oidentd серверу
        connect-timeout 10s;
    
        // время истечения попытки получить данные от oidentd сервера
        read-timeout 10s;
      };
    
      // параметры DNS сервера
      dns
      {
        // имя сервера в качестве DNS-сервера
        nameserver 127.0.0.1;
    
        // время ожидания, после чего будет тайм-аут
        timeout 3s;
    
        // количество попыток соединения
        retries 3;
      };
    
      // выртуальные хосты для иркопов (смотри блок oper)
      hosts
      {
        local "local.ircop";
        global "global.ircop";
        admin "server.admin";
        servicesadmin "service.admin";
        netadmin "network.admin";
      };
    
      // локальный постфикс для всех
      local-postfix-for-all yes;
    
      // не скрывать локальные хосты
      no-hide-local yes;
    
      // параметры спамфильтра
      spamfilter
      {
        // время бана по-умолчанию, если действие за попадание в спамфильтр - /g(k,z,gz)line
        // (m - минуты, h - часы, d - дни)
        ban-time 1h;
    
        // причина бана по-умолчанию, если действие за попадание в спамфильтр - /g(k,z,gz)line
        ban-reason "спам/реклама";
    
        // на какой канал закидывать нарушителя
        // если действие за попадание в спамфильтр - viruschan
        virus-help-channel "#spamers";
    
        // доступ к каналу, указанному в virus-help-channel
        // yes - канал закрыт для всех, кроме попавших в спамфильтр, no - открыт для всех
        virus-help-channel-deny yes;
    
        // каналы, которые не фильтруются спамфильтром
        except "#support,#opers";
    
        // обнаружение "медленного" спамфильтра
        // 250 - 250 милисекунд (значение по-умолчанию), 0 - отключить
        #slowdetect-warn 0;
    
        // удаление спамфильтра, если его выполнение занимает определенное время
        // 500 - 500 милисекунд (по-умолчанию), 0 - отключить
        #slowdetect-fatal 0;  
      };
    
      // если при конфигурации UnrealIRCd (./Config) включена поддержка SSL
      ssl
      {
        // имя файла, в котором SSL сертификат
        certificate server.cert.pem;
    
        // имя файла, в котором SSL ключ
        key server.key.pem;
    
        // имя файла, в котором сертификаты доверенных CA
        #trusted-ca-file ;
    
        // имя файла с поддержкой EGD
        #egd ;
    
        // разрешённые шифры (по умолчанию используются из OpenSSL)
        #server-cipher-list;
    
        // через какое количество байт SSL-сессия должна быть переустановлена (например: 10m - для 10 мегабайт)
        #renegotiate-bytes ;
    
        // через сколько времени переустановить SSL-сессию (например: 1h - один час)
        #renegotiate-timeout 1h;
    
        options
        {
          // запрет пользователей без сертификата
          #fail-if-no-clientcert;
    
          // блокировака пользователей с самоподписными сертификатами
          #no-self-signed;
    
          // проверка правильности сертификата
          #verify-certificate;
    
          // позволяет использовать клиентам SSL на обычных портах (не-SSL)
          #no-starttls;
        };
      };
    
      // параметры модуля защиты от HTTP-аттак
      nopost
      {
        // действие при обнаружении HTTP подключения к порту ircd
        // варианты: gline, gzline, kline, zline, shun, tempshun
        ban-action kill;
    
        // время действия бана
        ban-time 1h;
    
        // причина бана
        ban-reason "HTTP command from IRC connection (ATTACK?)";
    
        // хосты, котороые nopost модуль игнорирует
        except-hosts
        {
          "127.0.0.1";
          "dreamterra.net";
          "dim.st";
        };
      };
    
      #accept-limit 30;
      #callerid-time 60;
    };
    
    
    
    // ПОДКЛЮЧЕНИЕ ФАЙЛОВ motd и rules
    tld
    {
      // для каких пользователей (маска) будут показываться файлы motd и rules
      mask *@*;
    
      // расположение файла с описанием сервера
      motd "ircd.motd";
    
      // расположение файла с правилами сервера
      rules "ircd.rules";
    
      // расположение файла с кратким описанием сервера, где будет сноска на полное описание
      #shortmotd "ircd.smotd";
    
      // расположение файла с информацией для иркопа после успешной авторизации (/oper)
      #opermotd "oper.motd";
    
      // расположение файла с информацией для ботов (+B)
      #botmotd "bot.motd";
    
      // автозаход на канал - аналогичен настройке в 'set->auto-join'
      #channel "#dreamterra";
    
      options
      {
        // для мобильных пользователей показывать mobile.motd
        mobile;
    
        // показывать информацию для пользователей SSL
        #ssl;
    
        // показывать информацию для удалённых пользователей
        #remote;
      };
    };
    
    
    
    // АНАЛОГ TLD (рекомендуется использовать tld)
    /*
    files
    {
      motd /путь/до/ircd.motd;
      shortmotd /путь/до/ircd.smotd;
      opermotd /путь/до/oper.motd;
      svsmotd /путь/до/svs.motd;
      botmotd /путь/до/bot.motd;
      rules /путь/до/ircd.rules;
      tunefile /путь/до/ircd.tune;
      pidfile /путь/до/ircd.pid;
    };
    */
    
    
    
    // ПАРОЛИ НА КОМАНДЫ ПЕРЕАЗАПУСКА И ВЫКЛЮЧЕНИЯ IRC-СЕРВЕРА
    // (/restart restartpass и /die diepass)
    
    drpass
    {
      // пароль для перезапуска сервера (/restart пароль)
      // пароль можно зашифровать (смотри документацию)
      restart "restartpass"
      {
        // если пароль шифруется, здесь нужно указать тип шифрования
      };
    
      // пароль для выключения сервера (/die пароль)
      die "diepass"
      {
        // если пароль шифруется, здесь нужно указать тип шифрования
      };        
    };
    
    
    
    // ЛИНКОВКА СЕРВЕРОВ
    
    // линковка серверов, в том числе сервисов
    link dreamterra.net
    {
      // идент линкуемого сервера
      username *;
    
      // IP адрес (хост) линкуемого сервера
      // если с поддержкой IPv6: hostname ::ffff:1.2.3.4;
      hostname 95.85.45.90;
      
      // IP-адрес - можно указать, если на линкуемом сервере
      // несколько IP-адресов
      bind-ip *;
    
      // порт для линка (должен быть открыт на обоих серверах)
      port 5555;
    
      // право линковать еще сервера к этому линкуемому серверу
      // если указать leaf - линкуемый сервер не сможет линковать к себе
      hub *;
    
      // если указан "leaf" вместо "hub", можно задать правила возможности линковки
      // для этого линкуемого сервера
      // 1 - сервер не может иметь линков под собой
      // 2 - значит, сервер может иметь линки, но его линкуемые сервера больше не могут
      // 0 - ограничений нет (значение по-умолчанию)
      #leafdepth 1;
    
      // пароль для линковки
      // можно зашифровать (смотри документацию)
      password-connect "123123";
    
      // пароль для линковки
      password-receive "123123";
    
      // класс линкуемого сервера
      class SERVER;
    
      // уровень сжатия
      // будет работать, если сервер сконфигурирован c поддержкой zlib (ziplinks) и в 'options' активен 'zip'
      #compression-level 9;
    
      // шифры SSL
      #ciphers ;
      options
      {
        // использовать SSL
        #ssl;
    
        // автоматически подключаться к главном серверу
        // для сервисов не требуется, для обычных серверов - да (на одном из слинкованных серверах)
        #autoconnect;
    
        // сжатие трафика между серверами, будет работать, если сервер сконфигурирован c поддержкой zlib (ziplinks)
        #zip;
    
        // не кэшировать IP-адрес исходящего соединения. разумно использовать, если IP-адрес динамический
        #nodnscache;
    
        // не проверять удалённый хост
        #nohostcheck;
    
        // иркопы с этого сервера будут ограничены правами локальных операторов
        #quarantine;
      };
    };
    
    
    
    // ПРИВЕЛЕГИРОВАННЫЕ СЕРВЕРА - СЕРВИСЫ
    ulines
    { 
      Anope.Service;
      Denora.Stats;
    };
    
    
    
    // СИСТЕМНОЕ ЛОГИРОВАНИЕ В ФАЙЛ ircd.log
    log "ircd.log"
    {
      // максимальный размер файла
      maxsize 5MB;
    
      // что логировать
      flags
      {
        // ошибки
        errors;
    
        // подключения, отключения пользователей
        connects;
    
        // подключения, отключения серверов
        server-connects;
    
        // выполнения команды /oper
        oper;
    
        // выполнения команды /kline
        kline;
    
        // выполнения команд /kill, /kline, /zline /gzline (снятия, добавления, истекания)
        kills;
    
        // выполнения команд /shun, /spamfilter (снятия, добавления, истекания)
        tkl;
    
        // выполнения команд /samode, /sajoin, /sapart и пр.
        sadmin-commands;
    
        // выполнения команд /chghost, /chgname, /chgident и пр.
        chg-commands;
    
        // использование OperOverride
        oper-override;
    
        // попадания в спамфильтр
        spamfilter;
      };
    };
    
    
    
    // АЛИАСЫ (СОКРАЩЕНИЯ КОМАНД) ДЛЯ СЕРВИСОВ
    
    // короткая команда
    // пример: '/ns help' будет результатом '/msg nickserv help'
    alias ns
    {
      // перенаправлять 'ns' на 'NickServ'
      nick NickServ;
    
      // тип сообщения - сервисный. больше типов смотри в документации
      type services;
    
      // пропускать ли такие сообщения через спамфильтр (по-умолчанию 'no' - не фильтровать)
      #spamfilter yes;
    };
    
    alias cs { nick ChanServ; type services; };
    alias bs { nick BotServ; type services; };
    alias ms { nick MemoServ; type services; };
    alias os { nick OperServ; type services; };
    alias hs { nick HostServ; type services; };
    alias hp { nick HelpServ; type services; };
    alias ds { nick DenoraServ; type stats; };
    alias ss { nick SeenServ; type stats; };
    alias st { nick StatServ; type stats; };
    alias nickserv { nick NickServ; type services; };
    alias chanserv { nick ChanServ; type services; };
    alias botserv { nick BotServ; type services; };
    alias memoserv { nick MemoServ; type services; };
    alias operserv { nick OperServ; type services; };
    alias hostserv { nick HostServ; type services; };
    alias helpserv { nick HelpServ; type services; };
    alias denoraserv { nick DenoraServ; type stats; };
    alias seenserv { nick SeenServ; type stats; };
    alias statserv { nick StatServ; type stats; };
    
    
    
    // ПОДГРУЖАЕМЫЕ МОДУЛИ
    
    // главный модуль
    loadmodule "modules/commands.so";
    
    // вместо модуля cloak
    loadmodule "modules/nocloak.so";
    
    // добавляет команды /chgswhois и /setswhois
    // изменение/добавление дополнительной строчки в /whois
    loadmodule "modules/m_chgswhois.so";
    
    // добавляет команду /getinfo ник
    loadmodule "modules/m_getinfo.so";
    
    // добавляет канальный мод +S, который вырезает цвета/выделения жирным
    // и прочие теги оформления
    loadmodule "modules/m_nocodes.so";
    
    // добавляет пользовательские моды +D (игнор приватных сообщений)
    // и +d (игнор канальных сообщений)
    loadmodule "modules/m_privdeaf.so";
    
    // добавляет канальный мод +D (запрет CTCP сообщений в канал)
    loadmodule "modules/noctcp.so";
    
    // защита от HTTP POST атак
    // параметры модуля в блоке set
    loadmodule "modules/m_nopost.so";
    
    
    
    // ДОПОЛНИТЕЛЬНО ПОДКЛЮЧАЕМЫЕ КОНФИГУРАЦИОННЫЕ ФАЙЛЫ
    // если сконфирурировать ircd с поддержкой удаленных включений
    // (remote includes), то можно подключать файлы так:
    // include "http://server2.net/opers.conf";
    
    // текст, выводимый при команде /helpop
    include help.conf;
    
    
    
    // HELPOP (в helpop можно добавлять информацию без создания отдельного файла)
    // добавит команду /helpop ?test
    help test
    {
      "тестовая строка 1";
      "тестовая строка 2";
    };
    
    
    
    // ИСКЛЮЧЕНИЯ ИЗ БАНА (ИММУНИТЕТ)
    // admin@dim.st - пример маски. вместо него установи свою маску
    // например, IP-адрес *@1.2.3.4 или идент@хост: идент@хост
    
    except tkl
    {
      // на пользователя с маской admin@dim.st
      mask admin@dim.st;
    
      // не будет действовать /gline. Другие типы: gzline, qline, gqline, shun
      type gline;
    };
    
    except tkl { mask admin@dim.st type gzline; };
    except tkl { mask admin@dim.st; type qline; };
    except tkl { mask admin@dim.st; type gqline; };
    except tkl { mask admin@dim.st; type shun; };
    
    // иммунитет к /kline и /zline
    except ban { mask admin@dim.st; };
    
    // исключение IP-адреса (или блок адресов) из бана троттлингом (смотри блок set->throttle)
    except throttle { mask 188.226.150.107; };
    
    
    
    // МАСКИ, КОТОРЫЕ НЕОБХОДИМО ЗАБАНИТЬ
    // если банов много, их удобнее вынести в отдельный файл, например, в bans.conf
    // и подключить include bans.conf;
    
    // бан по нику
    ban nick
    {
      // если ник совпадает с указанной маской (например, 'chanserv2')
      mask "*serv*";
    
      // то ник взять не удастся с указанной причиной
      reason "Сервисный ник";
    };
    
    // GLINE по маске идент@хост или *@хост
    /*
    ban user
    {
      // забанить всех с хостом *.comcast.net
      mask *@*.comcast.net;
    
      // причина бана
      reason "Доступ запрещен: прокси";
    };
    */
    
    // ZLINE
    /*
    ban ip
    {
      // IP-адрес или CIDR-маска
      mask 23.19.0.0/16;
    
      // причина бана
      reason "Доступ запрещен: прокси";
    };
    */
    
    // бан сервера - запретить линковку сервера к сети
    /*
    ban server
    {
      // название сервера
      mask irc.server.net;
    
      // причина блокировки линка
      reason "Линковка запрещена";
    };
    */
    
    // бан по реальному имени
    /*
    ban realname
    {
      // если в реальном имени пользователя есть слова
      mask "*KnifeIRC*";
    
      // причина бана
      reason "Доступ запрещен: ботнет";
    };
    */
    
    // бан по версии клиента (/ctcp ник version)
    /*
    ban version
    {
      // если в версии клиента есть слова
      mask "*kill mirc script*";
    
      // причина бана/килла
      reason "Доступ запрещен";
    
      // какие действия предпринимать:
      // kill, tempshun, shun, kline, zline, gline, gzline
      action gline;
    };
    */
    
    
    
    // СПАМФИЛЬТР
    spamfilter
    {
      // регулярное выражение, на которое должен реагировать спамфильтр
       regex "*lamer\.net*";
       
      // какие типы сообщений проверять
      // channel - сообщения на каналах, private - сообщения в приватах,
      // private-notice - личные нотисы, channel-notice - канальные нотисы,
      // part - текст в сообщениях при выходе с канала (/part),
      // quit - сообщения при отключении от сервера (/quit),
      // dcc - имя файла при передаче по DCC, away - текст в away-сообщении,
      // topic - топики, user - баны
      target
      {
        private;
        channel;
        private-notice;
      };
    
      // действие, которое нужно выполнять при попадании пользователя в спамфильтр
      // block, kill, tempshun, shun, kline, gline, zline, gzline, dccblock,
      // viruschan (отправить юзера в карантин, смотри настройки в блоке set->spamfilter->virus-help-channel)
      action kill;
    
      // причина блокировки, которая будет показана пользователю
      reason "Реклама сторонних серверов наказуема.";
    
      // время бана, через которое он будет снят, если в action указаны gline, zline, gzline, shun
      // по-умолчанию одни сутки - 24h
      #ban-time 1h;
    };
    
    
    
    // ЦЕНЗУРА - ФИЛЬТР ПЛОХИХ СЛОВ (работает на канале с модом +G и у пользователя с модом +G)
    
    // указывается тип фильтра
    // channel - фильтровать каналы, message - личные сообщения,
    // quit - текст в quit-сообщении, all - все три сразу
    /*
    badword all
    {
      // регулярное выражение или слово, на которое будет регировать фильтр
      word "порн*";
    
      // на какое слово заменить фильтруемое слово
      // по-умолчанию '<censored>'
      replace <цензура>;
    
      // действия: replace - изменять слово, указанное в 'word' на слово, указанное в 'replace'
      // block - блокировать фильтруемое слово
      action replace;
    };
    */
    
    
    // ЗАПРЕТЫ
    
    // запретить передачу файла по DCC, совпадающего в названии файла с указанной маской
    deny dcc
    {
      // регулярное выражение или слово, на которое будет регировать блокировка
      filename "*porno*";
    
      // причина бана
      reason "Запрещенный файл";
    
      // yes - DCC будет блокирован до тех пор, пока пользователь не позволит передачу
      // самостоятельно посредством /DCCALLOW. по-умолчанию no
      #soft yes;
    };
    
    // запрет линковки сервера, базируясь на версии UnrealIRCd
    // и на опциях, с которыми он был скомпилирован
    /*
    deny version
    {
      // сервер
      mask irc.server.net;
    
      // номер версии (смотри офиц. документацию)
      version ;
    
      // флаги сервера (смотри офиц. документацию)
      flags ;
    };
    */
    
    
    // запрет линковки сервера
    /*
    deny link
    {
      // сервер
      mask irc.server.net;
    
      // правило, определяющее запрет (смотри офиц. документацию)
      rule ;
    
      // (смотри офиц. документацию)
      type ;
    };
    */
    
    // запретить заходить на определенные каналы
    deny channel
    {
      // какой канал блокировать
      channel "#help";
    
      // причина блокировоки
      reason "Канал #help перенесён на #support";
    
      // куда перенаправлять, если требуется
      redirect "#support";
    
      // удведомлять иркопов
      warn on;
    };
    
    
    
    // РАЗРЕШАЮЩИЕ ПРАВИЛА
    
    // разрешить вход на указанный канал (используется, если создание каналов запрещено)
    #allow channel { channel "#porno"; };
    
    // разрешить передачу файлов с указанной маской, если по-умолчанию передача файлов запрещена
    #allow dcc { filename "*.jpg"; };
    
    
    
    // ВИРТУАЛЬНЫЕ ХОСТЫ (команда /vhost логин пароль)
    /*
    vhost
    {
      // виртуальный хост
      vhost VIP.Dreamterra.Net;
    
      // маски пользователей, которым будет доступен этот вирт хост
      from
      {
        userhost *@*;
        #userhost ip@dim.st;
        #userhost *@95.85.45.90;
      };
    
      // логин
      login vip;
    
      // пароль
      //можно зашифровать (смотри документацию)
      password vip
      {
        // если пароль шифруется, здесь нужно указать тип шифрования
      };
    
      // дополнительная строчка в /whois
      swhois "VIP персона";
    };
    */
    
    
    
    // ОФИЦИАЛЬНЫЕ КАНАЛЫ, которые будут видны в /list, даже есть пусты
    official-channels
    {
      "#dreamterra" { topic "Главный канал сети"; };
      "#support" { topic "Канал помощи, жалоб, связи с админами сети"; };
    };
    
    // ------------------------------------
  2. Редактируем файлы ircd.motd и mobile.motd - информация об IRC сервере, которая выводится каждому пользователю при подключении или выполнении команды /motd:
    nano ircd.motd && nano mobile.motd
  3. Редактируем файл ircd.rules - правила использования IRC сервера, выдаваемые по запросу /rules:
    nano ircd.rules
Документация UnrealIRCd на английском: в официальной документации (не все параметры из документации подходят для этой версии Unreal'а).

Запуск UnrealIRCd

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

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

Crontab через каждый N промежуток времени запускает указанный в его списке файл. В свою очередь в файле скрипт, проверяющий, запущена на ли программа. Если нет - запускает ее.

В директории /home/dim/irc/unrealircd с установленным UnrealIRCd лежит файл unreal.cron.

  1. У файла уже есть права на выполнение и ничего в нём редактировать не надо.
  2. Вызываем редактор crontab:
    crontab -e
    вставляем правило:
    */5 * * * * /home/dim/irc/unrealircd/unreal.cron > /dev/null 2>&1
    Путь до unreal.cron указываем свой. В конце файла обязательно оставляем пустую строку. Данное правило означает, что каждые 5 минут будет выполняться файл unreal.cron.

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

Этот параметр позволяет подключать в unrealircd.conf конфигурационные файлы, расположенные на другом сервере, например,
include "http://server2.net/opers.conf";
.
Чтобы это работало, необходимо установить curl и c-ares.
  1. Переходим в директорию с исходниками UnrealIRCd (в нашем случае /home/dim/irc/unreal-src):
    cd /home/dim/irc/unreal-src
  2. Скачиваем curl:
    wget http://curl.haxx.se/download/curl-7.46.0.tar.gz
  3. Распаковываем архив:
    tar xf curl-7.46.0.tar.gz
  4. Для удобства чтения переименуем распакованную директорию:
    mv curl-7.46.0 curl
  5. Скачиваем c-ares:
    wget http://c-ares.haxx.se/download/c-ares-1.10.0.tar.gz
    или
    git clone git://github.com/bagder/c-ares.git
  6. Распаковываем архив:
    tar xf c-ares-1.10.0.tar.gz
  7. Для удобства чтения переименуем распакованную директорию:
    mv c-ares-1.10.0 c-ares
  8. Запускаем скрипт:
    ./curlinstall /home/dim/irc/unreal-src/c-ares /home/dim/irc/unreal-src/curl
    На вопрос Should libcurl be built with SSL support? отвечаем yes. После заверщения установки скрипт выведет:
    libcurl has been installed. When running ./Config specify:
    /home/dim/curl
    for the directory you installed libcurl to.
    Выделенный путь нужно указать при конфигурации UnrealIRCd
    ./Config
    в вопросе по поводу remote includes (удаленных включений).

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

Описано тут.

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

Описано тут.