Настройка IRC-сервера в Ubuntu 14.04 с помощью InspIRCd 2.0 и Shaltúre

Этот мануал поможет вам установить и настроить IRC-сервер InspIRCd 2.0 в Ubuntu 14.04. Имея свой собственный сервер, вы сможете управлять пользователями, изменять их ники, свойства каналов и многое другое.

В конце этого мануала вы получите полностью функционирующий IRC-сервер, с помощью которого можно подключиться к большинству клиентов IRC.

Требования

1: Установка InspIRCd

Чтобы установить InspIRCd, нужно создать для него новый пакет. К сожалению, пакет InspIRCd, который находится в репозиториях Ubuntu 14.04, устарел. Но вы можете использовать сценарий, который создает установочный .deb-файл из исходного архива. Этот сценарий открытый, поэтому его можно отредактировать согласно вашим требованиям.

Установите зависимости сценария:

sudo apt-get install rake git gnutls-bin libgnutls-dev

Клонируйте репозиторий Git, чтобы создать новый пакет:

git clone https://github.com/SaberUK/inspircd-packages.git

Перейдите в клонированный каталог:

cd ./inspircd-packages

Сценарий должен использовать стабильную версию InspIRCd (2.0). Также здесь нужно указать, нужна ли поддержка SSL. Экспортируйте две переменные среды в сценарий:

export INSPIRCD_REVISION=insp20
export INSPIRCD_MODULES="regex_posix ssl_gnutls"

Удалите патч, который может вызвать ошибки в версии 2.0.

rm ./extras/fix-data-and-log-paths.patch

Теперь сгенерируйте .deb-файл:

rake deb

Это займёт некоторое время. После этого запустите следующую команду, чтобы увидеть имя созданного файла:

ls *.deb

Затем установите файл .deb с помощью следующей команды (используйте имя файла, которое вы только что узнали):

sudo dpkg -i ./inspircd_2.0.20_amd64.deb

Теперь удалите исходные файлы InspIRCd, чтобы посторонние пользователи не смогли перекомпилировать файл с вредоносным кодом.

cd ~
rm -rf ./inspircd-packages

2: Настройка InspIRCd

InspIRCd нуждается в настройке. При этом также нужно определить некоторые параметры, которые жизненно важны для функционирования сервера. Помните, что некоторые параметры являются уникальными (например, имя сети).

Создайте конфигурационный файл inspircd.conf:

sudo nano /etc/inspircd/inspircd.conf

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

# This is just a more or less working example configuration file, please
# customize it for your needs!
<server name="irc.example.com"
description="Example IRC Server"
network="ExampleNet"
id="00A">
<admin name="My Admin"
nick="admin"
email="admin@example.com">
<bind address="" port="6667" type="clients">
<power diepass="SecretPassword" restartpass="OtherSecretPassword" pause="2">
<connect allow="*"
timeout="60"
flood="20"
threshold="1"
pingfreq="120"
sendq="262144"
recvq="8192"
localmax="3"
globalmax="3">
<class name="Shutdown"
commands="DIE RESTART REHASH LOADMODULE UNLOADMODULE RELOAD">
<class name="ServerLink"
commands="CONNECT SQUIT RCONNECT MKPASSWD MKSHA256">
<class name="BanControl"
commands="KILL GLINE KLINE ZLINE QLINE ELINE">
<class name="OperChat"
commands="WALLOPS GLOBOPS SETIDLE SPYLIST SPYNAMES">
<class name="HostCloak"
commands="SETHOST SETIDENT SETNAME CHGHOST CHGIDENT">
<type name="NetAdmin"
classes="OperChat BanControl HostCloak Shutdown ServerLink"
host="netadmin.omega.org.za">
<type name="GlobalOp"
classes="OperChat BanControl HostCloak ServerLink"
host="ircop.omega.org.za">
<type name="Helper"
classes="HostCloak"
host="helper.omega.org.za">
<oper name="admin"
password="secretpass"
host="*@localhost"
type="NetAdmin">
<files motd="/etc/inspircd/inspircd.motd"
rules="/etc/inspircd/inspircd.rules">
<channels users="20"
opers="60">
<dns server="208.67.222.222" timeout="5">
<dns server="208.67.220.220" timeout="5">
<options prefixquit="Quit: "
noservices="no"
qaprefixes="no"
deprotectself="no"
deprotectothers="no"
flatlinks="no"
hideulines="no"
syntaxhints="no"
cyclehosts="yes"
ircumsgprefix="no"
announcets="yes"
disablehmac="no"
hostintopic="yes"
quietbursts="yes"
pingwarning="15"
allowhalfop="yes"
exemptchanops="">
<security hidewhois=""
userstats="Pu"
customversion=""
hidesplits="no"
hidebans="no"
operspywhois="no"
hidemodes="eI"
maxtargets="20">
<performance nouserdns="no"
maxwho="128"
softlimit="1024"
somaxconn="128"
netbuffersize="10240">
<log method="file"
type="* -USERINPUT -USEROUTPUT"
level="default"
target="/var/log/inspircd.log">
<whowas groupsize="10"
maxgroups="100000"
maxkeep="3d">
<timesync enable="no" master="no">
<badnick nick="NickServ" reason="Reserved For Services">
<badnick nick="ChanServ" reason="Reserved For Services">
<badnick nick="Global" reason="Reserved For S
ervices">
<badnick nick="InfoServ" reason="Reserved For Services">
<badnick nick="OperServ" reason="Reserved For Services">
<badnick nick="SaslServ" reason="Reserved For Services">
<badnick nick="StatServ" reason="Reserved For Services">
<badnick nick="ALIS" reason="Reserved For Services">

