UnrealIRCd - это самый популярный IRC сервер в русско-язычном IRC пространстве. Наибольшее признание заслужила именно эта сборка UnrealIRCd 3.2.1 (DalNetRU2.2.9.2 мод)
, благодаря которой пользователи с разными кодировками могут понимать друг друга. Так же исправлены другие баги, связанные с кириллицей. Но эта модификация давно устарела в техническом плане в сравнении с оригинальным UnrealIRCd 3.2.10.
Наиболее новая её версия называется UnrealIRCd 3.2.1 (lineircd/dreamterra мод)
, в которой есть ряд важных дополнений и модификаций.
Разработчики UnrealIRcd: Bram Syzop
Matthys и команда, автор русской модификации DalNetRU2.2.9.2: Сергей JSergey
.
Рекомендуется выбрать UnrealIRCd 3.2.1 (lineircd/dreamterra мод)
, так как в нём исправлены некоторые важные ошибки.
Установка UnrealIRCd
Работаем через SSH клиент в Linux сервере Debian 7 от обычного пользователя.- Переходим в папку, в которую будем устаналивать UnrealIRCd:
cd /home/dim/irc
- Скачиваем архив с UnrealIRCd:
wget https://raw.githubusercontent.com/dimst/IRC/master/unrealircd-3.2.1-dalnetru2.2.9.2.tar.bz2
- Распаковываем его:
tar xf unrealircd-3.2.1-dalnetru2.2.9.2.tar.bz2
- Для удобства переименовываем распакованную директорию:
mv Unreal3.2.1-DalNetRU2.2.9.2 unreal-dalnet-src
- Переходим в директорию с исходниками:
cd unreal-dalnet-src
- Запускаем конфигурацию, в которой нужно ответить на несколько вопросов:
./Config
Do you want to enable the server anti-spoof protection?
Нужна ли дополнительная защита от подмены IP адреса?
[NO]нажимаем клавишу ENTER
What directory are all the server configuration files in?
В какой директории будут храниться конфигурационные файлы?
[/home/dim/Unreal-DalNetRU]
Пишем:/home/dim/irc/unreal-dalnet
What is the path to the ircd binary including the name of the binary?
Какой путь будет до запускающего бинарного файла ircd?
[/home/dim/Unreal-DalNetRU/ircd]
Пишем:/home/dim/irc/unreal-dalnet/ircd
Would you like to compile as a hub or as a leaf?
Будет ли сервер использоваться в сети как хаб? Выберите тип соединения с серверами.
Type Hub to select hub and Leaf to select leaf.
[Hub]нажимаем клавишу ENTER
What is the hostname of the server running your IRCd?
Какой хост сервера, на котором будет запущен IRCd?
[dim.st]нажимаем клавишу ENTER
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
Do you want to support SSL (Secure Sockets Layer) connections?
Хотите ли вы разрешить использовать SSL для подключения к IRCd?
[No]пишем YES, нажимаем клавишу ENTER
If you know the path to OpenSSL on your system, enter it here. If not
Укажите путь до OpenSSL в вашей системе.
leave this blank
[]нажимаем клавишу ENTER
Do you want to enable IPv6 support?
Включить поддержку IP протокола версии 6 (IPv6)?
[No]нажимаем клавишу ENTER
make
завершается с ошибкой, если активировать IPv6 в DalNetRU2.2.9.2 мод. Проблем не наблюдается в LineIRCd/Dreamterra моде.Do you want to enable ziplinks support?
Включить поддержку сжатия трафика между серверами?
[No]нажимаем клавишу ENTER
Do you want to enable remote includes?
Хотите использовать удаленные включения? Подробнее. Если это нужно,
[No]пишем YES, нажимаем клавишу ENTER
. При положительном ответе будет задан вопрос:Specify the directory you installed libcurl to
В какой директории сервера лежит curl? Какой путь указывать, читаем Здесь.
[]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, etc.)
with the notable exceptions of irssi, KVIrc and CGI:IRC.
This feature should be enabled/disabled network-wide.
IF YOU WILL LINK SERVER TO DAL.NET.RU, THIS MUST BE DISABLED (REPLY: NO)!
[No]пишем YES, нажимаем клавишу ENTER
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
How far back do you want to keep the nickname history?
Как долго хранить историю ников (для команды /whowas)?
[2000]нажимаем клавишу ENTER
What is the maximum sendq length you wish to have?
Какой максимальный лимит отправляемых данных установить (sendq)?
[3000000]нажимаем клавишу ENTER
How many buffer pools would you like?
Сколько буферных пулов использовать?
This number will be multiplied by MAXSENDQLENGTH.
[18]нажимаем клавишу ENTER
How many file descriptors (or sockets) can the IRCd use? [1024]
Сколько файловых дескрипторов (сокетов) использовать?
нажимаем клавишу ENTER
Would you like any more parameters to configure?
Write them here:
[]
Хотите внести дополнительные параметры для конфигурации?нажимаем клавишу ENTER
- Запускаем компиляцию:
make
- Если сервер сконфигурирован с поддержкой SSL, то необходимо создать SSL-сертификаты:
make pem
- Запускаем инсталяцию:
make install
- Переходим в директорию с установленным UnrealIRCd:
cd ../unreal-dalnet
- Удаляем лишние конфигурационные файлы:
rm aliases.conf badwords.conf network.conf unrealircd.conf
- Создаём файл
ircd.log
, куда IRC сервер будет записывать системные логи:touch ircd.log
- Создаём конфигурационный файл сервера
unrealircd.conf
:nano unrealircd.conf
Настройка UnrealIRCd
- Редактируем
unrealircd.conf
под свой IRC сервер (каждый параметр конфигурации подробно описан в документации):/*------------------------------------ Готовый рабочий расширенный конфигурационный файл unrealircd.conf для UnrealIRCd 3.2.1 (DalNetRU2.2.9.2 мод) Инструкция по установке и настройке https://dim.st/irc/unrealircd-dalnetmod Документация на английском https://dim.st/irc/unrealircd-doc ------------------------------------*/ // ОБЩАЯ ИНФОРМАЦИЯ О СЕРВЕРЕ (команда /whois ник) me { // название IRC-сервера (точка обязательна) name "dreamterra.net"; // описание (любое, даже с цветом) info "Частная IRC-сеть 'дримтерра'"; // номер, numeric (0-254, на каждом сервере в сети // должен быть уникальный нумерик, иначе сервера не слинкуются) numeric 1; }; // ИНФОРМАЦИЯ ОБ АДМИНИСТРАЦИИ СЕРВЕРА (команда /admin) admin { "Главный администратор - Дмитрий 'DiM' (admin@dim.st)"; # "вторая строчка"; # "третья строчка"; }; // КЛАССЫ ПОДКЛЮЧАЮЩИХСЯ КЛИЕНТОВ // стандартный класс для большинства пользователей class clients { // частота пинга (90-180) pingfreq 90; // максимальное число подключений для этого класса // (51 пользователь не сможет подключиться) // своеобразная защита от флуда - когда ботов много, это их сдерживает maxclients 50; // количество данных, которое можно передавать подряд sendq 100000; // количество данных, которое можно получить одновременно (3000-8000) // своеобразная защита от флуда - активно флудящих ботов будет // выкидывать из IRC с причиной Excess flood recvq 3000; }; // особый класс для иркопов, в котором нет // жестких ограничений, как для обычных пользователей class opers { pingfreq 90; maxclients 10; sendq 500000; recvq 10000; }; // класс для мобильных пользователей с увеличенным тайм-аутом пинга class clients_mobile { pingfreq 300; maxclients 50; sendq 100000; recvq 5000; }; // класс для серверов class servers { pingfreq 90; maxclients 10; sendq 1000000; connfreq 60; }; // ПРАВИЛА ПОДКЛЮЧЕНИЯ К СЕРВЕРУ // правила подключения для обычных пользователей allow { // маска (идент, IP), с которой разрешено подключаться к IRC // *@* - нет ограничений ip *@*; // аналогично. если хоста нет, нужно указывать *@NOBODY hostname *@*; // для какого класса пользователей данное правило class clients; // сколько одинаковых 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 /* allow { ip *@127.0.0.1; hostname *@localhost; class clients; }; */ // правила подключений для иркопов. в данном случае пользователь // с маской *root@dreamterra.net будет подключаться как привелегированный класс opers allow { ip *root@1.2.3.4; hostname *root@dreamterra.net; class opers; }; // правила подключений для мобильных пользователей allow { ip *@*; hostname *@*; options { mobile; }; class clients_mobile; maxperip 3; }; // ПОРТЫ, КОТОРЫЕ ДОЛЖЕН СЛУШАТЬ IRC-СЕРВЕР // слушать порт 6667 на всех 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; }; }; // ИРКОПЫ - АДМИНЫ СЕРВЕРА (/oper логин пароль) // логин иркопа oper ЛОГИН { // маски, с которых будет возможно авторизоваться под этой оперкой // (по-умолчанию с любой, для большей безопасности можно вписать свой // IP-адрес, если статический, или блок адресов и дополнительно // указать идент) from { userhost *@*; #userhost *@1.2.3.4; #userhost root@1.2.3.*; }; // пароль иркопа. можно зашифровать (подробнее в англ. документации) password "ПАРОЛЬ" { // если пароль шифруется, здесь нужно указать тип шифрования }; // класс class opers; // уровень // 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 "#help"; // моды, устанавливаемые юзерам при подключении к серверу 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 services.dreamterra.net; // название сервера статистики (Denora Stats или NeoStats) stats-server stats.dreamterra.net; // сервер, который сообщается пользователям, если текущий сервер полон default-server dreamterra.net; // добавляемый текст в /quit сообщении prefix-quit "отключился"; // постояное неизменяемое quit-сообщение #static-quit "отключился"; // постоянное неизменяемое 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 "#help,#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; }; }; #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 services.dreamterra.net { // идент линкуемого сервера username *; // адрес (хост) линкуемого сервера // если с поддержкой IPv6: hostname ::ffff:1.2.3.4; hostname 1.2.3.4; // IP-адрес - можно указать, если на линкуемом сервере // несколько IP-адресов bind-ip *; // порт для линка port 5555; // право линковать еще сервера к этому линкуемому серверу // если указать leaf - линкуемый сервер не сможет линковать к себе hub *; // если указан "leaf" вместо "hub", можно задать правила возможности линковки // для этого линкуемого сервера // 1 - сервер не может иметь линков под собой // 2 - значит, сервер может иметь линки, но его линкуемые сервера больше не могут // 0 - ограничений нет (значение по-умолчанию) #leafdepth 1; // пароль для линковки // можно зашифровать (подробнее в англ. документации) password-connect "1234"; // пароль для линковки password-receive "1234"; // класс линкуемого сервера class servers; // уровень сжатия // будет работать, если сервер сконфигурирован c поддержкой zlib (ziplinks) и в 'options' активен 'zip' #compression-level 9; // шифры SSL #ciphers ; options { // использовать SSL #ssl; // автоматически подключаться к главном серверу // для сервисов не требуется, для обычных серверов - да (на одном из слинкованных серверах) #autoconnect; // сжатие трафика между серверами, будет работать, если сервер сконфигурирован c поддержкой zlib (ziplinks) #zip; // не кэшировать IP-адрес исходящего соединения. разумно использовать, если IP-адрес динамический #nodnscache; // не проверять удалённый хост #nohostcheck; // иркопы с этого сервера будут ограничены правами локальных операторов #quarantine; }; }; // ПРИВЕЛЕГИРОВАННЫЕ СЕРВЕРА - СЕРВИСЫ ulines { services.dreamterra.net; stats.dreamterra.net; }; // СИСТЕМНОЕ ЛОГИРОВАНИЕ В ФАЙЛ 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"; // ДОПОЛНИТЕЛЬНО ПОДКЛЮЧАЕМЫЕ КОНФИГУРАЦИОННЫЕ ФАЙЛЫ // если сконфирурировать ircd с поддержкой удаленных включений // (remote includes), то можно подключать файлы так: // include "http://server2.net/opers.conf"; // текст, выводимый при команде /helpop include help.conf; // HELPOP (в helpop можно добавлять информацию без создания отдельного файла) // добавит команду /helpop ?test help test { "тестовая строка 1"; "тестовая строка 2"; }; // ИСКЛЮЧЕНИЯ ИЗ БАНА (ИММУНИТЕТ) // ip@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 admin@dim.st; #userhost *@95.85.45.90; }; // логин login vip; // пароль //можно зашифровать (подробнее в англ. документации) password vip { // если пароль шифруется, здесь нужно указать тип шифрования }; // дополнительная строчка в /whois swhois "VIP персона"; }; */ // ОФИЦИАЛЬНЫЕ КАНАЛЫ, которые будут видны в /list, даже есть пусты official-channels { "#help" { topic "Канал помощи"; }; }; // ------------------------------------
- Редактируем файлы
ircd.motd
иmobile.motd
- информация об IRC сервере, которая выводится каждому пользователю при подключении или выполнении команды/motd
.nano ircd.motd && nano mobile.motd
- Редактируем файл
ircd.rules
- правила использования IRC сервера, выдаваемые по запросу/rules
.nano ircd.rules
Запуск UnrealIRCd
./unreal startПри удачном запуске видим:
* Loading IRCd configuration ..Если допущены ошибки, сервер укажет её.
* Configuration loaded without any problems ..
* Initializing SSL.
* Dynamic configuration initialized .. booting IRCd.
Настройка автозапуска (crontab) UnrealIRCd
Crontab через каждый N промежуток времени запускает указанный в его списке файл. В свою очередь в файле скрипт, проверяющий, запущена на ли программа. Если нет - запускает ее.- Переходим в папку с установленным UnrealIRCd:
cd /home/dim/irc/unreal-dalnet
- Для удобства переименуем файл "ircdchk":
mv ircdchk unreal.cron
- Вызываем редактор crontab:
crontab -e
вставляем правило:*/5 * * * * /home/dim/irc/unreal-dalnet/unreal.cron > /dev/null 2>&1
Путь доunreal.cron
указываем свой. В конце файла обязательно оставляем пустую строку. Данное правило означает, что каждые 5 минут будет выполняться файлunreal.cron
.
Удаленные включения (remote includes)
Описано тут.Линковка двух IRC серверов
Дано - 2 IRC сервера на базе UnrealIRCd:- Главный сервер (Hub): название
dreamterra.net
, ip:95.85.45.90
- Линкуемый сервер (Leaf): название
irc.dim.st
, ip:188.226.150.107
- В
unrealircd.conf
каждого IRC сервера добавим новый link блок.
для dreamterra.net:link irc.dim.st { username *; hostname 188.226.150.107; bind-ip *; port 5555; hub *; password-connect "linkpass"; password-receive "linkpass"; class servers; };
для irc.dim.st:link dreamterra.net { username *; hostname 95.85.45.90; bind-ip *; port 5555; hub *; password-connect "linkpass"; password-receive "linkpass"; class servers; options { autoconnect; }; };
5555 - это порт, через который будут соеденены два IRC сервера. На обоих серверах он должен быть открыт и доступен для подключения.
linkpass
- это пароли для линка, которые так же долдны совпадать у линкуемых серверов. - Откроем в
unrealircd.conf
порт 5555 для линка блоке listen.
в обоих серверах:listen *:5555 { options { serversonly; }; };
- Проверим/создадим ulines блок в
unrealircd.conf
- список сервисов сети.
В обоих серверах он должен быть идентичен:ulines { services.dreamterra.net; stats.dreamterra.net; };
- Проверим параметры
services-server
иstats-server
вunrealircd.conf
в блокеset
- названия серверов статистики (Denora Stats, NeoStats) и управления (Anope).
В обоих серверах они должны быть идентичены:set { ............... services-server services.dreamterra.net; stats-server stats.dreamterra.net; ............... }
- В
unrealircd.conf
в блокеme
сравним номера серверовnumeric
- они НЕ должны совпадать. Если совпадают, на одном из серверов измени номер и перезапусти (/restart пароль) сервер. Рехеша (/rehash) недостаточно. - на обоих серверах делаем перезагрузку
unrealircd.conf
/rehash
. После этого сервера должны автоматически слинковаться. Если этого не произошло, смотрим ошибки, которые сервер укажет в IRC. - Переходим в директорию с исходниками UnrealIRCd:
cd /home/dim/irc/unreal-dalnet-src
- Скачиваем нужный модуль. Список всех сайтов, на которых можно найти дополнительные модули, смотрим на форуме UnrealIRCd.
Например, установим модульAntiRandom
с vulnscan.org. Так как все модули на этом сайте упаковы вtar.gz
архивы, то установка чуть сложнее. Но смысл один - файлantirandom.c
должен оказаться в директорииunreal-dalnet-src/src/modules
.wget --no-check-certificate https://www.vulnscan.org/UnrealIRCd/modules/AntiRandom-latest.tar.gz -P src/modules tar xfz AntiRandom-latest.tar.gz cp AntiRandom*/antirandom.32.c antirandom.c
С сайтом modules.unrealircd.org всё ещё сложнее. С помощью wget не скачать модуль. Придется вручную скачивать на свой компьютер, а с него вручную закидывать модуль в директорию с исходниками модулей. - Запускаем компиляцию модуля:
make custommodule MODULEFILE=antirandom
- Копируем скомпилированный
antirandom.so
в директорию установленных модулей/home/dim/unreal-dalnet/modules/
:cp src/modules/antirandom.so ../unreal-dalnet/modules/antirandom.so
- В
unrealircd.conf
подключим новый модуль, добавив строкуloadmodule "modules/antirandom.so";
:echo -e "\nloadmodule \"modules/antirandom.so\";\n" >> ../unreal-dalnet/unrealircd.conf
unrealircd.conf
всё равно придется открыть, так как почти каждый модуль имеет блок настроек, которые необходимо внести в конфигурационный файл сервера. Например, у модуляAntiRandom
есть параметры, указанные вantirandom.conf
. Смотримunreal-dalnet-src/src/modules/AntiRandom-*
.- В IRC перезагружаем
unrealircd.conf
и новый модуль должен подключиться:/rehash
Если этого не произошло, смотрим ошибки, которые сервер укажет в IRC.
Представьтесь и комментируйте: