Сервер iRC за 5 минут

Лирическое отсупление:

В незапамятные времена, установив программу eMule, решил забраться на канал поддержки, пообщаться с пользователями. С тех пор началось мое знакомство с iRC. Как ни странно, до сих пор такой способ коммуникации пользуется популярностью. Недавно потребовалось организовать в локальной сети небольшой чат, поэтому мой выбор пал на связку UnrealiRCd и Anope, как более привычную и удобную по функциональности.
Устанавливаем сервер UnrealIRCd 3.2.8.1 Win32 SSL:

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

В процессе установки если у кого не установлен Microsoft Visual C++ 2008 Redistributable – выдаст запрос на скачивание и установку по сети.

Далее мы увидим окошко, в котором стоят галочки по умолчанию на пунктах «Create a desktop icon» и «Create certificate». Можно установит UnrealIRCd в качестве службы Windows. Следует учесть, что если выберете «Encrypt certificate», то запустить как сервис программу не удастся.

На завершающем этапе установки можно поснимать все галочки. Создать сертификат, и насладиться чтением изменений в новом релизе успеем позднее.

Теперь приступим к установке сервисов. Я остановил свой выбор на Anope. Итак, скачиваем файл (я выбрал Anope 1.8.5 with MySQL Windows Installer), запускаем установку и после нехитрых манипуляций с кнопочкой Next сервисы установлены. Не забудьте скопировать libmysql.dll в папку с программой.

Самое сложное – это выполнить настройку связки UnrealIRCd+Anope. Вернее, это очень просто, но, как ни странно, у многих возникают какие-то проблемы с конфигурированием и линковкой сервисов к серверу.
Итак, открываем папку с установленным сервером, ищем директорию doc и копируем из нее в папку с программой следующие файлы: example.conf (конфигурационный файл сервера), help.ru.conf (этот файл содержит текст команды /helpop). теперь переименовываем скопированный конфигурационный файл в unrealircd.conf. открываем любым текстовым редактором и приступаем к правке.

Найдем две следующие строки и рас комментируем их:

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


Продвигаясь ниже по файлу ищем

include "spamfilter.conf";


Дописываем ниже:

include "aliases/anope.conf";


В блоке me указываем информацию о сети. В поле name вписываем доменное имя вашего сервера. В поле info — описание сервера (будет выдаваться по команде /whois), а в поле numeric можно оставить цифру 1 (уникальный номер сервера в сети).

me
{
name "my.irc.loc";
info "Home iRC server";
numeric 1;
};


В блоке admin указываются по желанию администратора сети контактные данные, владелец сервера etc. Данные выводятся по команде /admin «сервер».

admin {
"m00n";
"Ivan Petrov";
"admin@vseyaru.si";
"ICQ: 10000";
};


Остальные блоки нас пока не интересуют, находим блок oper. Прописываем ваш ник в качестве оператора сервера. Указываем хост, с которого разрешено становиться оператором человеку с данным ником. Символ «*» отменяет привязку к хосту, что запрещено в крупных и в нормально организованных сетях по соображениям безопасности. В поле password прописываем пароль, по которому вы будете идентифицироваться.

В блоке flags проставляем нужные нам флаги. С перечнем их можно ознакомиться на официальном сайте UnrealiRCd.

oper m00n {
class clients;
from {
userhost *;
};
password "ImSoLazyToEditThisField";
flags
{
netadmin;
can_zline;
can_restart;
can_die;
can_gzline;
can_gkline;
global; 
can_rehash;
};
swhois "Вышиваю крестиком, пою, танцую, прекрасно готовлю, в совершенстве владею арабским, финским и японским";
};


Секция swhois позволяет прописать дополнительную информацию об операторе, выводящуюся по команде /whois ник_оператора.
Чуть ниже располагается блок listen, настраиваем его.
Пользователям в приведенном ниже примере будет разрешено коннектиться на сервер через 6667, 8067 и 6697 порты, причем 6697 в данном случае порт для ssl соединения.

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

listen *:8067;
listen *:6667;


Можно дописать второй блок listen (а можно и указать все в одном, кому как удобнее) с указанием адреса и порта с которого к серверу будут присоединены сервисы. Если вам требуется ssl, нужно раскомментировать эту строку:

listen 127.0.0.1:1234
{
options
{
/* ssl; */
serversonly;
};
};


Самый важный блок, с которым почему-то возникают проблемы по настройке, это link. Указываем адрес сервисов, хостнейм, порт и пароли:

link services.irc.loc
{
username *;
hostname 127.0.0.1;
bind-ip *;
port 1234;
hub *;
password-connect " ImSoLazyToEditThisField ";
password-receive " ImSoLazyToEditThisField ";
class servers;
options {
/* Замечание: Вы не должны использовать автоподключение (autoconnect) при подключении сервисов */
/* autoconnect; */
/* ssl; */
/* zip; */
};
};


Ниже правим блок ulines. В них указаны сервер статистики и сервисы, они обладают большими полномочиями, чем обычные сервера в сети:

ulines {
services.irc.loc;
stats.irc.loc;
};


Настраиваем drpass, прописываем пароли для отключения и перезапуска сервера:

drpass {
restart " ImSoLazyToEditThisField ";
die " ImSoLazyToEditThisField ";
};