Теперь нужно изменить несколько значений и указать уникальные данные о вашем сервере. В верхней части файла найдите раздел server. Укажите в нем имя хоста, описание и имя сети. id нужно указать два числа и букву. Например:

<server name="irc.yourdomain.com"
description="Example description for the IRC server"
network="ExampleNet"
id="46T">

Теперь найдите блок admin. Укажите в нем информацию для оператора сети IRC. Этот пользователь будет иметь в сети наивысшие привилегии.

<admin name="My Admin"
nick="admin"
email="admin@example.com">

Также вы должны иметь возможность перезагрузить или выключить сервер. Это настраивается в блоке power. Здесь нужно изменить пароли. Значение diepass – это пароль, который будут использовать администраторы сети для выключения сервера, а значение restartpass — это пароль, который они будут использовать для его перезапуска. Значение pause определяет, как долго сервер будет блокировать операцию (в секундах), если введен неправильный пароль. Оставьте в pause значение по умолчанию.

<power diepass="SecretPassword" restartpass="OtherSecretPassword" pause="2">

Найдите блок oper. Здесь нужно определить учетную запись оператора и пароль. Администратор, которого вы определили ранее, и оператор может быть одним и тем же пользователем. Если у вас есть статический IP-адрес или доверенное имя домена, измените хост, чтобы включить его. По возможности не устанавливайте здесь значение *@*, так как это позволяет оператору подключаться из любого места.

<oper name="admin"
password="secretPassword"
host="*@localhost *@your.local.ip.here *@your.local.domain.here"
type="NetAdmin">

В значении host несколько IP-адресов или доменов нужно отделить пробелами. Также можно добавить IP и домены текущего сервера. Сохраните и закройте файл.

3: Настройка сообщений

В сети IRC есть сообщение дня, оно отображается при каждом подключении пользователя к сети. Чтобы создать пользовательское сообщение дня, создайте файл inspircd.motd в каталоге /etc/inspircd/:

sudo nano /etc/inspircd/inspircd.motd

Добавьте в файл сообщение дня, которое вы хотите показывать пользователям. Как правило, здесь принято вежливо напомнить правила и сообщить об изменениях.

<^>This is ExampleNet. We are the world's newest IRC network.
Support us by joining and becoming regular!
Be sure to view the rules by typing "/rules" and hitting ENTER.<^>

Теперь отредактируйте файл rules:

sudo nano /etc/inspircd/inspircd.rules

В этом файле укажите все правила. Они будут отображаться пользователям при запуске команды /rules. Например:

1. No children under 13 are allowed to be on this network without the knowledge and consent of their parent or legal guardian.
2. No discussion or links involving pirated software is allowed on the network.
3. No discussion of drugs or other narcotics.
4. No trading of weapons.
5. No porn. There are minors on this network.

4: Запуск IRC-сервера

