Введение

IRCd, сокращение от Internet Relay Chat daemon, — это серверное программное обеспечение, реализующее протокол IRC, что позволяет людям общаться друг с другом через Интернет (обмениваясь текстовыми сообщениями в реальном времени). Оно отличается от IRC-бота, который подключается к IRC-каналу для исходящей связи. Сервер ожидает подключения от IRC-клиентов на определённом наборе TCP-портов. Когда сервер входит в состав сети IRC, он также поддерживает одно или несколько установленных соединений с другими серверами/демонами. Изначально термин ircd относился к конкретной программе, но со временем стал использоваться как общее название для любой реализации IRC-демона. Однако оригинальная версия до сих пор распространяется под тем же именем, и эта статья рассматривает оба значения этого термина.

Версии побочного потока

В последнее время несколько IRC-демонов были написаны с нуля, такие как ithildin, InspIRCd, csircd (также разработанный Крисом Беренсом), ConferenceRoom, Microsoft Exchange Chat Service, WeIRCd или IRCPlus/IRCXPro. Эти попытки имели смешанный успех и встретили значительный скептицизм со стороны существующего сообщества разработчиков IRC. С каждым новым IRCd используется немного отличающаяся версия протокола IRC, и многие IRC-клиенты и боты вынуждены идти на компромиссы в функциональности или адаптировать свою реализацию в зависимости от сервера, к которому они подключены. Это часто делается для улучшения удобства использования, безопасности, разделения полномочий или упрощения интеграции с сервисами. Одно из наиболее распространенных и заметных различий – включение или исключение статуса полу-оператора канала (который не является обязательным согласно RFC).

Порты

Официально присвоенные номера портов: 194 ("irc"), 529 ("irc serv") и 994 ("ircs"). Однако эти порты находятся в привилегированном диапазоне (0–1024), что в Unix-подобных системах исторически означало, что для их открытия демону требовались права суперпользователя. По различным соображениям безопасности это считалось нежелательным. Наиболее распространенные порты для процесса IRCd – от 6665 до 6669, при этом 6667 является исторически сложившимся значением по умолчанию. Эти порты могут быть открыты процессом без прав суперпользователя, и они получили широкое распространение.

Связи

Для работы крупного IRC-сервера, обслуживающего более нескольких тысяч одновременных пользователей, необходимо поддерживать очень большое количество открытых TCP-соединений в течение длительного времени. Лишь немногие ircd являются многопоточными, так как практически каждое действие требует доступа (как минимум чтения и, возможно, изменения) к глобальному состоянию. Поэтому наилучшими платформами для ircd являются те, которые предоставляют эффективные механизмы для обработки огромного числа соединений в одном потоке. Linux обеспечивает такую возможность с помощью epoll, начиная с версий ядра новее 2.4.x. FreeBSD (начиная с 4.1) и OpenBSD (начиная с 2.9) предлагают kqueue. Solaris имеет /dev/poll с 7-й версии, а начиная с 10-й версии – IOCP (I/O Completion Ports). Windows поддерживает IOCP с Windows NT 3.5. Влияние этих новых интерфейсов может быть значительным. Разработчики IRCU сообщали об увеличении практической пропускной способности сервера с 10 000 до 20 000 пользователей.

TLS (Transport Layer Security) (Безопасность транспортного уровня)

Некоторые IRCd поддерживают протокол Transport Layer Security, или TLS. Для тех, которые не поддерживают его, всё ещё можно использовать SSL через Stunnel. Неофициальный, но наиболее часто используемый порт для TLS-соединений с IRCd – 6697. В последнее время, для повышения безопасности и удобства использования, разработчики различных клиентов и серверов начали разрабатывать стандарт STARTTLS, который позволяет одновременно использовать TLS и обычные текстовые соединения на одном и том же TCP-порту.

IPv4 и IPv6

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

Кластеризация

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

П10

Протокол P10 — это расширение протокола Internet Relay Chat для связи между серверами, разработанное Комитетом разработчиков Undernet для использования в их серверном программном обеспечении ircu. Он аналогичен по назначению протоколам IRCX и EFnet TS5/TS6 и реализует временные метки для ников и каналов, чтобы обрабатывать коллизии ников и "переезд" каналов при разделении сети, соответственно. Другие IRCd, использующие это расширение протокола, включают beware ircd.

ТС6

Протокол TS6 — это расширение протокола Internet Relay Chat для связи между серверами, разработанное первоначально создателями ircd ratbox. Он был усовершенствован различными IRC-программами и обладает свойством, позволяющим корректным реализациям TS6 соединяться друг с другом посредством согласования функций (feature negotiation), даже если эти функции несовместимы.

Юппе

