Internet Relay Chat (IRC) - это то, что существует с первых дней существования Интернета. В этом руководстве я покажу вам, как настроить IRC-сервер с InspIRCd с Atheme для дополнительных IRC-сервисов. InspIRCd - это один из немногих IRC-серверов, написанных с нуля, и один из немногих IRC-серверов, обеспечивающих настраиваемое количество функций за счет использования усовершенствованной модульной системы.
Предпосылки
	- Экземпляр сервера Ubuntu 16.04 LTS x64.
- Пользователь sudo (или root) .
- (Необязательно) DNS-имя вашего экземпляра.
InspIRCd должен работать с любым размером экземпляра. Минимальные системные требования: процессор 700 МГц и оперативная память 300 МБ.
Обновите систему
Входя в систему как пользователь sudo, вы можете обновить систему до последней стабильной версии следующим образом:
apt-get update && apt-get upgrade 
Настройка брандмауэра
Сначала давайте немного укрепим VPS. Мы включим ufwи добавим несколько правил. Начнем с настройки портов:
ufw allow 22/tcp
ufw allow 6667/tcp
ufw enable
Брандмауэр предложит диалоговое окно для принятия изменений. Просто нажмите Yдля да.
Command may disrupt existing ssh connections. Proceed with operation (y|n)?
Далее мы можем установить InspIRCd, для Ubuntu 16.04 этот пакет доступен через основной репозиторий. 
apt-get install inspircd 
После завершения установки мы можем приступить к настройке службы. Основная конфигурация находится в /etc/inspircd/inspircd.confфайле и имеет макет файла XML.
nano /etc/inspircd/inspircd.conf
Сначала найдите serverтег. В этом теге вы вводите данные своего сервера / сети, большинство этих настроек видны вашим пользователям.
	- name: Имя хоста вашего сервера. Не нужно разрешать, но должен быть правильный синтаксис (например:)- sub.example.net.
- description: Описание сервера.
- id: SID для использования на этом сервере. Это не должно быть прокомментировано, если нет конфликта SID. Это должно быть три символа в длину. Первый символ должен быть цифрой [0-9], остальные два символа могут быть буквами [AZ] или цифрами.
- network: Имя сети, указанное при подключении к клиентам. Должен быть одинаковым на всех серверах в сети и не содержать пробелов.
В нашем руководстве мы будем использовать следующее:
<server name="irc.example.net"
        description="My EXAMPLE.NET server"
        id="5AA"            
        network="ExampleNET">
Замените оригинальный тег на приведенный выше.
Далее ищем adminтег. Эти настройки являются административными данными вашего сервера. Они отображаются при вводе /ADMINкоманды.
	- name: Настоящее имя
- nickПсевдоним (желательно, какой вы используете в сети).
- email: адрес электронной почты. Не обязательно должен быть действительным, но этот адрес будет тот, который ваши пользователи должны связаться с вами в случае возникновения проблем.
Давайте использовать администратора Xenial:
<admin name="Xenial Xerius"
   nick="xenial"
   email="[email protected]">
Теперь перейдите к bind address. Этот тег используется для открытия сервиса. По умолчанию вы увидите локальный IP-адрес ( 127.0.0.1). Это означает, что сервис не может связаться с внешним миром. Давайте откроем наш сервис, не используя адреса вообще. Это приведет к привязке службы к любому интерфейсу Ethernet, которым владеет машина:
<bind address="" port="6667" type="clients">
Следующий тег будет powerтегом. Этот тег определяет два пароля.
	- diepass: Пароль для операторов, если они хотят выключить сервер.
- restartpass: Пароль для операторов, если им нужно перезапустить сервер.
Лучше всего изменить эти пароли по умолчанию:
<power diepass="die123" restartpass="restart123" pause="2">
Последние настройки, которые мы будем менять, это operнастройки. Они определяют логины оператора.
	- name: логин оператора, который используется для работы (Пример:)- /oper name password.
- password: небрежный и простой текст
- host: Какие имена хостов / IP разрешено использовать? Несколько параметров могут быть разделены пробелами, и CIDR разрешены. Вы можете просто использовать- *или- @для этого раздела.
- typeЧто это за тип операции? Блок выше должен иметь три класса уже определен:- NetAdmin,- GlobalOpи- Helper. Это- NetAdminтот, который мы будем использовать.
Измените operтег, используя следующий контент. Обратите внимание, что для нашего примера мы будем использовать " @" для хоста. В производственной среде нежелательно использовать это:
<oper name="xenial"
   password="mypassword"
   host="*@*"
   type="NetAdmin">
