Как запустить чат-сервер UnrealIRCd в Debian 7

Вступление

В этой статье мы узнаем, как создать, установить и настроить сервер IRC с помощью демона Unreal IRC (IRCd): службы, позволяющей пользователям подключаться через IRC (Internet Relay Chat). IRC - это протокол, который позволяет пользователям общаться в режиме реального времени с помощью сообщений, отправляемых по сети.

В частности, для этого урока мы будем использовать * Debian 7 x64 * Droplet.

Шаг первый - Создание пользователя ircd

Предположим, что вы только что запустили новую версию Debian 7 x64 Droplet и вы вошли в систему как пользователь root. Если вы в настоящее время не являетесь пользователем root, переключитесь на root с помощью:

su

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

adduser ircd

Создайте новый пароль для пользователя в командной строке. Я рекомендую пароль, созданный с помощью XKCD метода создания паролей, то есть объедините 3-5 довольно распространенных словарных слов в запоминающееся сочетание, длина которого добавит достаточно энтропии (силы) для пароль, чтобы его было трудно угадать, но человеку легко запомнить.

Если вам не предлагается создать пароль, просто введите:

passwd ircd

Вам будет предложено создать пароль.

Предоставление пользовательских привилегий

Теперь нам нужно убедиться, что на сервере установлена ​​sudo, популярная утилита для систем на основе UNIX (таких как Linux). Для тех, кто незнаком, команда sudo позволяет пользователям выполнять команды с привилегиями root (su или superuser), отсюда и название - s uper u ser * do * - которое нам понадобится при настройке обязательные библиотеки.

В Debian 7 sudo установлен по умолчанию. Если вам нужно установить его, введите:

apt-get install sudo

Теперь, когда мы знаем, что sudo установлен, вам нужно добавить пользователя * ircd *, который мы создали ранее, в группу sudo, чтобы предоставить ему доступ к команде sudo.

Для этого выполните эту команду:

adduser ircd sudo

Вот и все для создания пользователя! Теперь мы можем просто переключиться на нового пользователя:

su ircd

Перейдите в домашний каталог пользователя * ircd *.

cd ~

Шаг второй - установка предварительных условий

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

Этими пакетами являются * make *, * gcc *, * build-essential *, * openssl *, * libcurl4-openssl-dev *, * zlib1g *, * zlib1g-dev *, * zlibc *, * libgcrypt11 * и * libgcrypt11 -dev *.

Мы будем использовать APT для их установки в Debian. Запустите следующую команду, чтобы обновить менеджер пакетов:

sudo apt-get update

Выполните следующую команду, чтобы установить необходимые компоненты. Введите, когда будет предложено. Вы можете обнаружить, что некоторые из этих пакетов уже установлены - на момент написания zlib1g и openssl уже включены в Debian - но они перечислены здесь для полноты.

sudo apt-get install make gcc build-essential openssl libcurl4-openssl-dev zlib1g zlib1g-dev zlibc libgcrypt11 libgcrypt11-dev

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

Как только это будет сделано, мы можем загрузить и установить UnrealIRCd и начать процесс сборки.

Шаг третий - установка UnrealIRCd

UnrealIRCd не доступен по умолчанию как пакет в Debian или любом из основных дистрибутивов, поэтому мы будем загружать его вручную и собирать из исходного кода.

Мы будем загружать исходный пакет для UnrealIRCd с помощью утилиты wget, встроенной в Debian. Если вам нужно скачать wget, запустите эту команду:

sudo apt-get install wget

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

Когда вам предоставляется страница загрузки, вы можете увидеть ссылку, которая гласит: «Загрузка должна начаться через 5 секунд, если она не нажата здесь». Это ссылка на файл, содержащий исходный код Unreal, и URL, который вы должны использовать с * wget *.

На момент написания URL-адрес был * http: //unrealircd.org/downloads/Unreal3.2.10.4.tar.gz*.

Когда вы вошли как наш * ircd * пользователь, давайте удостоверимся, что мы находимся в нашем домашнем каталоге:

cd ~

Теперь давайте загрузим исходный код. * Предупреждение: * Использование флага + - no-check-certificate + с является менее безопасным способом получения этого файла. Вы должны использовать другой метод, если ваша цель - безопасность на скорости:

wget --no-check-certificate http://unrealircd.org/downloads/Unreal3.2.10.4.tar.gz

Извлеките исходный код в свою собственную папку:

tar xzvf Unreal3.2.10.4.tar.gz

Теперь мы можем переключиться на новый каталог:

cd Unreal3.2.10.4

И, наконец, давайте начнем процесс сборки. Используйте скрипт, встроенный в пакет с исходным кодом:

./Config