Блокировка сервера, канала или никнейма — это практика блокировки указанного канала или никнейма на сервере или в сети, либо указанного сервера в сети. Одна из возможных версий происхождения этого термина заключается в том, что он назван в честь оператора по имени Юпитер, который получил контроль над никнеймом NickServ в EFnet. EFnet не предоставляет сервисы, такие как NickServ; Юпитер получил контроль над никнеймом, поскольку он (вместе с другими операторами) считал, что никнеймы не должны быть закреплены за пользователями. Сегодня операторы EFnet блокируют никнеймы, которые используются в качестве сервисов в других сетях. Блокировка никнейма или сервера использует тот факт, что определенные идентификаторы уникальны; используя идентификатор, пользователь получает эксклюзивную блокировку, которая не позволяет другим пользователям его использовать. Официально санкционированные блокировки также могут использовать сервисы или параметры конфигурации сервера для обеспечения блокировки, например, когда скомпрометированный сервер блокируется, чтобы предотвратить нанесение вреда сети. На практике операторы IRC теперь используют конфигурации блокировок для административного отключения каналов или никнеймов. Блокировка канала — это запрет канала, действующий на конкретном сервере, что означает, что к определенному каналу нельзя подключиться при подключении к этому серверу, но другие серверы могут разрешить пользователю присоединиться к каналу. Это способ запретить доступ к проблемным каналам.

О-линия

O-линия (часто также пишется как O:line; на IRCd, поддерживающих локальных операторов, O-линии этих операторов называются o:lines с маленькой буквы "o"), сокращение от Operator Line и происходящее от строкового конфигурационного файла оригинального IRCd, представляет собой строку кода в файле конфигурации IRC-демона, определяющую, какие пользователи могут стать операторами IRC и какие права они получают при этом. Название происходит от префикса, используемого для этой строки в оригинальном IRCd – заглавной буквы "O". O-линия указывает имя пользователя, пароль, флаги оператора и ограничения маски хоста для конкретного оператора. Сервер может содержать множество O-линий в зависимости от административных потребностей сервера и сети. Флаги оператора используются для описания предоставляемых оператору прав. В то время как одни операторы IRC могут отвечать за маршрутизацию сети, другие – за борьбу со злоупотреблениями, что определяет их потребность в различных правах. Доступные флаги оператора значительно различаются в зависимости от используемого IRC-демона. Как правило, более функциональные IRC-демоны имеют больше флагов оператора, а более традиционные – меньше. O-линия может быть настроена таким образом, чтобы статус оператора IRC можно было получить только пользователям с определенной маской хоста или IP-адресом, используя эту O-линию. Использование масок хоста и IP-адресов в O-линии требует сохранения неизменности IP-адреса, но обеспечивает дополнительный уровень безопасности.

Г-линия

Глобальная линия блокировки (также записывается как 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-линия

Z-линия или zap-линия (также записывается как Z:line) аналогична K-линии, но применяется к диапазону IP-адресов клиента и считается мерой крайней необходимости. Поскольку Z-линия не требует проверки имен пользователей (identd) или разрешенных имен хостов, она может быть применена к пользователю до того, как он отправит какие-либо данные при подключении. Таким образом, Z-линия более эффективна и потребляет меньше ресурсов, чем K-линия или G-линия при блокировке большого количества пользователей. В некоторых 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-линий (которые влияют только на IRC-клиенты) заключается в том, что если IP-адрес заблокирован, ничто, даже другие серверы, не может подключаться с этого IP-адреса (или диапазона IP-адресов, в зависимости от банмаски). Одним из преимуществ использования Z-линий по сравнению с K-линиями и G-линиями, с точки зрения администратора сервера или сети, является то, что Z-линия использует меньше пропускной способности, чем K-линия, главным образом потому, что она не ждет ответа ident или DNS-поиска. Недостатком использования Z-линии по сравнению с K-линией или G-линией является то, что становится сложнее блокировать целые ISP и очень динамические IP-адреса, часто используемые в некоторых dial-up и DSL-соединениях. Например, если администратор сети хочет заблокировать весь ISP example.com (с гипотетическими диапазонами IP-адресов 68.0.0.0 – 68.255.255.255 и 37.0.0.0 – 38.255.255.255), G-линия может использовать *@*example.com, в то время как Z-линии потребуется *@37.*.*.*, *@38.*.*.* и *@68.*.*.* для достижения того же результата. Z-линии также могут быть глобальными, в этом случае они называются GZ-линиями. GZ-линии работают так же, как и Z-линии, за исключением того, что они распространяются на все серверы в сети. Некоторые IRC-демоны также могут быть настроены на совместное использование Z-линий с другими серверами.

Q-линия

На некоторых IRCd, таких как UnrealIRCd, Q-линия запрещает определенное прозвище или любые прозвища, соответствующие заданному шаблону. Чаще всего это используется для запрета использования прозвищ, зарезервированных для сервисов (например, "X" или NickServ), или для запрета использования прозвищ IRC-операторов пользователями, не имеющими соответствующих прав. Некоторые IRC-демоны могут отключать пользователей при применении Q-линии, в то время как другие заставляют их сменить прозвище или не предпринимают никаких действий, пока пользователь, затронутый Q-линией, не переподключится. Другие IRCd, такие как ircd hybrid, вместо этого используют команду "RESV" ("reserve"), при этом буква статистики остается как Q. Команда "RESV" также может запретить использование канала.