Перед тем , как перезапустить службу, отредактировать motdи rulesфайлы:
nano /etc/inspircd/inspircd.motd
Замените его своим собственным, например:
This is the motd of example.net. Here you can list planned outages or information your users need to know about this IRC server.
Наконец, отредактируйте файлы правил.
nano /etc/inspircd/inspircd.rules
Добавьте свои собственные правила, например: 
The first rule of Fight Club is: You do not talk about Fight Club. The second rule of Fight Club is: You DO NOT TALK ABOUT FIGHT CLUB! 
Теперь, когда все настроено, перезапустите службу IRC:
service inspircd restart
Чтобы убедиться, что все работает, запросите netstatинструмент:
netstat -tulpn | grep -i inspircd
В нем должна быть указана программа inspircd, прослушивающая порт 6666:
tcp6       0      0 :::6667                 :::*                    LISTEN      31313/inspircd
udp        0      0 0.0.0.0:39335           0.0.0.0:*                           31313/inspircd
Для тестирования сервера мы можем установить клиент IRC терминала. В Windows вы можете использовать такую программу, как mIRC. В нашем примере мы будем использовать weechat. Это текстовый IRC-клиент, который можно использовать в терминальной сессии.
Установите приложение weechat через репозитории:
apt-get install weechat 
После установки этого приложения запустите этот IRC-клиент:
weechat
Чтобы просмотреть все команды, которые может предложить weechat, вы можете запросить команду справки:
/help
Чтобы выйти из выходного дня, вы можете набрать следующую команду:
/quit    
Добавьте наш локальный сервер к соединению в выходные дни:
/server add local localhost
Теперь мы можем подключиться к профилю подключения с именем «local»:
/connect local
Вы увидите наш MOTD и правила, всплывающие в окне терминала. 
Чтобы рекламировать себя для оператора, введите следующее:
/oper xenial mypassword
Это покажет нам подтверждение успеха:
22:40:34   local  -- | User mode [+o] by irc.example.net
22:40:34   local  -- | You are now a NetAdmin
Вот и все для нашего IRC-сервера.
Установка сервисов IRC - Atheme
Atheme - это набор услуг для сетей IRC, предназначенных для больших сетей IRC с высокими требованиями к масштабируемости. Он добавляет дополнительные сервисы, такие как NickServ (регистрация никнейма) в вашу IRC-сеть.
Atheme можно найти в хранилище Ubuntu:
apt-get install atheme-services
После установки двоичных файлов извлеките пример файла конфигурации и скопируйте его в athemeпапку:
gunzip /usr/share/doc/atheme-services/examples/atheme.conf.example.gz
cp /usr/share/doc/atheme-services/examples/atheme.conf.example /etc/atheme/atheme.conf
Затем отредактируйте этот файл конфигурации:
nano /etc/atheme/atheme.conf
Сначала найдите команду loadmoduleпротокола. Это должно быть определено следующим образом:
loadmodule "modules/protocol/charybdis";
Заменить charybdisпротоколом inspircd:
loadmodule "modules/protocol/inspircd12";
Следующий поиск по сервису name:
name = "services.int";
Измените, services.intчтобы соответствовать доменному имени или IP-адресу вашего IRC-сервера:
name = "services.irc.example.net";
Как только это будет сделано, найдите числовой код:
numeric = "00A";
Теперь измените его на значение, отличное от числа, использованного в теге сервера, который использовался ранее.
numeric = "77C";
Как только это будет сделано, давайте настроим имя сети. Искать netname:
netname = "misconfigured network";
Измените это значение на параметр сети в теге сервера.
netname = "ExampleNET";
Измените значение hidehostsuffix:
hidehostsuffix = "users.misconfigured";
Удалить .misconfigured:
hidehostsuffix = "users";
Затем измените имя администратора на то, которое мы использовали ранее:
adminname = "xenial";
Сопоставьте с adminemailсоответствующим адресом электронной почты, использованным ранее:
adminemail = "[email protected]";
Теперь, когда это сделано, нам нужно создать канал связи для наших услуг. Найдите два uplinkблока кода и закомментируйте их все. Добавьте /*перед uplink{командой и */в конце закрывающей скобки.
Это будет выглядеть следующим образом:
/* this is an example for using an IPv6 address as an uplink */
/*
uplink "irc6.example.net" {
        host = "::1";
        password = "linkage";
        port = 6667;
};
*/
Затем добавьте наш собственный uplink. Этот uplink будет работать только на IP нашего localhost и на порте 7001. Укажите суперсекретный пароль (мы будем использовать его позже):
uplink "services.irc.example.net" {
    host = "127.0.0.1";
    // password
    // If you want to have same send_password and accept_password, you
    // can specify both using 'password' instead of individually.
    password = "SuperSecret123456";
    port = 7001;
 };