Прочитайте примечания к выпуску и нажмите * Enter *, чтобы продолжить прокрутку. Следите за процентным числом внизу, чтобы не пропустить вопросы. Как только примечания к выпуску заканчиваются, и запускается скрипт настройки, UnrealIRCd начнет задавать вам вопросы.

What directory are all the server configuration files in?

Вы можете оставить это по умолчанию. Нажмите * Enter *, чтобы продолжить.

What is the path to the ircd binary including the name of the binary?

Оставьте это как значение по умолчанию. Нажмите Ввод*.

What should the default permissions for your configurations files be?  (Set this to 0 to disable)

Еще раз, оставьте его по умолчанию. Следующий вопрос важен:

Do you want to support SSL (Secure Sockets Layer) connections?

Ответ:

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

Затем вам будет предложено указать путь к OpenSSL в системе. Поскольку мы позволяем APT обрабатывать это для нас раньше, мы можем оставить его по умолчанию.

If you know the path to OpenSSL on your system, enter it here. If not
leave this blank (in most cases it will be detected automatically).

Нажмите Ввод*.

Следующий вопрос важен для определенных пользователей, использующих IPv6 в своей Droplet.

Do you want to enable IPv6 support?

На этот вопрос вы должны отвечать * Да * только в том случае, если вы включили IPv6 при первоначальной настройке Droplet. Если у вас не включен IPv6 на вашей капле, вы можете оставить его по умолчанию («Нет») и нажать * Enter *.

Следующий вопрос касается пользователей, которые будут работать демоном IRC с несколькими связанными серверами в сети IRC. Ziplinks - это, по сути, средство экономии полосы пропускания при обмене данными между IRC-серверами путем сжатия данных перед их отправкой. От вас не требуется отвечать * Да *, но рекомендуется это сделать. Если вы столкнетесь с трудностями при создании UnrealIRCd, не описанного в этой статье, попробуйте запустить снова и ответьте * Нет * на этот вопрос.

Do you want to enable ziplinks support?

Ответ:

Когда спросят о пути, нажмите * Enter *.

If you know the path to zlib on your system, enter it here. If not
leave this blank

На следующие несколько вопросов можно ответить по умолчанию, нажав * Enter *:

Do you want to enable remote includes?
Do you want to enable prefixes for chanadmin and chanowner?
What listen() backlog value do you wish to use?
How far back do you want to keep the nickname history?
What is the maximum sendq length you wish to have?
How many buffer pools would you like?
How many file descriptors (or sockets) can the IRCd use?
Would you like to pass any custom parameters to configure?

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

В конечном итоге вам будет предложено создать сертификат SSL для IRCd. Если у вас уже нет SSL-сертификата, выданного соответствующим центром сертификации, вы, вероятно, просто захотите оставить эту опцию по умолчанию (которая должна быть «Да») - это то, что мы будем делать в этом руководстве.

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

Нажмите * Enter *, чтобы продолжить. Вы увидите быстрое сообщение о подписанных сертификатах. Нажмите * Enter * еще раз, и процесс настройки завершен.

Шаг четвертый - Сборка UnrealIRCd

Это самый простой шаг из всех! Перейдите в каталог * ~ / Unreal [независимо от версии, которую вы скачали] *:

cd ~/Unreal3.2.10.4

Построить это!

make

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

Шаг пятый - Настройка UnrealIRCd

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

Сделайте копию примера файла конфигурации:

cp ~/Unreal3.2.10.4/doc/example.conf ~/Unreal3.2.10.4/unrealircd.conf

Это скопирует пример файла конфигурации на английском языке в корневой каталог Unreal. Если ваш сервер будет работать на языке, отличном от английского, вы можете использовать двухбуквенный код языка для любой целевой аудитории; например *. / doc.example.fr.conf * На момент написания, немецкий, испанский, французский, венгерский, голландский, русский и турецкий языки поддерживаются вместе с английским, но в этом руководстве мы рассмотрим пример конфигурации на английском языке.

Откройте файл конфигурации в вашем любимом текстовом редакторе:

nano ~/Unreal3.2.10.4/unrealircd.conf

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

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

Модули

UnrealIRCd рекламируется как modular IRCd, так как вы можете создавать функциональные возможности для демона без необходимости перекомпилировать всю базу исходного кода и загружать / выгружать его на лету. Таким образом, некоторые основные функции хранятся в двух стандартных модулях Unreal - модуль и модуль. Посмотрите на эти две строки:

// loadmodule “src/modules/commands.so”;
// loadmodule “src/modules/cloak.so”;