Прежде чем запустить IRC-сервер, нужно настроить привилегии и права на собственность файлов:

sudo find /etc/inspircd -type d -exec chmod 770 {} \;
sudo find /etc/inspircd -type f -exec chmod 644 {} \;
sudo chown -R irc:irc /etc/inspircd

Теперь нужно установить правильные привилегии на файл PID и каталог с логами:

sudo chown -R irc:irc /var/inspircd/
sudo chown -R irc:irc /var/log/inspircd

Теперь можно запустить InspIRCd:

sudo service inspircd start

Если InspIRCd запустился успешно, в конце вывода будет:

InspIRCd is now running as 'irc.example.com'[46T] with 1024 max open sockets

5: Тестирование базовых функций

Поскольку теперь базовая функциональность должна быть доступна, попробуйте подключиться к своей новой сети IRC. Для этого можно установить простой клиент командной строки IRC. Сначала установите IRSSI.

sudo apt-get install irssi

Запустите клиент IRC:

irssi

Вы должны иметь возможность ввести данные в окно, в котором указано [(status)]. Обратите внимание, что все команды IRC начинаются с косой черты. Чтобы подключиться к вашей сети IRC, введите:

/connect irc.example.com

Если вы не настроили имя хоста для своего сервера, вы можете использовать его IP-адрес.

Теперь войдите как оператор:

/oper habbasi secretPassword

Если все работает правильно, вы увидите сообщение «You are now a NetAdmin». Это значит, что вам удалось подключиться к сети как оператору. Чтобы выйти, введите:

/quit

Рекомендуемые IRC-клиенты

Существует огромное количество клиентов IRC, доступных практически для любого устройства. Вот небольшой список рекомендуемых клиентов:

  • HexChat для Windows, Mac OS X, Linux
  • mIRC для Windows
  • Colloquy для Mac OS X и iOS
  • IRSSI для Linux и Mac OS X
  • AndChat для Android
  • Kiwi IRC (клиент веб-браузера)

Обратите внимание: в Kiwi IRC у вас возникнут проблемы с использованием привилегий оператора. Kiwi подключается через прокси-сервер и не поддерживает ваш IP-адрес. Если вы решите составить список IP-адресов, с помощью которых можно выполнять действия оператора (что рекомендуется для обеспечения безопасности), привилегии оператора не будут работать в Kiwi IRC.

6: Настройка SSL (опционально)

Цель этого раздела – защитить конфиденциальность пользователей, пароли и другие элементы, которые будут видны всем, кто следит за передаваемыми данными. Это, конечно, необязательно, но сделать это настоятельно рекомендуется.

Прежде всего, нужно скопировать SSL-сертификаты в правильный каталог. Для этого нужно создать каталог в каталоге конфигурации сервера IRC.

sudo mkdir /etc/inspircd/sslcerts

Теперь скопируйте соответствующий SSL-сертификат и ключ в новый каталог:

sudo cp /path/to/ssl/private.key /etc/inspircd/sslcerts/private.key
sudo cp /path/to/ssl/certificate.crt /etc/inspircd/sslcerts/cert.pem
sudo cp /path/to/ca/validation.crt /etc/inspircd/sslcerts/ca.pem

Если вы используете самоподписанный сертификат, вы можете пропустить последнюю команду, которая копирует ca.pem.

Установите права на каталог inspircd, чтобы защитить сертификаты и дать InspIRCd доступ на чтение.

sudo find /etc/inspircd -type d -exec chmod 770 {} \;
sudo find /etc/inspircd -type f -exec chmod 644 {} \;
sudo chown -R irc:irc /etc/inspircd

Отредактируйте конфигурационный файл, чтобы включить поддержку SSL:

sudo nano /etc/inspircd/inspircd.conf

Найдите строку:

<bind address="" port="6667" type="clients">

После нее добавьте следующие строки:

<bind address="" port="6697" type="clients" ssl="gnutls">
<gnutls cafile="/etc/inspircd/sslcerts/ca.pem"
certfile="/etc/inspircd/sslcerts/cert.pem"
keyfile="/etc/inspircd/sslcerts/private.key"
priority="SECURE192:-VERS-SSL3.0">
<module name="m_ssl_gnutls.so">

Если вы используете самоподписанный сертификат, можете пропустить директиву cafile.