Находим секцию tld и немного правим. (В установленной директории с UnrealIRCd должны быть созданы предварительно файлы ircd.motd и ircd.rules (обычные текстовые файлы с измененным на motd и rules, соответственно, расширениями. Согласно правилам хорошего тона пишем в них сообщение дня и правила сервера):

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


Далее идет блок set, непосредственная конфигурация сети. Имя сети, сервер по умолчанию, сервер с сервисами, сервер статистики, канал помощи, префикс для хоста:

set {
network-name "m00nNet";
default-server "my.irc.loc";
services-server "services.irc.loc";
stats-server "stats.irc.loc";
help-channel "#help";
hiddenhost-prefix "mn";
/* prefix-quit "no"; */


Натыкиваем cloack-keys (они нужны для сокрытия вашего реального IP адреса в сети) и прописываем дефолтные хосты, если вы включили host-on-oper-up:

cloak-keys {
"aoAr1HnR6gl3sJ7hVz4Zb7x4YwpW";
"J2p524pwH1HSwyTSsIz2Q0Cm0B1T";
"u3XWieDmUeuB3Dk6oBG6lard8BPq";
};
/* хост on-oper */
hosts {
local "locop.m00n.net";
global "ircop.m00n.net";
coadmin "coadmin.m00n.net";
admin "admin.m00n.net";
servicesadmin "csops.m00n.net";
netadmin "netadmin.m00n.net";
host-on-oper-up "no";
};
};


Настраиваем далее специфическую конфигурацию сервера. Если сеть русскоязычная, желательно разрешить пользователям использовать русские ники опцией allowed-nickchars { russian-w1251; };

set {
kline-address "admin@vseyaru.si";
auto-join "#help";
modes-on-connect "+ixw";
modes-on-join "+nt";
modes-on-oper "+xwgs";
oper-auto-join "#opers";
allowed-nickchars { russian-w1251; };
restrict-usermodes "ixw";
restrict-channelmodes "nt";
options {
hide-ulines;
/* Если желаете, вы можете включить проверку ident */
/* identd-check; */
show-connect-info;
};


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

Приступим к настройке сервисов Anope 1.8.5:

Как и в Unreal, у Anope есть свой конфигурационный файл образец example.conf, находящийся в поддиректории «data»; переименуем его в services.conf (желательно предварительно сделать копию). Открыть файл можно обычным блокнотом. Настоятельно рекомендую перед серьезным использованием сервисов прочитать документацию и настроить конфиг соответствующим образом, мы сделаем лишь первичную настройку.

Удаляем комментарий (символ #) из строки
#IRCDModule "unreal32"


Ниже ищем строку

#RemoteServer2 127.0.0.1 6667 "mypass"


Раскомментируем, и заменяем на:

RemoteServer 127.0.0.1 1234 " ImSoLazyToEditThisField"


Находим строку ServerName и прописываем желаемый адрес сервера с сервисами:

ServerName "services.irc.loc"


Добавляем описание для сервисов:

ServerDesc "Services for m00nNet"


Устанавливаем HelpChannel:

HelpChannel "#help"


Имя сети:

NetworkName "m00nNet"


Расскомментируем строки и сгенерируем новые ключи:

UserKey1 8279441
UserKey2 5970804
UserKey3 1135462


Устанавливаем рута сервисов:

ServicesRoot "m00n"


Расскоментируем параметр GlobalOnCycle а также две строчки ниже, дабы при рестарте/линковке сервисов выдавалось сообщение для пущей политкорректности по отношению к пользователю:

GlobalOnCycleMessage "Services are restarting, they will be back shortly - please be good while we're gone"
GlobalOnCycleUP "Services are now back online - have a nice day"


В настройках NickServ (сервис, заведующий никами пользователей) расскомментируем NSDefKillQuick и заблочим #NSDefKill. Имхо, 20 секунд для идентификации пользователя вполне достаточно, 1 минута — это перебор.

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

NSGuestNickPrefix "Guest"


Полезная опция NSNickTracking. Если вы любитель менять ники и нет желания идентифицироваться каждый раз при смене ника с незарегистрированного на зарегистрированный (=влом написать скрипт в полстрочки для клиента iRC) — то это для вас.

Остальное по желанию и по потребностям, изучаем и правим конфиги, прикручиваем различные требующиеся модули etc etc etc.

Ффух, вроде все настроено, теперь можно запустить UnrealIRCd и Anope.
В случае успеха предприятия мы увидим строчку типа

.:00:39:18:. –my.irc.loc- *** Notice -- (link) Link my.irc.loc -> services.irc.loc[@127.0.0.1.50337] established
————————————————————
.:00:39:18:. *Global* Services are now back online - have a nice day
————————————————————
.:00:39:18:. –my.irc.loc- *** Notice -- Link services.irc.loc -> my.irc.loc is now synced [secs: 14 recv: 1.1009 sent: 2.460]
————————————————————


Коннектимся к серверу командой /server localhost или /server my.irc.loc. Если желаете использовать ssl, то /server my.irc.loc:+6697.

Не забудьте открыть порты для доступа юзерам к вашему серверу. Если используется роутер, как в моем случае, – необходимо выполнить проброс портов и проверить доступность порта (например, зайти с любого другого адреса в сети на сервер). Со своего компьютера законнектиться на внешний адрес в случае роутера, как мы помним, проблемно, лучше использовать другой адрес для теста соединения.

Если же все пошло наперекосяк и сервисы просто наотрез отказываются линковаться к серверу, запускаем их с командной строки с параметрами -nofork –debug и ищем загвоздку. Аналогично с сервером, если не запускается – изучаем лог (service.log). Удачного линка!


0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.