Для тех, кто не знаком с C-подобным синтаксисом, двойная косая черта (+ // +) говорит Unreal игнорировать все, что идет после косой черты в строке. Несколько строк можно закомментировать, добавив + / * + и + * / + вокруг материала.

Раскомментируйте два модуля, чтобы они выглядели так:

/* FOR *NIX, uncomment the following 2lines: */
loadmodule "src/modules/commands.so";
loadmodule "src/modules/cloak.so";

я \ {} - имя сервера

Продолжайте прокручивать файл конфигурации, пока не увидите раздел с надписью + me {} +. Сначала будет закомментированный пример. Вы хотите без комментариев.

Этот раздел, ранее называвшийся М-строкой, определяет конкретные сведения о сервере, когда пользователи подключаются.

Установите * name * в качестве имени хоста сервера.

Поле * info * должно содержать формальное имя вашего IRC-сервера, например «MyDomain IRC». Поля имени и информации должны быть заключены в кавычки.

Поле * numeric * должно оставаться с номером по умолчанию, если только вы не планируете связывать несколько серверов IRC вместе. При наличии нескольких серверов вы обязательно должны убедиться, что все серверы в сети имеют разные значения в этом поле. Это действует как их уникальный идентификатор для UnrealIRCd под капотом.

me
{
       name "";
       info "";
       numeric 1;
};

admin \ {} - Администратор Контактная информация

Следующий раздел это блок + admin {} + или строка:. Снова прокручивайте, пока не дойдете до некомментированного примера.

Это должно содержать вашу контактную информацию в качестве администратора сервера. Вы можете разместить здесь столько, сколько захотите, но вам нужна хотя бы одна строка.

Большинство пользователей помещают свои настоящие имена в первую строку («Боб Смит» в примере), псевдоним во второй строке («Боб» в примере) и адрес электронной почты в третьей строке. Единственное требование состоит в том, чтобы каждая из этих строк была заключена в кавычки и заканчивалась точкой с запятой (+; +).

admin {
       "";
       "";
       "";
};

Теперь мы можем перейти к более конкретной конфигурации, связанной с сервером, помимо простой контактной информации.

class \ {} - Настройки подключения клиента и сервера

Следующий блок, блок + class {} +, определяет, что сервер будет помнить как «клиенты», подключающиеся к сети (ваши пользователи), и «серверы», подключающиеся к сети (если вы добавляете свой IRC-сервер к сеть серверов).

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

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

class           clients
{
       pingfreq 90;
       maxclients 500;
       sendq 100000;
       recvq 8000;
};

class           servers
{
       pingfreq 90;
       maxclients 10;          /* Max servers we can have linked at a time */
       sendq 1000000;
       connfreq 100; /* How many seconds between each connection attempt */
};

allow \ {} - пароль сервера, исключения

Блоки + allow {} + определяют, кому разрешено подключаться к сети.

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

Для сервера, который вы хотите сохранить приватным или защищенным паролем, вы должны добавить строку, как показано во втором примере блока + allow {} +, в первый глобальный блок. Первый блок + allow {} + имеет глобальные настройки для клиентских подключений. Вы можете видеть, что оба значения и установлены в + * @ * +, что означает «все отовсюду».

Это позволяет запрашивать пароль у пользователя при подключении.

allow {
       ip             *@*;
       hostname       *@*;
       class           clients;
       maxperip 5;

};

/* Passworded allow line */
allow {
       ip             *@255.255.255.255;
       hostname       *@*.passworded.people;
       class           clients;
       password "f00Ness";
       maxperip 1;
};

Вы также можете закомментировать второй блок * allow *, если вам не нужно точно настраивать параметры разрешения с другими IP-адресами или другими параметрами подключения.

Следующий блок, блок + allow channel {} +, определяет, какие типы каналов или чаты освобождаются от ограничений, установленных позже в файле конфигурации.

Небольшое объяснение: в следующем блоке мы сможем определить, какие каналы или ключевые слова в названиях каналов запрещены, и этот блок позволяет нам определять исключения из этих запретов. Как правило, вы можете оставить это в покое, если у вас нет особого случая, и пример конфигурации показывает нам, как это работает:

   allow channel {
       channel "#WarezSucks";
       class "clients";
   };

В этом примере сервер разрешает всем клиентам доступ к каналу #WarezSucks, несмотря на тот факт, что каналы, соответствующие строке подстановки + * warez * + позже в файле конфигурации, ограничены.

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

oper \ {} - Настройки оператора

Следующий блок, безусловно, один из самых важных: блок + oper {} + или + o: line +, который определяет ваши учетные данные как владельца сервера или то, что большинство пользователей называют IRCop.

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

Блок + oper {} + определяет, что вам и любым другим привилегированным пользователям разрешено делать как IRCop. Именно здесь определяются ваши администраторы, в том числе вы сами, и по этой причине в игре есть немало вариантов. На данный момент, однако, мы начнем с примера блока.

В настоящее время файл конфигурации содержит пример блока + oper {} + с именем пользователя + bobsmith +. Однако я рекомендую вам просто полностью удалить это и заменить его собственным блоком + oper {} +. Вам нужно будет добавить новый блок для каждого пользователя, которого вы хотите использовать в качестве оператора на своем сервере.

Ниже приведен пример строки o: вы можете скопировать и вставить в файл конфигурации. Значения, обозначенные в, должны быть изменены вами.

oper  {
   class clients;
   from {
       userhost *@*;
   };
   password "";
   flags {
       global;
       netadmin;
       can_gkline;
       can_gzline;
       can_zline;
       can_kline;
       can_unkline;
       can_restart;
       can_die;
       can_rehash;
   };
   swhois "";
};

Небольшое объяснение для каждого из этих пунктов следующее:

  • определяет, каким оператором является этот пользователь, если вы ранее указали класс, отличный от «клиентов» или «серверов». Вам не нужно менять это.

  • В субблоке + from {} + указано, какие имена хостов (указанные в + userhost +) могут использовать эту строку o :. Как правило, вы можете оставить это в _ @ _, так как большинство клиентов (включая вас) имеют динамический IP-адрес и, следовательно, постоянно меняющееся имя хоста.

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

  • В субблоке + flags {} + указаны привилегии, которые будет иметь указанный IRCop, если он идентифицирован как оператор. В official документов есть список того, что делает каждый из этих индикаторов привилегий, но мы быстро рассмотрим их, чтобы дать вам основную идею чего ожидать.

  • определяет, будет ли этот IRCop считаться IRCop на всех серверах. В качестве альтернативы, вы можете использовать + local +, где они будут влиять только на пользователей, подключенных к серверу, на котором включена o: линия, но для вашей собственной линии o: вы обязательно должны использовать + global +.

  • определяет уровень (или «ранг») IRCop, когда пользователи запрашивают помощь оператора. + netadmin + является самым высоким, за которым следует + servicesadmin +, затем + admin +, затем + coadmin +, за которым вообще не стоит индикатор ранга.

  • ,,, и все определяют привилегии, чтобы иметь возможность применять определенные типы пользовательских запретов в случае, если вам нужно удалить проблемного пользователя. В языке IRC ak-line` + означает запрет на подключение к серверу, к которому применяется линия. + Z-line +, также называемый +` g-line` + на других типах не-Unreal серверов, похож на k-line, за исключением того, что он применяется ко всем серверам в сети (при хранении локально на сервере запрет применяется). + Gz-line + и +` gk-line` + одинаковы, за исключением того, что их соответствующие -линии применяются ко всем серверам в сети - поэтому, если на сервере применяется запрет на разъединение или отключение от сети, запрет все еще считается активным. + can_unkline позволяет вам удалить эти запреты после их установки.

  • указывает, что вам разрешено отправлять команду / RESTART на сервер для перезапуска IRCd, отключая всех пользователей в процессе.

  • указывает, что вам разрешено отправлять команду / DIE на сервер, чтобы остановить запуск IRCd, тем самым отключая всех пользователей.

  • указывает, что вам разрешено отправлять команду / REHASH, которая перезагружает текущую активную конфигурацию, полезно, когда вам нужно внести изменения без перезапуска сервера

  • Наконец, опция указывает любые специальные сообщения, которые вы хотите, чтобы пользователи видели, когда они запускают / WHOIS на вас, пока вы идентифицируетесь как оператор. Эта строка может быть опущена полностью, но мне нравится использовать это как возможность добавить забавное сообщение типа «На что ты смотришь?»

Вы можете дублировать указанную выше строку o: по мере необходимости, чтобы учесть всех пользователей, которые хотят стать IRCops. Небольшие сети обычно требуют только 1-2 операторов; Тем не менее, вы можете счесть необходимым добавить больше линий:, по мере роста вашей сети, чтобы помочь пользователям контролировать.

прослушать \ {} - IP-адреса, порты и SSL

Теперь, когда ваша линия o: настроена, мы можем перейти к более важным компонентам конфигурации. В блоке + listen {} + вы можете настроить порты, к которым пользователи смогут подключаться.

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

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

listen *:8067;
listen *:6667;

+ * + Перед +: + в каждом объявлении listen означает «все». Его можно заменить любым IP-адресом, к которому вы хотите привязать UnrealIRCd. Если у вашего сервера более одного IP-адреса, вам потребуется отдельное объявление listen для каждого адреса.

Однако для большинства целей вы просто будете использовать + listen *: 6667 +, а подстановочный знак + * + будет пытаться привязать UnrealIRCd к любому и всем IP-адресам на порту, указанном после +: + `, в данном случае порт + 6667 + `.

  • Примечание: * Чтобы поддерживать адреса IPv6 в UnrealIRCd, вы должны скомпилировать его с поддержкой IPv6 в инструкциях по сборке, приведенным выше, и ваша Droplet должна поддерживать соединения IPv6. Однако обратите внимание, что при указании адресов IPv6 вы должны заключить сам адрес в [скобки], чтобы демон мог различить, что такое IP и что такое порт:

listen [fd3a::a1c9:b311:985e]:6667

В подблоке + options {} + флаг + ssl + определяет, разрешит ли сервер SSL-соединения. Флаг + clientsonly + (в отличие от + serversonly +) позволяет указать, предназначен ли этот порт только для клиентов или серверов. В противном случае по умолчанию и клиенты, и серверы смогут подключаться к этому порту. Настройка + clientsonly + в порядке.

  • ПРИМЕЧАНИЕ: * Если вы получаете ошибки «адрес уже используется» при первом запуске UnrealIRCd, вам нужно заменить символы + * + на IP-адрес (а) вашей капли, поскольку Unreal может или не может быть в состоянии вывести основной IP для привязки.

Следующий блок, + link {} +, можно оставить с настройками по умолчанию. Этот блок используется при соединении двух серверов для формирования сети IRC, которая не рассматривается в этом руководстве.

link            hub.mynet.com
{
       username        *;
       hostname        1.2.3.4;
       bind-ip         *;
       port            7029;
       hub             *;
       password-connect "LiNk";
       password-receive "LiNk";
       class           servers;
               options {
                       /* Note: You should not use autoconnect when linking services */
                       autoconnect;
                       ssl;
                       zip;
               };
};

ulines \ {} - Услуги с привилегиями

Блок + ulines {} + определяет, какие серверы, подключающиеся к нашей сети, должны иметь повышенные привилегии.

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

Вы не должны * не * использовать это для обычного сервера. Замените примеры серверов своими сервисными серверами:

ulines {
       ;
       ;
};

drpass \ {} - пароли для / RESTART и / DIE

Следующий блок, + drpass {} +, определяет, какие пароли должны быть установлены в случае, если IRCop решит использовать команды / DIE или / RESTART на сервере.

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

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

log \ {} - Настройки журнала

Следующий блок, блок + log {} +, можно оставить с настройками по умолчанию.

Вы можете readed по документации для получения информации о блоке журнала, если хотите, но в целом хорошо оставить все как есть. UnrealIRCd очень тщательно ведет журнал.

псевдоним \ {} - псевдонимы команд

Следующая серия блоков, блоки + alias {} +, содержат определения псевдонимов команд на случай, если вы планируете устанавливать службы вместе с вашим новым IRC-сервером.

Если вы не планируете запускать службы с новым сервером, вы можете просто оставить эти блоки без проблем.

файлы \ {} - Включить конфигурационные файлы

Следующий блок, который мы будем настраивать, это блок + files {} +, в котором вы указываете определенные специальные файлы, которые будут включены в конфигурацию.

Большинство из них закомментированы, но вы должны по крайней мере искать, раскомментировать и указывать следующее. * ПРЕДУПРЕЖДЕНИЕ: * UnrealIRCd не запустится, если указать здесь какой-либо файл, который не существует. Когда вы закончите редактирование конфигурации, вам нужно будет создать эти файлы. Мы создадим два файла здесь позже в руководстве.

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

motd ircd.motd;

...

rules ircd.rules
  • Параметр + motd + указывает MOTD сервера или день сообщения дня, который отправляется пользователю при подключении или при использовании команды / MOTD.

  • Параметр + rules + указывает файл, содержащий правила сервера, предоставленные командой / RULES. Я рекомендую вам немного подумать о правилах вашего сервера, так как в прошлом IRC был известен не совсем легальным обменом файлами и тому подобным.

tld \ {} - Международные исключения

Следующий блок, блок + tld {} +, функционально аналогичен блоку + files +, за исключением того, что он позволяет устанавливать особые исключения для пользователей, подключающихся из разных стран, как указано их доменом верхнего уровня. (например + .au + для Австралии, + .ru + для России и т. д.).

Вы можете закомментировать этот раздел, поскольку файлы, которые вы создаете в этом разделе, так же необходимы, как и файлы, найденные в соответствующем блоке + files {} +. Вложите этот раздел в комментарии в стиле C:

/*
tld {
   ...
};
*/

Таким образом, он больше не применяется к текущей конфигурации.

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

ban \ {} - Запретить псевдонимы, IP-адреса и имена

Все эти разделы можно оставить с настройками по умолчанию.

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

Следующий блок, блок + ban {} +, позволяет запретить использование определенного псевдонима или, альтернативно, определенного IP-адреса для подключения к серверу, а также целый ряд других опций.

Обратите внимание, что вы должны выбрать псевдоним или IP, а не оба, для отдельного блока бана.

ban nick/ip {
   mask [""/]; // Banned nick or IP
   reason "";
};

Или просто закомментируйте это:

/*
ban nick {
       mask "*C*h*a*n*S*e*r*v*";
       reason "Reserved for Services";
};
*/

Обратите внимание, что вы также можете использовать фактическую маску хоста IRC ([email protected]) в поле маски вместо ника или IP-адреса для запрета конкретного пользователя - просто обязательно укажите + ban user + вместо + ban ip + `или + ban nick + `.

Наконец, вы также можете запретить использование определенного + realname +. Когда пользователи впервые настраивают своих клиентов, они могут указать свое «настоящее имя» в своих пользовательских настройках. Этот параметр применяется к тем. Например, чтобы запретить всех пользователей по имени Джек:

ban realname {
   mask "";
   reason "";
};
  • Примечание: * Приведенный выше запрет несколько бесполезен, учитывая, что пользователи могут просто изменить свое реальное имя в настройках клиента, но это для полноты.

Вы также можете настроить исключения банов, такие как следующее:

except ban {
   // My username is sigtau--don't ban me!
   mask
};

Теперь, когда мы рассмотрели блоки + ban {} +, которые используются против пользователей, давайте рассмотрим другой тип блоков, которые можно использовать против других типов вредоносной активности.

deny \ {} - Ограничение активности не пользователя

Настройки блока + deny {} + по умолчанию можно оставить как есть для большинства серверов.

Когда IRC был широко распространенным протоколом в 80-х, 90-х и начале 2000-х годов, для пользователей, которые хотели общаться напрямую через IRC без централизованного сервера-посредника, требовался еще один дополнительный протокол. Родился протокол DCC (прямой клиент-клиент), позволяющий пользователям делать вещи, на которые не способен обычный IRC, например отправлять сообщения чата друг другу напрямую, а также обмениваться файлами.

Тем не менее, аспект совместного использования файлов открыл множество дыр в безопасности, так как популярность DCC росла среди пользователей, которые не были достаточно подкованы, чтобы различать файлы, которые могут быть вредоносными или вредоносными по своей природе. Таким образом, некоторые демоны IRC начали ограничивать определенные виды запросов DCC, чтобы предотвратить этот вид активности.

UnrealIRCd является одним из этих демонов IRC. Блок + deny + способен выполнять множество различных задач ограничения, включая блокирование этих типов передачи файлов. Например, в примере конфигурации вы найдете этот блок:

deny dcc {
   filename "*sub7*"; // note that this supports wildcards
   reason "Possible Sub7 Virus";
};

Это приводит к тому, что любые запросы DCC, отправляемые через сервер, содержащий строку «sub7» (основанную на печально известном трояне Sub7 из более ранних дней IRC), будут запрещены.

Блок + deny + также может запретить пользователям присоединяться или создавать определенные типы каналов. Помните ранее, когда мы позволяли пользователям присоединяться к каналу с названием + # WarezSucks +? Это блок + deny +, которому мы противодействовали:

deny channel {
   channel "*warez*";
   reason "Warez is illegal";
   class "clients";
};

Это не позволяет любому пользователю создавать канал со словом «warez» в названии.

vhost \ {} - Скрытие имен хостов пользователей

Большинство серверов могут использовать блок + vhost {} + по умолчанию.

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

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

Необязательный блок + vhost + устанавливает поддельное имя хоста для указанного пользователя. Мы рассмотрим одну предустановку в примере конфигурации:

vhost {
   vhost       i.hate.microsefrs.com;
   from {
       userhost *@*.image.dk;
   };
   login       stskeeps;
   password    moocowsrulemyworld;
};

Это позволяет пользователям, подключающимся с имени хоста + * @ *. Image.dk +, устанавливать свое имя хоста в + * @ i.hate.microsefrs.com +. Обычно пользователи делают это с помощью команды / CHGHOST.

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

set \ {} - Конфигурация сети

Этот раздел * абсолютно необходим *! IRC-демон * не * запустится, если вы не настроите этот раздел должным образом!

Если вы следили за этим, следующий блок должен быть одним из последних, и по иронии судьбы, одним из самых важных: блок + set {} +.

Блок + set {} + содержит множество параметров конфигурации, которые понадобятся серверу. Ниже приведена копия примера конфигурации, как вы ее увидите, с добавленными встроенными комментариями, которые объясняют, что делает каждый параметр. Вам не нужно копировать комментарии в файл конфигурации, если вы не найдете их полезными.

Большинство, если не все эти параметры являются обязательными, поэтому просто отредактируйте их по своему вкусу вместо того, чтобы удалять их оптом. Обратите внимание, что если вы планируете связывать вместе несколько серверов, лучше всего сохранять их единообразными и одинаковыми для всех серверов. Если вы не планируете связывать серверы, эти параметры должны быть настроены.

Большинство из этих вариантов просто подразумевают замену примера доменного имени на ваше собственное доменное имя.

Обратите внимание, что вам нужно сгенерировать три случайных значения для трех + ключей-ключей.

set {
   network-name ""; // This is the name of the network reported to clients
                  // upon joining, and in many popular IRC clients, is the
                  // formal name used for tabbed view and logs.
   default-server ""; // Replace this with your server's domain--the
                    // daemon reports this to the client as being
                    // the network's proper hostname.
   services-server ""; // If you plan to add services to your
                          // IRC server, use the same domain as
                          // above, e.g. services.mydomain.com.
                          // Even if you aren't going to run
                          // services, you should do this anyway.
   stats-server ""; // Same as the above, except with stats
                    // stats servers.
   help-channel ""; // Set this to a be your network's official "help
               // channel" so that users have a place to go in case
               // they need help with something that only an IRCop
               // or server administrator could do.
   hiddenhost-prefix ""; // For anonimity purposes, UnrealIRCd masks users'
                // IP addresses using 'hidden hosts'--i.e. the host
                // user331.newyork.someISP.com is converted to
                // hiddenhost-3AB66E2-newyork.someISP.com.  This value
                // can be customized--change "rox" to whatever you
                // want (generally, alphanumeric lowercase) the hidden
                // host mask to be.  This is sometimes referred to as
                // "cloaking."
   cloak-keys {
       "";
       "";
       "";
   };

   // The above block are the random seeds used to generate unique cloaks for
   // each user without revealing their hostname to one another.  Generally, a
   // 10-20 character random alphanumeric mixed-case string will do.  Any online
   // password generator will work, or if you're in a pinch, just type whatever
   // alphanumeric string you want in all three string fields.
   //
   // THERE MUST BE EXACTLY THREE STRINGS.

   hosts {
       local       "";
       global      "";
       coadmin     "";
       admin       "";
       servicesadmin   "";
       netadmin    "";
       host-on-oper-up "";
   };

   // The above block can go mostly unchanged, apart from changing "roxnet.org"
   // to your domain of choice.  Setting host-on-oper-up automatically changes
   // the hostname of the IRCop user to be one of the above based on their rank
   // indicators in their o:line flags (`local`, `global`, `admin`, etc.).
};

Последний блок в конфигурации должен быть еще одним блоком + set {} +, но на этот раз параметры являются исключительными для этого экземпляра сервера, а не согласованными по всей сети.

  • Вы должны установить адрес электронной почты kline-адрес, иначе сервер не запустится. *

Остальные эти настройки можно оставить по умолчанию для большинства серверов.

set {
   kline-address ""; // When k-lines are applied, users are sometimes
                   // instructed to contact a particular e-mail for
                   // more information.  This should be that e-mail.
   modes-on-connect "+ixw"; // Leave these at default; however if you need to tweak
                // what modes users are automatically assigned upon
                // connecting, you can view the full mode reference
                // here: http://www.unrealircd.com/files/docs/unreal32docs.html#userchannelmodes
   modes-on-oper "+xwgs";   // These are modes that are applied when a user first
                // authenticates as an IRCop.  These are generally left
                // alone as well, but you can use the above link again
                // if you, for some reason, need to tweak these.
   oper-auto-join "#opers"; // This is the channel that IRCops are set to
                // be force-joined to as soon as they authenticate as
                // an IRCop.  You can set multiple channels by
                // delimiting them with commas: #chan1,#chan2,...
   maxchannelsperuser 10; // This is the maximum number of channels any one user
                  // session can be joined to.  You may raise or lower this
                  // as needed, however it must be greater than or equal
                  // to 1.
   options {
       hide-ulines; // This means any server specified in the ulines {} block
                // will not appear when a connected user uses /list.
                // IRCops automatically override this when they use /list.
       show-connect-info; // This allows a user to see messages such as
                  // "Looking up your hostname..." and "Requesting
                  // identd..." when they are connecting.  Generally a
                  // good idea to keep this.
   };

   anti-spam-quit-message-time 10s; // In the past, IRC servers have had issues
                    // with users joining and quitting with long
                    // quit messages in rapid succession to spam
                    // the server.  This helps combat that by
                    // specifying how long a user must be
                    // connected before the server will allow them
                    // to specify a message when using /QUIT.
                    // You can leave this as it is or change it.
   oper-only-stats "okfGsMRUEelLCXzdD"; // You should probably leave this alone,
                        // it defines which server stats are
                        // restricted to be viewable by IRCops only.
                        // Since there's too many stat modes to list
                        // for an article, here's a hint: once your
                        // server is up and running, use the /stats
                        // command (while authenticated as an IRCop)
                        // to get a list of character->stat pairs,
                        // which can be used to modify this list.
   throttle { // When users disconnect, their clients will try to reconnect them.
          // This prevents it from happening too quickly, potentially putting
          // the server under high load.
       connections 3; // The number of connections allowed...
       period 60s; // ...per x seconds, as specified here.
   };

   anti-flood { // This configures anti-flood settings to prevent users from
            // flooding the server with unnecessary commands.
       nick-flood 3:60; // Allows 3 nick changes per 60 seconds.

       // Some other useful options to read up on are away-flood for how
       // many times a user can use /AWAY, or unknown-flood-amount for
       // users that send unknown garbage data to the server.
   };

   spamfilter { // This controls settings for spam filtering and default ban info.
       ban-time 1d; // This is the default duration of a k-line/z-line ban when
                // automatically set by a spam filter.
       ban-reason "Spam/Advertising" // The message used by automatic bans.
       virus-help-channel "#help"; // The channel users can turn to if they
                       // need help with viruses such as those
                       // sent over DCC.
   };
};

Это оно!

Сохраните свои изменения в файле конфигурации, убедитесь, что он сохранен как + unrealircd.conf +. Нажмите * CTRL-x *, затем * y *, затем * Enter *.

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

Шаг шестой - Создание ircd.rules и ircd.motd

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

nano ~/Unreal3.2.10.4/ircd.rules

Теперь вы можете ввести свои правила сервера в виде простого текста. Пользователи будут представлены с ними после ввода команды / RULES. Помните, что вы должны держать строки в этом файле длиной не более 80 символов, чтобы предотвратить их автоматическое обтекание IRCd (если вы используете отступы, это может быть проблемой).

Сохраните ваши изменения. Создайте файл сообщения дня:

nano ~/Unreal3.2.10.4/ircd.motd

Здесь вы можете ввести свой MOTD, который будет отображаться при подключении пользователей к серверу. То же ограничение длины строки в 80 символов применимо и здесь. Полезная информация для размещения в этом файле - это избранные каналы, быстрая разбивка правил сервера, текущие IRCops и так далее. Вы можете поместить все, что вы хотите, в текстовом формате.

Сохраните ваши изменения.

Если вы указали другие файлы в вашей конфигурации, создайте их и сейчас.

Шаг седьмой - файл журнала IRCd

Чтобы убедиться, что на IRCd есть место для хранения его логов, давайте продолжим и создадим пустой файл специально для этого.

touch ~/Unreal3.2.10.4/ircd.log

Шаг восьмой - Запуск UnrealIRCd

Поздравляем! Вы успешно настроили своего собственного демона IRC.

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

cd ~/Unreal3.2.10.4

Запустите чат-сервер:

./unreal start

Вы должны увидеть сообщение, подобное этому:

* Loading IRCd configuration ..
* Configuration loaded without any problems ..
* Initializing SSL.
* Dynamic configuration initialized .. booting IRCd.

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

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

Шаг девятый - Подключение IRC-клиента

В вашем любимом IRC-клиенте введите:

/server  6667

Вам понадобится ваш домен или IP-адрес, а также номер порта (6667 в этом примере). Если вы установите глобальный пароль для сервера в блоке + allow {} +, вам также понадобится использовать его.

Несколько популярных IRC-клиентов для Windows: mIRC, HexChat и Pidgin. Если вы работаете в Linux, http://xchat.org [X-Chat] находится в свободном доступе. Для OS X доступны X-Chat Azure и несколько платных приложений в App Store.

Шаг десятый - Аутентификация оператора

После подключения вам нужно будет пройти аутентификацию как IRCop. Чтобы аутентифицироваться как оператор, введите:

/oper your-oline-username your-oline-password

Это учетные данные, которые вы устанавливаете в блоке + oper {} +.

Затем вы должны принудительно присоединиться к каналам, которые мы ранее указали в + oper-auto-join +, что означает, что вы теперь являетесь оператором IRC.

Примечание о подключении через SSL

Поскольку экземпляр сервера был настроен с использованием самозаверяющего SSL-сертификата, некоторые клиенты могут не разрешить подключение через SSL из-за «недействительного» или «ненадежного» сертификата. Рекомендуется искать способ создания действительного сертификата SSL с помощью бесплатного сервиса, такого как CACert.org или платного центра сертификации (CA) по вашему выбору.

Наслаждайтесь вашим новым сервером IRC! Отсюда вы можете настроить службы или начать приглашать пользователей. Приятного общения!

Related