Устанавливаем IRC сервер — ngIRCd

2

Одной из целей знакомства части пользователей Linux является изучение работы и настроек различных серверов и сервисов. В силу открытости этой операционной системы научиться администрировать систему гораздо проще, чем в Windows, для которой большинство проектов далеко не бесплатны, да и найти дистрибутив бывает не просто.             В этой статье поможем читателям, разобрав настройку одного из IRC серверов. Почему именно IRC? Если поискать на тематических ресурсах, можно обнаружить, что для Linux и Unix существует большое количество руководств по настройке Интернет серверов, чаще всего Apache, различных вариантов почтовых систем, отличающихся используемыми компонентами и вариациями на тему борьбы со спамом и вирусами. Найти руководство по остальным на порядок тяжелее. Особенно это касается старичка IRC, который уже несколько десятков лет честно исполняет свой долг, выдерживая многочисленные баталии, основные ресурсы IRC, отлично держатся на ногах. И не смотря на нашествие более новых сервисов вроде ЖЖ, сдаваться похоже не собираются. Постоянно появляются новички. Сегодня уже никого не удивишь сетями связывающими целые районы, поэтому почему бы не испытать себя в администрировании IRC.


На сегодняшний день известно несколько десятков, если не сотен решений предназначенных для построения IRC сервера. Некоторые из этих проектов берут свое начало от первого сервера IRCD (http://www.nic.funet.fi/~irc/server/), соответственно и часто тащат за собой его наследство. Существуют системы, рассчитанные на большое количество пользователей, требующие наличия базы данных, поддерживающие обмен информации по защищенному протоколу SSL. Сравнить некоторые возможности популярных решений можно по адресу http://en.wikipedia.org/wiki/Comparison_of_IRCds. Мы же обратимся к проекту, который не претендует на роль первого, лучшего и так далее, не может он похвастаться и наличием большого числа дополнительных возможностей. Стабильность и безопасность вот ключевые слова —  ngIRCd (Next generation IRC Daemon).

?Возможности  ngIRCd

Этот сервер написан автором  Александром Бартоном (Alexander Barton) полностью с нуля, на языке С. Основное внимание при его проектировании было уделено переносимости кода и чистоте кода. Как результат ngIRCd легко собирается на большинстве платформ. Кроме Linux это:  AIX, A/UX, FreeBSD, HP-UX 9.10/10.20, HP-UX, IRIX, Mac OS X, NetBSD, OpenBSD, Solaris, и Windows с библиотеками Cygwin. Во время сборки ngIRCd не требует никаких скрытых зависимостей, компилируется он просто идеально. Удобств настройке придает понятный конфигурационный файл, возможно с увеличением функциональности он несколько усложнится, но базовый принцип я надеюсь, останется таким же. Также ngIRCd?совместим со всеми IRC серверами,?соблюдающими  спецификации RFC 1459, 2810-2813, а значит, большинство команд и все что ожидает от подобного сервиса обычный пользователь. В больших сетях пока использовать его, наверное, рановато. Да и автор сам честно предупреждает,?что?ngIRCd пока не?тестировался?на?оживленных  IRC-сетях?с высокой нагрузкой. Но в небольших сетях и в целях обучения его вполне можно рекомендовать. Тем более как показывает опыт, он не сильно боится большой нагрузки. Кстати сервер ngIRCd может работать не только со статическим адресом, но нормально себя ведет, если адрес системе назначается динамически. Только бы пользователи знали куда присоединяться. Для повышения безопасности сервер легко может работать переходить chroot окружение, и при возникновении проблем злоумышленник дальше указанного каталога не пройдет. Домашний сайт проекта — http://ngircd.barton.de/.

Устанавливаем ngIRCd

В репозитарии дистрибутива KUbuntu 6.06 Daper Drake, который использовался при тестовой установке, ngIRCd есть. Установить его просто.

$ sudo apt-get update

$ sudo apt-get install ngircd

Правда на момент написания это была уже не актуальная на текущий момент версия —  0.9.2, тогда как на сайте проекта была доступна 0.10.1. Тем, кто не хочет компилировать можно взять готовый пакет к Ubuntu 7.04, где собрана версия 0.10 или альтернативный пакет к Debian ftp://arthur.barton.de/debian/pool/main/n/ngircd/, который поддерживается  Александром. Компилирование проходит без проблем, поэтому проще собрать его самому.

$ wget -c ftp://ftp.berlios.de/pub/ngircd/ngircd-0.хх.1.tar.gz

$ tar xzvf ngircd-0.хх.1.tar.gz

$ cd ngircd-0.хх

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

$ ./configure —enable-sniffer  —sysconfdir=/etc –prefix=/usr
По окончании конфигурирования будет выдано резюме по установкам.

ngIRCd 0.хх has been configured with the following options:

Target: i686-pc-linux-gnu

Compiler: gcc

Compiler flags: -pedantic -g -O2 -pipe -W -Wall -Wpointer-arith -Wstrict-prototypes -DSYSCONFDIR='»$(sysconfdir)»‘

Libraries: -lz -lnsl

‘ngircd’ binary: /usr/sbin

Configuration file: /etc

Manual pages: /usr/man

Documentation: /usr/share/doc/ngircd

Syslog support: yes     Enable debug code: yes

zlib compression: yes           IRC sniffer: yes

Use TCP Wrappers: no        Strict RFC mode: no

Zeroconf support: no          IRC+ protocol: yes

IDENT support: no            I/O backend: «epoll()»

И затем стандартная компиляция.

$ make

$ sudo make install

Вот собственно и все. Весь процесс сборки не отнимет у вас времени больше двух-трех минут.

Конфигурационный файл ngIRCd

При запуске все настройки демон считывает из единственного конфигурационного файла ngircd.conf. Если конфигурирование производилось, как показано выше, то он сейчас располагается в каталоге /etc. Структура файла традиционная для Unix, примерно так выглядят настройки большинства серверов. Файл разбит на несколько секций, в каждой указываются определенные настройки. Причем если планируется работа нескольких виртуальных серверов ngIRCd, их настройки описываются в одном файле. Удобно, что он хорошо комментирован, а ключевые слова поняты по смыслу, поэтому разобраться в значении параметра, можно даже не заглядывая в документацию. Знак диез «#» и точка с запятой «;» означают комментарий. Документация также стоит отдельных похвал, написана просто и понятно, при знании базового английского, сориентироваться будет просто. Большую часть параметров можно оставить по умолчанию, то есть закомментированными.

Приступаем к редактированию.

$ sudo mkedit /etc/ngircd.conf

[Global]

# Секция [Global] описывает основные настройки сервера

# Имя сервера в сети IRC network.

Name = irc.grinder.net

# информация о сервере, которая будет выводиться при использовании команд WHOIS и

LINKS

Info = My First IRC Server

# Пароль для присоединения к серверу, если не установлен, то пользователи будут соединяться без пароля

;Password = abc

# информация о сервере и администраторе

AdminInfo1 = My IRC

AdminInfo2 = Home

AdminEMail = admin@irc.grinder.net

# По умолчанию сервер использует 6667 порт, через запятую можно указать другие значения

;Ports = 6667, 6668, 6669

# По умолчанию сервер ожидает соединение на всех сетевых интерфейсах, что не всегда

# нужно. Использовав этот параметр, можно указать на нужный интерфейс

;Listen = 1.2.3.4

# Файл содержащий «Сообщение дня» (message of the day – MOTD), выподимое пользователю присоединившемуся к серверу.

MotdFile = /etc/ngircd.motd

# Если не используется файл motd, здесь можно указать короткое (256 знаков) сообщение

;MotdPhrase = «Hello world!»

# По умолчанию демон будет работать как пользователь nobody

# Наличие больного числа таких nobody в системе, делает этого пользователя не менее

# значимым чем root. Использовав эти параметры, можно указать пользователя и группу

# от имени, которого будет работать демон после запуска

# Он должен быть в системе и все файлы должны принадлежать этому пользователю

ServerUID = ngircd

ServerGID = ngircd

# chroot каталог, в который будет переходить демон после запуска

;ChrootDir = /var/empty

# Файл с номером процесса демона ngircd, если не планируется chroot можно не трогать

;PidFile = /var/run/ngircd/ngircd.pid

# По истечении этого времени клиенту будет послан  PING, чтобы выяснить «жив» он или нет

PingTimeout = 120

# если клиент не ответит на PING сообщением PONG, по истечении этого времени он будет отключен

PongTimeout = 20

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

;ConnectRetry = 60

# Разрешение использования команды MODE, устанавливающего режим канала

;OperCanUseMode = no

# маскирование запроса как будто он идет от сервера

;OperServerMode = no

# использование только предустановленных каналов

;PredefChannelsOnly = no

# максимальное количество соединений, которое будет принимать сервер

# (<=0: без ограничений):

;MaxConnections = -1

# тоже только с одного IP-адреса

;MaxConnectionsIP = 5

# максимальное количество каналов, в которых может присутствовать пользователь

;MaxJoins = 10

[Operator]

# В этой секции определяются операторы IRC, для каждого создается своя секция

Name = Operator1

Password = password
[Channel]

# IRC каналы автоматически создаваемые сервером.

# Каждый канал описывается в отдельной секции

# Название канала

Name = Linux

# Тема для канала

Topic = Linux

# Режим

;Modes = tn

Теперь осталось завести пользователя ngircd, и назначить его владельцем /etc/ngircd.motd.

$ sudo adduser ngircd —no-create-home —disabled-login

Adding user `ngircd’…

Adding new group `ngircd’ (1003).

Adding new user `ngircd’ (1003) with group `ngircd’.

Not creating home directory `/home/ngircd’.

Changing the user information for ngircd

$ sudo chown ngircd:ngircd /etc/ngircd.motd

Все готово. Запускаем.

$ sudo ngircd

Настраиваем IRC клиента на новый сервер и общаемся. Проверил работу сервера со всеми кодировками CP1251, KOI8R, KOI8U и UTF8. При использовании ngIRCd никаких проблем с выводом сообщений на кириллице не возникало, главное, чтобы клиенты были настроены одинаково.

 настроенные клиенты

Просмотреть процесс обмена сообщениями можно в файле /var/log/messages.

$ sudo cat /var/log/messages | grep ngircd

Feb 25 19:14:01 localhost ngircd[10800]: Reading configuration from «/etc/ngircd.conf» …

Feb 25 19:14:01 localhost ngircd[10800]: No administrative information configured but required by RFC!

Feb 25 19:14:01 localhost ngircd[10801]: Running as user ngircd(1003), group ngircd(1003), with PID 10801.

Feb 25 19:14:01 localhost ngircd[10801]: Not running chrooted.

Feb 25 19:14:01 localhost ngircd[10801]: IO subsystem: epoll (hint size 100, initial maxfd 100, masterfd 4).

Feb 25 19:14:01 localhost ngircd[10801]: Now listening on 0.0.0.0:6667 (socket 5).

Feb 25 19:14:50 localhost ngircd[10801]: Accepted connection 6 from 192.168.1.58:59018 on socket 5.

Feb 25 19:14:50 localhost ngircd[10806]: Possible forgery: 192.168.1.58 resolved to grinder (which is at ip 127.0.0.1!)

Feb 25 19:14:50 localhost ngircd[10801]: User «sergej!~grinder@192.168.1.58» registered (connection 6).

Feb 25 19:15:24 localhost ngircd[10801]: Accepted connection 7 from 192.168.1.58:59019 on socket 5.

Feb 25 19:15:24 localhost ngircd[10808]: Possible forgery: 192.168.1.58 resolved to grinder (which is at ip 127.0.0.1!)

Feb 25 19:15:30 localhost ngircd[10801]: User «grinder!~grinder@192.168.1.58» registered (connection 7).
Вот мы и научились настраивать свой IRC сервер. Хотя ngIRCd?не?обладает некоторой функциональностью присущих более развитым продуктам, но это только начало. Linux forever!

2 комментария

  1. ONE
    // Ответить

    А как мне стать операторм!!!Чтоб потом использовать команды типа /kick /op и т.д.

  2. Drone
    // Ответить

    > А как мне стать операторм!!!
    > Чтоб потом использовать команды типа /kick /op и т.д.
    Обычно первый зашедший на канал автоматически получает опа, так что по минимуму достаточно зайти на новый канал(/join #chan) и если его не существовало — получите на нем опа, сможете кикать и т.п..Админ сервера также может получить права опа на любом канале, даже не созданным самостоятельно «нечестными» методами используя привилегии IRC-оператора (иркопа) — для этого как правило надо прописать себя как иркопа в конфиге сервера и почитать мануал на предмет иркопских команд используемого сервера.Более навороченый вариант (используемый во многих IRC сетях) подразумевает установку еще и так называемых «сервисов» (Services) видимых пользователю как правило как ChanServ, NickServ и прочие — они занимаются автоматической раздачей прав зарегистрировавшимся пользователям.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *