IRCd , сокращение от Internet Relay Chat daemon , представляет собой серверное программное обеспечение , реализующее протокол IRC , позволяющий людям общаться друг с другом через Интернет (обмениваться текстовыми сообщениями в режиме реального времени). [1] [2] Он отличается от IRC-бота , который подключается к IRC-каналу.
Сервер прослушивает соединения от клиентов IRC [3] на наборе портов TCP . [4] Когда сервер является частью сети IRC, он также поддерживает одно или несколько установленных соединений с другими серверами/демонами. [5]
Термин ircd изначально относился только к одному программному обеспечению [6], но со временем он стал общим обозначением любой реализации демона IRC. [7] [8] Однако оригинальная версия по-прежнему распространяется под тем же названием [9] , и в этой статье рассматриваются оба варианта использования.
Первоначальный IRCd был известен как «ircd» и был создан Яркко Ойкариненом (WiZ на IRC) в 1988 году. [10] [11] Ему помогали многие другие люди, такие как Маркку Савела (msa на IRC), который помог с выпуском 2.2+msa и т. д.
В своих первых версиях IRC не имел многих функций, которые сегодня считаются само собой разумеющимися, таких как именованные каналы и операторы каналов . Каналы были пронумерованы — например, канал 4 и канал 57 — и тема канала описывала тип разговора, который происходил на канале. Одним из пережитков этого является то, что присоединение к каналу 0 заставляет клиента покинуть все каналы, на которых он в данный момент находится: «КАНАЛ 0» — это первоначальная команда для выхода из текущего канала.
Первым крупным изменением в IRC в версии 2.5 стало добавление именованных каналов – «+channels». Позднее в версии 2.7 «+channels» были заменены на «#channels», числовые каналы были полностью удалены и были реализованы запреты каналов (режим +b).
Вокруг версии 2.7 произошел небольшой, но заметный спор [ требуется разъяснение ] , который привел к появлению ircu — Undernet- форка ircd.
В irc2.8 добавлены «&channels» (те, которые существуют только на текущем сервере, а не во всей сети) и «!channels» (те, которые теоретически защищены от многочисленных способов, которыми пользователь может эксплуатировать канал, «используя netsplit »), и это базовый релиз, от которого произошли почти все текущие реализации.
Около версии 2.8 появилась концепция задержки ника и канала, система, призванная помочь обуздать злоупотребления, такие как захваты и разделение. Это не было согласовано большинством современных IRC (EFnet, DALnet, Undernet и т. д.) – и поэтому 2.8 был разделен на ряд различных демонов, использующих противоположную теорию, известную как TS – или временную метку, которая сохраняла уникальную временную метку с каждым каналом или ником в сети, чтобы решить, какой из них «правильный» для сохранения.
Сама по себе маркировка времени была пересмотрена несколько раз для исправления различных проблем в ее конструкции. Последние версии таких протоколов:
В то время как клиент-серверные протоколы, по крайней мере, функционально схожи, сервер-серверные протоколы сильно различаются (серверные протоколы TS5, P10 и ND/CD несовместимы), что делает очень сложным «связывание» двух отдельных реализаций сервера IRC. Существуют некоторые «мостовые» серверы, позволяющие связывать, например, серверы 2.10 с серверами TS5, но они часто сопровождаются ограничениями на то, какие части каждого протокола могут использоваться, и не получили широкого распространения.
В число значимых релизов на основе версии 2.8 вошли:
Исходная кодовая база продолжала разрабатываться в основном для использования в сети IRCnet . Новые протоколы «сервер-сервер» были введены в версии 2.10, выпущенной в 1998 году, и в 2.11, впервые выпущенной в 2004 году и актуальной по состоянию на 2007 год [обновлять]. Этот демон используется IRCnet , и его можно найти по адресу http://www.irc.org/ftp/irc/server/ Исходный ircd является свободным программным обеспечением , лицензированным в соответствии с GNU General Public License . Эта линия разработки создала 4 IRC RFC, выпущенных после RFC 1459, которые документируют исключительно этот серверный протокол.
2.8.21+CS и Hybrid IRCd продолжают использоваться в EFnet , причем ircd-ratbox (ответвление ircd-hybrid) по состоянию на 2004 год [обновлять]является наиболее популярным.
Совсем недавно было написано с нуля несколько демонов IRC, таких как ithildin, [12] InspIRCd, [13] csircd (также написанный Крисом Беренсом), ConferenceRoom, [14] Microsoft Exchange Chat Service, WeIRCd, [15] или IRCPlus/IRCXPro. [16]
Эти попытки имели неоднозначный успех и вызвали большую долю скептицизма со стороны существующего сообщества разработчиков IRC. С каждым новым IRCd используется немного другая версия протокола IRC, [17] [18] и многие клиенты и боты IRC вынуждены идти на компромисс относительно функций или изменять их реализацию в зависимости от сервера, к которому они подключены. [19] Они часто реализуются с целью улучшения удобства использования, безопасности, разделения полномочий или простоты интеграции со службами . Возможно, одним из наиболее распространенных и заметных отличий является включение или исключение статуса оператора канала half-op (что не является требованием RFC).
Официально назначенные номера портов — 194 («irc»), 529 («irc-serv») и 994 («ircs»). [20] Однако эти порты находятся в привилегированном диапазоне (0–1024), что в Unix-подобной системе означает, что демон исторически должен иметь привилегии суперпользователя , чтобы открыть их. По различным причинам безопасности это было нежелательно.
Обычные порты для процесса IRCd — от 6665 до 6669, причем 6667 является историческим портом по умолчанию. [21] Эти порты могут быть открыты процессом, не являющимся суперпользователем, и они стали широко использоваться.
Запуск большого сервера IRC, который имеет более нескольких тысяч одновременных пользователей, требует поддержания очень большого количества TCP-соединений открытыми в течение длительных периодов. Очень немногие ircd являются многопоточными , поскольку почти каждое действие требует доступа (по крайней мере, чтения и, возможно, изменения) к глобальному состоянию.
В результате лучшими платформами для ircd являются те, которые предлагают эффективные механизмы для обработки огромного количества соединений в одном потоке. Linux предлагает эту возможность в виде epoll в серии ядер новее 2.4.x. FreeBSD (начиная с 4.1) и OpenBSD (начиная с 2.9) предлагают kqueue . Solaris имеет /dev/poll с версии 7, а с версии 10 и далее имеет IOCP (порты завершения ввода-вывода). Windows поддерживает IOCP с Windows NT 3.5. Разница, создаваемая этими новыми интерфейсами, может быть существенной. Разработчики IRCU упоминали увеличение практической емкости на сервер с 10 000 пользователей до 20 000 пользователей. [ необходима цитата ]
Некоторые IRCd поддерживают Transport Layer Security или TLS, для тех, кто этого не делает, все равно можно использовать SSL через Stunnel . Неофициальный, но наиболее часто используемый порт для соединений TLS IRCd — 6697. Совсем недавно, в качестве улучшения безопасности и удобства использования, различные авторы клиентов и серверов начали разрабатывать стандарт, известный как стандарт STARTTLS [22] , который позволяет соединениям TLS и простому тексту сосуществовать на одном и том же порту TCP.
Демоны IRC поддерживают IPv4 , а некоторые также поддерживают IPv6 . В целом, разница между подключениями IPv6 и IPv4 к IRC является чисто академической, и служба работает примерно одинаково через любой протокол.
Большие сети IRC состоят из нескольких серверов для целей горизонтального масштабирования . Для этих целей существует несколько расширений протокола IRC. [23]
IRCX (Internet Relay Chat eXtensions) — это расширение протокола IRC, разработанное корпорацией Microsoft.
Протокол P10 — это расширение протокола Internet Relay Chat для связи сервер-сервер, разработанное Undernet Coder Committee для использования в их программном обеспечении сервера ircu. Он аналогичен по назначению протоколам IRCX и EFnet TS5/TS6 и реализует временные метки ника и канала для обработки коллизий ника и netsplit channel ride, соответственно. Другие IRCd, которые используют это расширение протокола, включают beware ircd. [23] [24] [25]
Протокол TS6 — это расширение протокола Internet Relay Chat для связи сервер-сервер, изначально разработанное разработчиками ircd-ratbox. Он был расширен различным программным обеспечением IRC и имеет функцию, благодаря которой надлежащие реализации TS6 могут связываться друг с другом с помощью согласования функций, даже если функции разнородны.
Juping сервера, канала или псевдонима относится к практике блокирования указанного канала или псевдонима на сервере или в сети или указанного сервера в сети. Одним из возможных объяснений того, как появился этот термин, является то, что он назван в честь оператора по имени Jupiter, который получил контроль над псевдонимом NickServ на EFnet . [26] [ необходима цитата ] EFnet не предлагает такие услуги, как NickServ; Jupiter получил контроль над псевдонимом, поскольку он (среди других операторов) не считал, что псевдонимы должны быть собственностью. Сегодня EFnet оперирует псевдонимами jupe, которые используются в качестве услуг в других сетях.
Псевдоним или серверный джуп используют тот факт, что некоторые идентификаторы уникальны; используя идентификатор, вы получаете исключительную блокировку, которая не позволяет другим пользователям использовать его.
Официально разрешенные jup-атаки также могут использовать службы или параметры конфигурации сервера для принудительного применения jup-атак, например, когда взломанный сервер jup-атакуется, чтобы не допустить нанесения им вреда сети.
На практике операторы IRC теперь используют конфигурации jupe, чтобы административно сделать канал или псевдонимы недоступными. [27] Jupe канала относится к серверному запрету канала, что означает, что к определенному каналу нельзя присоединиться при подключении к определенному серверу, но другие серверы могут разрешить пользователю присоединиться к каналу. Это способ запрета доступа к проблемным каналам.
O -line (часто также пишется как O:line [ требуется ссылка ] ; на IRCd, которые поддерживают локальных операторов, O-line называются o:lines с маленькой буквой O [ требуется ссылка ] ), сокращенно от Operator Line и получено из файла конфигурации на основе строк оригинального IRCd, представляет собой строку кода в файле конфигурации демона IRC, которая определяет, какие пользователи могут стать операторами IRC и какие разрешения они получают при этом. Название происходит от префикса, используемого для строки в оригинальном IRCd, заглавной буквы O. O-line указывает имя пользователя, пароль, флаги оператора и ограничения маски хоста для конкретного оператора. Сервер может иметь много O-line в зависимости от административных потребностей сервера и сети. [28]
Флаги операторов используются для описания разрешений, которые предоставляются оператору. В то время как некоторые операторы IRC могут отвечать за сетевую маршрутизацию, другие могут отвечать за сетевое злоупотребление, что делает их потребность в определенных разрешениях различной. [4] Доступные флаги операторов сильно различаются в зависимости от того, какой демон IRC используется. Как правило, более многофункциональные демоны IRC имеют больше флагов операторов, а более традиционные демоны IRC имеют меньше.
O-line также может быть настроена так, что только пользователи определенной хост-маски или IP-адреса могут получить статус оператора IRC, используя эту O-line. Использование хост-масок и IP-адресов в O-line требует, чтобы IP-адрес оставался прежним, но обеспечивает дополнительную безопасность.
Когда пользователь k-lined (сокращение от kill line ), пользователь забанен на определенном сервере, либо на определенное время, либо навсегда. После того, как пользователь забанен, он не может вернуться на этот сервер. Это записывается как строка в файле конфигурации IRC-демона сервера с префиксом в виде буквы "K", отсюда и "K-line".
Некоторые демоны IRC, включая ircd-hybrid и его потомков, могут быть настроены на распространение K-линий на некоторые или все другие серверы в сети. В такой конфигурации K-линии фактически являются глобальными запретами, аналогичными G-линиям.
Хотя точная причина отключения варьируется от случая к случаю, обычно она связана с определенными аспектами клиента или пользователя, в отношении которого было выполнено отключение.
Существует ряд других сетевых «линий», относящихся к K-line. Современные демоны IRC также позволяют операторам IRC устанавливать эти линии во время обычной работы, когда доступ к файлу конфигурации сервера обычно не требуется.
G -line или глобальная линия килла (также пишется G:line ) — это глобальный сетевой бан, применяемый к пользователю; термин пришел из Undernet, но в DALnet использовалась похожая концепция, известная как AKill . [ необходима цитата ]
G-линии иногда хранятся в файле конфигурации IRCd, хотя некоторые сети, которые обрабатывают K-линии через службы IRC , предпочитают хранить их в файлах конфигурации своих служб. Всякий раз, когда человек с G-линией пытается подключиться к сети IRC, либо службы, либо демон IRC автоматически отключают клиента, часто отображая сообщение, объясняющее причину бана.
G-линии — это разновидность K-линий, которые работают примерно так же, за исключением того, что K-линии отключают клиентов только на одном сервере сети. G-линии обычно применяются к пользователю, который получил K-линию на одном сервере, но продолжает злоупотреблять сетью, подключаясь через другой сервер. G-линии часто рассматриваются как крайняя мера, используемая только в случаях повторного злоупотребления, когда были предприняты обширные попытки урезонить нарушителя. Поэтому, особенно в крупных сетях, часто только очень высокопоставленным глобальным операторам IRC разрешено устанавливать их, в то время как K-линии, которые в основном рассматриваются как локальное дело, оставлены на усмотрение операторов отдельного сервера в сети.
G-линии также работают немного иначе, чем K-линии. G-линии обычно устанавливаются как *@IPaddress или *@host, причем первый вариант является лучшим. Если используется опция *@host, сервер должен выполнить обратный DNS-поиск для пользователя, а затем сравнить возвращенный хост с хостами в списке G-линии. Это приводит к задержке, и, если DNS не возвращает правильные результаты, заблокированный пользователь все равно может попасть в сеть.
Z -line или zap line (также пишется Z:line ) похожа на K-line, но применяется к диапазону IP-адресов клиента и считается используемой в крайних случаях. Поскольку Z-line не нужно проверять имена пользователей (identd) или разрешенные имена хостов, ее можно применять к пользователю до того, как он отправит какие-либо данные при подключении. Таким образом, Z-line более эффективна и использует меньше ресурсов, чем K-line или G-line при запрете большого количества пользователей.
В некоторых IRC-демонах, таких как ircd-hybrid, это называется D-линией (линией запрета) или X-линией .
Z-линии иногда хранятся в файле конфигурации IRCd, хотя некоторые сети, которые обрабатывают линии через службы IRC, предпочитают хранить их в файлах конфигурации своих служб. Всякий раз, когда человек с Z-линией пытается подключиться к сети IRC, либо службы, либо демон IRC автоматически отключают клиента, часто отображая сообщение, объясняющее причину бана.
Z-линии — это вариант K-линий, которые работают примерно так же. Большинство Z-линий «награждаются» тем, кто злоупотребляет сетью в целом (в небольших сетях они чаще выдаются за отдельные инциденты).
Z-линии также работают немного иначе, чем K-линии. Z-линии обычно устанавливаются как *@IP или *@host, причем первый вариант является лучшим. Z-линии не ждут ответа ident от подключающегося пользователя, а немедленно закрывают сокет, как только IP пользователя сравнивается со списком Z-линии и обнаруживается совпадение. Если используется опция *@host, сервер должен выполнить обратный поиск DNS для пользователя, а затем сравнить возвращенный хост с хостами в списке Z-линии. Это может привести к задержкам, или если DNS не возвращает правильно, заблокированные пользователи все равно могут попасть в сеть. На самом деле опция *@host полностью противоречит намерениям использования Z-линии, и поэтому некоторые программы IRCd не разрешают ничего, кроме *@IP, с подстановочными знаками (?,*) или длинами префикса CIDR ( например, /8), разрешенными в разделе IP, чтобы блокировать целые подсети. Еще одно отличие от K-lines (которые влияют только на клиентов IRC) заключается в том, что если IP-адрес забанен, то ничто, даже другие серверы, не смогут подключиться с этого IP-адреса (или диапазона IP-адресов, в зависимости от маски бана).
Одним из преимуществ использования Z-линий по сравнению с K-линиями и G-линиями с точки зрения администратора сервера или сети является то, что Z-линия использует меньшую пропускную способность, чем K-линия, в основном потому, что она не ждет ответа идентификатора или поиска DNS .
Недостатком использования Z-line по сравнению с K-line или G-line является то, что становится сложнее запретить целых интернет-провайдеров и очень динамические IP-адреса, что часто встречается в некоторых коммутируемых и DSL- подключениях. Например, если сетевой администратор хочет запретить всех интернет-провайдеров example.com (с гипотетическими диапазонами IP-адресов 68.0.0.0 – 68.255.255.255 и 37.0.0.0 – 38.255.255.255), G-line может использовать *@*example.com, тогда как Z-line потребует *@37.*.*.*, *@38.*.*.* и *@68.*.*.* для достижения того же самого.
Z-линии также могут быть глобальными, в этом случае они называются GZ-линиями . GZ-линии работают так же, как Z-линии, за исключением того, что они распространяются на каждый сервер в сети. Некоторые демоны IRC также могут быть настроены на совместное использование Z-линий с другими серверами.
В некоторых IRCd, таких как UnrealIRCd, Q-line запрещает псевдоним или любой псевдоним, соответствующий заданному шаблону. Чаще всего это используется для запрета использования псевдонимов сервисов (таких как "X" или NickServ ) или запрета использования псевдонимов операторов IRC не-операторами. Некоторые демоны IRC могут отключать пользователей при первоначальном применении Q-line, в то время как другие принудительно меняют псевдоним или ничего не делают, пока пользователь, охваченный Q-line, не подключится повторно. Другие IRCd, такие как ircd-hybrid, используют вместо этого команду "RESV" ("reserve"), при этом буква статистики остается как Q. Команда "RESV" также может запретить использование канала.
{{cite journal}}
: Цитировать журнал требует |journal=
( помощь ){{cite journal}}
: Цитировать журнал требует |journal=
( помощь ){{cite journal}}
: Цитировать журнал требует |journal=
( помощь ){{cite journal}}
: Цитировать журнал требует |journal=
( помощь ){{cite journal}}
: Цитировать журнал требует |journal=
( помощь )