Перезапустите сервер, чтобы обновить параметры:

sudo service inspircd restart

Теперь SSL работает по порту 6697.

7: Тестирование SSL (опционально)

Чтобы протестировать SSL, запустите IRSSI.

irssi

Чтобы подключиться по SSL, введите:

/connect -SSL -SSL_Verify irc.example.com 6697

Если вы используете самоподписанный сертификат, пропустите параметр -SSL_Verify.

Чтобы выйти, введите /quit.

8: Установка сервисов Shaltúre

Теперь IRC-сервер работает, и вы можете подключиться к нему. Но пока что вы не можете регистрировать ники. Вы не можете управлять правами на канал и ролями. Вы не можете отправлять или получать заметки. Для всего этого существуют сервисы. Самой популярной платформой сервисов является Atheme, но она больше не разрабатывается и не будет обновляться (за исключением, возможно, исправления серьезных уязвимостей безопасности). По этой причине лучше установить активно разрабатываемый форк Atheme под названием Shaltúre.

Установите зависимости:

sudo apt-get install gettext

Shaltúre лучше не запускать как root, это может повлечь серьезные последствия для безопасности. По этой причине рекомендуется создать для Shaltúre пользователя без пароля. Вы не можете войти в эту учетную запись, получить доступ к ней можно только с помощью sudo.

sudo adduser --disabled-password shalture

Команда выдаст несколько запросов, но вы можете просто нажать enter и пропустить их. Теперь переключитесь на нового пользователя:

sudo -i -u shalture

Перейдите в домашний каталог и клонируйте репозиторий shalture:

git clone git://github.com/shalture/shalture.git shalture-devel

Перейдите в каталог shalture-devel и клонируйте дополнительные репозитории:

cd ./shalture-devel
git submodule init
git submodule update

Запустите конфигурацию, которая подготовит среду к компиляции, а затем скомпилируйте и установите пакет:

./configure --enable-contrib
make
make install

Это займет некоторое время. После завершения компиляции удалите исходные файлы:

cd ~
rm -rf ./shalture-devel/

9: Настройка сервисов Shaltúre

По завершении установки перейдите в каталог конфигурации Shaltúre. Начните с образца конфигурационного файла.

cd ~/shalture/etc
cp shalture.conf.example shalture.conf
nano shalture.conf

Найдите в файле эту строку:

#loadmodule "modules/protocol/charybdis";

Раскомментируйте строку, удалив символ # в начале строки, и замените charybdis на inspircd:

loadmodule "modules/protocol/inspircd";

Найдите строку:

name = "services.int";

Вместо int укажите домен или IP-адрес сервера IRC.

name = "services.your_domain_name_or_IP";

Найдите строку:

numeric = "00A";

Измените значение строки numeric, тчобы оно не совпадало с id, которое вы установили ранее. Но это значение тоже должно состоять из двух цифр и буквы:

numeric = "07C";

Найдите строку:

netname = "misconfigured network";

В строке netname укажите имя сети, которое вы указали в блоке server в конфигурации InspIRCd.

netname = "ExampleNet";

Теперь найдите:

hidehostsuffix = "users.misconfigured";

Удалите все, что находится в кавычках после users:

hidehostsuffix = "users";

Найдите строку:

adminname = "misconfigured admin";

Замените значение в кавычках своим именем.

Теперь найдите строку:

adminemail = "admin@example.com";

Вместо adminemail укажите свою почту.

Найдите строку:

registeremail = "noreply@admin.tld";

Измените значение registeremail на noreply@your_domain_name. Это адрес электронной почты, который будет отображаться в приветственном письме пользователям при первой регистрации в вашей сети. Также этот адрес будет отправлять инструкции по сбросу пароля и по активации. Здесь можно указать несуществующий адрес электронной почты, чтобы не переполнять ваш реальный почтовый ящик (поскольку на эти письма не нужно отвечать).

Найдите первый блок кода uplink и закомментируйте весь блок, добавив /* перед и */ после него. Он должен выглядеть так:

/* uplink "irc.example.net" {
// The server name of the ircd you're linking to goes above.
// host
// The hostname to connect to.
host = "127.0.0.1";
// vhost
// The source IP to connect from, used on machines with multiple interfaces.
#vhost = "192.0.2.5";
// send_password
// The password sent for linking.
send_password = "mypassword";
// receive_password
// The password received for linking.
receive_password = "theirpassword";
// port
// The port to connect to.
port = 6667;
}; */