Наконец, найдите наши определения услуг. nickservСначала начните с блока.
В блоке nickserv найдите hostтег и измените его на ExampleNet/services/NickServ:
nickserv {
    ...<<truncated>>...
    /* (*)host
     * The hostname we want NickServ to have.
     */
    host = "ExampleNet/services/NickServ";
    /* (*)real
     * The realname (gecos) information we want NickServ to have.
     */
    real = "Nickname Services";
    ...<<truncated>>...
Измените и hostname tagдля всех других служб:
nickserv:  ExampleNet/services/NickServ
chanserv:  ExampleNet/services/ChanServ
global:    ExampleNet/services/Global
infoserv:  ExampleNet/services/InfoServ
operserv:  ExampleNet/services/OperServ
saslserv:  ExampleNet/services/SaslServ
memoserv:  ExampleNet/services/MemoServ
gameserv:  ExampleNet/services/GameServ
botserv:   ExampleNet/services/BotServ
groupserv: ExampleNet/services/GroupServ
hostserv:  ExampleNet/services/HostServ
helpserv:  ExampleNet/services/HelpServ
alis:      ExampleNet/services/ALIS
Как только это будет сделано, сохраните и выйдите из файла конфигурации.
Чтобы проверить все это, запустите atheme-servicesбинарный файл:
atheme-services
Это должно сказать вам точно, работает ли это или нет. Если вы не получаете вывод, подобный показанному ниже, вернитесь и проверьте наличие ошибок в файле конфигурации:
[19/02/2018 23:06:24] db-open-read: database '/var/lib/atheme/services.db' does not yet exist; a new one will be created.
[19/02/2018 23:06:24] pid 1929
[19/02/2018 23:06:24] running in background mode from /
Теперь включите службу, отредактировав файл служб:
nano /etc/default/atheme-services
Измените ENABLEDзначение:
DAEMON_OPTS=""
ENABLED=1
Теперь мы можем запустить сервис: 
service atheme-services restart
Проверьте его статус:
service atheme-services status
Это вернет аналогичные результаты:
● atheme-services.service - LSB: Atheme-services daemon init.d script
   Loaded: loaded (/etc/init.d/atheme-services; bad; vendor preset: enabled)
   Active: active (running) since Wed 2018-02-19 23:45:05 UTC; 8s ago
     Docs: man:systemd-sysv-generator(8)
Feb 19 23:45:05 vultr.guest atheme-services[2810]: Starting Atheme IRC Services: atheme-service
Feb 19 23:45:05 vultr.guest atheme-services[2810]: [19/02/2018 23:45:05] atheme 6.0.11 is start
Feb 19 23:45:05 vultr.guest atheme-services[2810]: [19/02/2018 23:45:05] Module operserv/sgline
Feb 19 23:45:05 vultr.guest atheme-services[2810]: [19/02/2018 23:45:05] module_load(): module
Feb 19 23:45:05 vultr.guest atheme-services[2810]: [19/02/2018 23:45:05] /etc/atheme/atheme.con
Feb 19 23:45:05 vultr.guest atheme-services[2810]: [19/02/2018 23:45:05] db-open-read: database
Feb 19 23:45:05 vultr.guest atheme-services[2810]: [19/02/2018 23:45:05] pid 2824
Feb 19 23:45:05 vultr.guest atheme-services[2810]: [19/02/2018 23:45:05] running in background
Feb 19 23:45:05 vultr.guest atheme-services[2810]: .
Feb 19 23:45:05 vultr.guest systemd[1]: Started LSB: Atheme-services daemon init.d script.
Прежде чем мы закончим, нам нужно добавить наши сервисы Atheme в InspIRCd:
nano /etc/inspircd/inspircd.conf
В конце файла добавьте эти строки:
<bind address="127.0.0.1" port="7001" type="servers">
<uline server="services.irc.example.net">
<link name="services.irc.example.net"
  ipaddr="127.0.0.1"
  port="7001"
  allowmask="127.0.0.1"
  sendpass="SuperSecret123456"
  recvpass="SuperSecret123456">
<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">    
Теперь перезапустите сервис InspIRCd:
service inspircd restart
Убедитесь, что все работает нормально:
service inspircd status
Теперь снова запустите наш клиент
weechat
Подключитесь к нашему локальному серверу:
/connect local
Вы сразу увидите одно из наших сервисов Atheme: NickServ. Он встретит вас информацией о себе. 
23:12:48   local  -- | NickServ (NickServ@ExampleNet/services/NickServ): Welcome to ExampleNet,
                 | root! Here on ExampleNet, we provide services to enable the registration of
                 | nicknames and channels! For details, type /msg NickServ help and /msg
                 | ChanServ help.
Вы можете запросить NickServ и узнать его доступные команды с помощью следующего: 
/msg NickServ help