В следующем разделе найдите:

uplink "irc6.example.net" {
host = "::1";
// password
// If you want to have same send_password and accept_password, you
// can specify both using 'password' instead of individually.
password = "linkage";
port = 6667;
};

Вместо irc6.example.net укажите services.your_domain_name (в требованиях уже говорилось, что необходимо настроить запись A для services.yourdomainname). Выберите надежный пароль. Измените порт на 7001. Теперь раздел должен выглядеть примерно так:

uplink "services.your_domain_name" {
host = "::1";
// password
// If you want to have same send_password and accept_password, you
// can specify both using 'password' instead of individually.
password = "SuperSecret123";
port = 7001;
};

Найдите раздел nickserv:

nickserv {
...
host = "services.int";
...
};

Укажите здесь хост NickServ:

host = "ExampleNet/services/NickServ"

Выполните аналогичные изменения для следующих сервисов. В файле конфигурации будет блок для каждого из них:

  • ChanServ
  • Global
  • InfoServ
  • OperServ
  • SaslServ
  • MemoServ
  • GroupServ
  • StatServ
  • ALIS

Это сервисы по умолчанию Shaltúre. Затем найдите эту строку:

operator "jilles" {

Укажите здесь ник, который вы выбрали в блоке oper в конфигурационном файле InspIRCd:

operator "admin" {

Скопируйте конфигурационный файл cron:

cp /home/shalture/shalture/etc/shalture.cron.example /home/shalture/shalture/etc/shalture.cron

Сервисы настроены. Теперь вернитесь в сессию пользователя sudo.

exit

10: Настройка взаимодействия InspIRCd и Shaltúre

Затем нужно настроить InspIRCd для поддержки Shaltúre. Отредактируйте конфигурационный файл InspIRCd еще раз:

sudo nano /etc/inspircd/inspircd.conf

Добавьте в конец файла строки:

<bind address="::1" port="7001" type="servers">
<uline server="services.example.com">
<link name="services.example.com"
ipaddr="::1"
port="7001"
allowmask="::1"
sendpass="password"
recvpass="password">
<chanprotect noservices="no"
qprefix="~"
aprefix="&">
# Modules needed for services to function
<module name="m_chanprotect.so">
<module name="m_halfop.so">
<module name="m_services_account.so">
<module name="m_deaf.so">
<module name="m_spanningtree.so">
<module name="m_globops.so">
<module name="m_cban.so">
<module name="m_svshold.so">
<module name="m_hidechans.so">
<module name="m_servprotect.so">
<module name="m_chghost.so">
<module name="m_namesx.so">
<module name="m_uhnames.so">

Измените значения, выделенные красным: укажите ваше доменное имя, пароли sendpass и recvpass, которые вы выбрали в разделе uplink конфигурации Shaltúre.

Сохраните файл и закройте редактор.

Все, что нужно сделать теперь, это перезагрузить сервер и сервисы.

sudo service inspircd restart
sudo -i -u shalture /home/shalture/shalture/bin/shalture-services

В конце вывода будет такое сообщение:

[2015-07-24 22:21:10] running in background mode from /home/shalture/shalture

Это значит, что Shaltúre успешно запущен.

11: Автозагрузка InspIRCd и Shaltúre

Shaltúre не установлен как сервис, а это значит, что при перезагрузке он не запустится автоматически. Это нужно исправить:

sudo -i -u shalture crontab -e

Если система предложит вам выбрать текстовый редактор, нажмите 2, чтобы выбрать nano.

В конец файла добавьте строку:

*/5 * * * * /home/shalture/shalture/etc/shalture.cron >/dev/null 2>&1

Эта задача будет каждые пять минут проверять, работают ли сервисы. Если сервисы прекратили работу, она запустит их. InspIRCd также нужно добавить в этот список:

sudo update-rc.d inspircd defaults

Заключение

InspIRCd позволяет настроить IRC-сеть, которой вы можете управлять самостоятельно. Shaltúre добавляет функции для управления никами, каналами, заметками и т. п.

Больше информации о IRC-сервере можно найти в вики InspIRCd.

Tags: , , , , ,