IRCd (Internet Relay Chat daemonの略)は、IRCプロトコルを実装するサーバーソフトウェアであり、インターネットを介して人々が互いに会話すること(リアルタイムでテキストメッセージを交換すること)を可能にします。 [ 1 ] [ 2 ]これは、IRCチャンネルにアウトバウンド接続するIRCボットとは異なります。
サーバーは、一連のTCP ポートでIRC クライアントからの接続をリッスンします[ 3 ] [ 4 ]。サーバーが IRC ネットワークの一部である場合、他のサーバー/デーモンとの確立された接続を 1 つ以上維持します[ 5 ] 。
ircdという用語は元々は単一のソフトウェアのみを指していましたが、[ 6 ]最終的にはIRCデーモンのあらゆる実装を指す一般的な用語となりました。[ 7 ] [ 8 ]ただし、元のバージョンは現在も同じ名前で配布されており、[ 9 ]この記事では両方の使用法について説明します。
オリジナルの IRCd は「ircd」として知られており、 1988 年にJarkko Oikarinen (IRC の WiZ)によって作成されました。 [ 10 ] [ 11 ]彼は Markku Savela (IRC の msa) など、2.2+msa リリースなどを手伝った多くの人々から助けを受けました。
IRCの初期バージョンには、名前付きチャンネルやチャンネルオペレーターなど、今日では当たり前となっている多くの機能がありませんでした。チャンネルは番号で呼ばれており(例えば、チャンネル4、チャンネル57など) 、チャンネルトピックはチャンネル内で行われる会話の種類を表していました。その名残の一つとして、チャンネル0に参加すると、クライアントは現在参加しているすべてのチャンネルから退出するという機能があります。「CHANNEL 0」は、現在のチャンネルから退出するための元のコマンドでした。
IRCにおける最初の大きな変更点は、バージョン2.5で名前付きチャンネル(「+channels」)が追加されたことでした。「+channels」は後にバージョン2.7で「#channels」に置き換えられ、数値チャンネルは完全に削除され、チャンネル禁止(モード+b)が実装されました。
バージョン2.7あたりで、小規模ながらも注目すべき論争があり、それがircdのUndernet版であるircuの誕生につながった。
irc2.8では、「&channels」(ネットワーク全体ではなく、現在のサーバー上にのみ存在するチャネル)と「!channels」(ユーザーが「ネットスプリットに乗る」ことでチャネルを悪用できる多くの方法から理論的に安全なチャネル)が追加され、現在のほぼすべての実装のベースラインリリースとなっています。
2.8 の頃にニックとチャネル遅延の概念が登場しました。これは、乗っ取りやスプリットライディングなどの悪質な行為を抑制するために設計されたシステムです。しかし、現代の IRC (EFnet、DALnet、Undernet など) の大多数はこのシステムに同意しませんでした。そのため、2.8 は TS (タイムスタンプ) と呼ばれる反対の理論を使用する複数の異なるデーモンに分岐しました。TS は、ネットワーク上の各チャネルまたはニックネームに固有のタイムスタンプを保存し、どれが「正しい」ものかを判定するものです。
タイムスタンプ自体は、設計上の様々な問題を修正するために何度か改訂されてきました。そのようなプロトコルの最新バージョンは以下のとおりです。
クライアントとサーバー間のプロトコルは少なくとも機能的には類似していますが、サーバー間のプロトコルは大きく異なり(TS5、P10、ND/CDサーバープロトコルは互換性がありません)、2つの異なるIRCサーバーの実装を「リンク」することは非常に困難です。例えば、2.10サーバーとTS5サーバーをリンクするための「ブリッジ」サーバーも存在しますが、これらのサーバーは各プロトコルのどの部分を使用できるかに制限がある場合が多く、広く普及していません。
バージョン2.8に基づく主なリリースは以下のとおりです。
元のコードベースは、主にIRCnetネットワークでの使用を目的として開発が続けられた。新しいサーバー間プロトコルは、1998年にリリースされたバージョン2.10と、2004年に初めてリリースされ、 2007年現在も使用されているバージョン2.11で導入された。このデーモンはIRCnetで使用されており、 http://www.irc.org/ftp/irc/server/で見つけることができます。オリジナルのircdはフリーソフトウェアであり、GNU General Public Licenseに基づいてライセンスされています。この開発ラインは、RFC 1459以降にリリースされた4つのIRC RFCを生み出し、このサーバープロトコルのみを文書化しています。
2.8.21+CSとHybrid IRCdはEFnetで引き続き使用されており、 2004年時点ではircd-ratbox(ircd-hybridの派生版)も使用されている。最も人気が高い。

最近では、ithildin [ 12 ]、InspIRCd [ 13 ]、csircd (これも Chris Behrens によって書かれた)、ConferenceRoom [ 14 ]、Microsoft Exchange Chat Service、WeIRCd [ 15 ] 、または IRCPlus/IRCXPro [ 16 ]など、いくつかの IRC デーモンがゼロから作成されました。
これらの試みは成功と失敗が入り混じっており、既存のIRC開発コミュニティからは大きな懐疑論が向けられています。新しいIRCdが作成されるたびに、IRCプロトコルのわずかに異なるバージョンが使用され、[ 17 ] [ 18 ]多くのIRCクライアントやボットは、接続先のサーバーに基づいて機能を妥協したり、実装を変更したりすることを余儀なくされています。[ 19 ]これらは多くの場合、使いやすさ、セキュリティ、権限の分離、またはサービスとの統合の容易さを向上させる目的で実装されています。おそらく最も一般的で目立つ違いの1つは、ハーフオペレーターチャネルオペレーターステータスの包含または除外です(これはRFCの要件ではありません)。
公式に割り当てられたポート番号は 194 ("irc")、529 ("irc-serv")、および 994 ("ircs") です。[ 20 ]ただし、これらのポートは特権範囲 (0~1024) にあり、 Unix ライクなシステムでは、デーモンがこれらのポートを開くには従来スーパーユーザー権限が必要でした。さまざまなセキュリティ上の理由から、これは以前は望ましくありませんでした。
IRCd プロセスの一般的なポートは 6665 ~ 6669 で、6667 が歴史的にデフォルトでした。[ 21 ]これらのポートはスーパーユーザー以外のプロセスでも開くことができ、広く使用されるようになりました。
数千人以上の同時接続ユーザーを抱える大規模なIRCサーバーを運用するには、非常に多くのTCP接続を長時間維持する必要があります。ほぼすべての操作でグローバル状態へのアクセス(少なくとも読み取り、場合によっては変更)が必要となるため、マルチスレッド対応のIRCサーバーはごくわずかです。
その結果、ircdsに最適なプラットフォームは、単一のスレッドで膨大な数の接続を効率的に処理するメカニズムを提供するものとなります。Linuxは、カーネルシリーズ2.4.x以降でepollという形でこの機能を提供しています。FreeBSD (4.1以降)とOpenBSD(2.9以降)はkqueueを提供しています。Solarisはバージョン7から/dev/pollを備えており、バージョン10以降はIOCP(I/O完了ポート)を備えています。WindowsはWindows NT 3.5以降IOCPをサポートしています。これらの新しいインターフェースによってもたらされる違いは劇的です。IRCUの開発者は、サーバーあたりの実効容量が10,000ユーザーから20,000ユーザーに増加したと述べています。
一部の IRCd はトランスポート層セキュリティ(TLS) をサポートしていますが、サポートしていない場合でも、Stunnelを介して SSL を使用することは可能です。非公式ですが、TLS IRCd 接続で最もよく使用されるポートは6697です。最近では、セキュリティ強化とユーザビリティ強化として、さまざまなクライアントおよびサーバーの開発者が、TLS とプレーンテキスト接続を同じ TCP ポートで共存できるようにするSTARTTLS 標準[ 22 ]として知られる標準の草案作成を開始しました。
IRCデーモンはIPv4をサポートしており、一部はIPv6もサポートしています。一般的に、IRCへのIPv6接続とIPv4接続の違いは純粋に学術的なものであり、どちらのプロトコルを使用してもサービスはほぼ同じように動作します。
大規模なIRCネットワークは、水平スケーリングのために複数のサーバーで構成されています。これらの目的のために、いくつかのIRCプロトコル拡張機能があります。[ 23 ]
IRCX(Internet Relay Chat eXtensions)は、マイクロソフトが開発したIRCプロトコルの拡張機能です。
P10プロトコルは、Undernet Coder Committee が ircu サーバー ソフトウェアで使用するために開発した、サーバー間通信用のインターネット リレー チャットプロトコルの拡張です。その目的はIRCXおよび EFnet TS5/TS6 プロトコルと似ており、ニックの衝突とネットスプリット チャネル ライディングをそれぞれ処理するために、ニックとチャネルのタイム スタンプを実装しています。このプロトコル拡張を使用する他の IRCd には、beware ircdなどがあります。[ 23 ] [ 24 ] [ 25 ]
TS6プロトコルは、サーバー間通信のためのインターネットリレーチャット(IRC)プロトコルの拡張機能であり、当初はircd-ratboxの開発者によって開発されました。様々なIRCソフトウェアによって拡張されており、TS6の適切な実装であれば、機能が異なっていても機能ネゴシエーションを使用して相互にリンクできるという特徴があります。
サーバー、チャンネル、またはニックネームをJupingするとは、サーバーまたはネットワーク上の当該チャンネルまたはニックネーム、あるいはネットワーク上の当該サーバーをブロックする行為を指します。この用語が生まれた理由として考えられるのは、EFnetでニックネームNickServを支配下に置いたJupiterという名のオペレーターにちなんで名付けられたというものです。[ 26 ] EFnetはNickServのようなサービスを提供していません。Jupiterは(他のオペレーターと同様に)ニックネームは所有されるべきではないと考えていたため、ニックネームを支配下に置きました。今日、EFnetオペレーターは、他のネットワークでサービスとして使用されているニックネームをJupingしています。
ニックネームやサーバーニックネームは、特定の識別子が一意であるという事実を利用します。識別子を使用することで、他のユーザーが使用できないようにする排他的なロックを取得できます。
公式に承認されたjupeは、jupeを強制するためにサービスやサーバー構成オプションを利用することもあります。例えば、侵害されたサーバーがネットワークに損害を与えるのを防ぐためにjupeを実行する場合などです。
実際には、IRC オペレーターは現在、jupe 設定を使用して、管理上、チャンネルやニックネームを利用できないようにしています。[ 27 ]チャンネル jupe は、サーバー固有のチャンネル禁止を指し、特定のサーバーに接続しているときは特定のチャンネルに参加できませんが、他のサーバーではユーザーがチャンネルに参加できる場合があります。これは、問題のあるチャンネルへのアクセスを禁止する方法です。
Oライン( O:lineと綴られることも多い。ローカル オペレーターをサポートする IRCd では、O ラインは小文字の O を使用したo:linesと呼ばれる) はOperator Lineの略で、元の IRCd の行ベースの設定ファイルから派生したもので、IRC デーモンの設定ファイル内のコード行であり、どのユーザーがIRC オペレーターになれるか、またオペレーターになったときにどのような権限が付与されるかを決定します。名前は、元の IRCd でこの行に使用されていた接頭辞、大文字の O に由来します。O ラインは、特定のオペレーターのユーザー名、パスワード、オペレーター フラグ、およびホスト マスクの制限を指定します。サーバーは、サーバーとネットワークの管理上のニーズに応じて、多くの O ラインを持つことができます。[ 28 ]
オペレーターフラグは、オペレーターに付与される権限を説明するために使用されます。一部のIRCオペレーターはネットワークルーティングを担当するかもしれませんが、他のオペレーターはネットワークの悪用を担当する可能性があり、特定の権限の必要性が異なります。[ 4 ]使用可能なオペレーターフラグは、使用されているIRCデーモンによって大きく異なります。一般的に、機能豊富なIRCデーモンはオペレーターフラグが多く、より伝統的なIRCデーモンは少なくなります。
Oラインを設定することで、特定のホストマスクまたはIPアドレスを持つユーザーのみが、そのOラインを使用してIRCオペレーターのステータスを取得できるようにすることもできます。OラインでホストマスクとIPアドレスを使用する場合、IPアドレスは変更できませんが、セキュリティが強化されます。
ユーザーが「k-line」 ( kill lineの略)されると、そのユーザーは特定のサーバーから一定期間または永久に追放されます。一度追放されたユーザーは、そのサーバーに再びアクセスすることはできません。これは、サーバーのIRCデーモン設定ファイルに「K」という文字で始まる行として記録されるため、「K-line」と呼ばれます。
ircd-hybridとその派生版を含む一部のIRCデーモンは、Kラインをネットワーク上の他のサーバーの一部またはすべてに伝播するように設定できます。このような設定では、KラインはGラインと同様に、実質的にグローバルなアクセス禁止措置となります。
接続が切断される正確な理由はケースによって異なりますが、通常は、切断対象のクライアントまたはユーザーの何らかの側面に関係しています。
Kラインに関連するネットワーク「ライン」は他にも多数存在します。最新のIRCデーモンでは、サーバー設定ファイルへのアクセスが通常必要とされない通常の運用時に、IRCオペレーターがこれらのラインを設定することも可能です。
Gライン、またはグローバルキルライン( G:lineとも表記される)とは、ユーザーに適用されるグローバルなネットワーク禁止措置のことです。この用語はUndernetに由来しますが、 DALnetではAKillと呼ばれる同様の概念が使用されていました。
GラインはIRCdの設定ファイルに保存される場合もありますが、 IRCサービスを通じてKラインを処理するネットワークの中には、サービスの設定ファイルに保存することを好むものもあります。Gラインが設定されたユーザーがIRCネットワークに接続しようとすると、サービスまたはIRCデーモンが自動的にクライアントを切断し、多くの場合、接続禁止の理由を説明するメッセージを表示します。
GラインはKラインの一種で、動作原理はほぼ同じですが、Kラインはネットワーク上の1つのサーバー上のクライアントのみを切断します。Gラインは通常、あるサーバーでKラインを受け取ったにもかかわらず、別のサーバー経由で接続してネットワークを悪用し続けるユーザーに適用されます。Gラインは、多くの場合、極端な措置とみなされ、問題のあるユーザーを説得しようとあらゆる努力を尽くしても改善が見られない場合に、繰り返し悪用される場合にのみ使用されます。そのため、特に大規模なネットワークでは、多くの場合、非常に高いランクのグローバルIRCオペレーターのみがGラインを設定することが許可されています。一方、主にローカルな問題とみなされるKラインは、ネットワーク内の個々のサーバーのオペレーターに委ねられています。
GラインはKラインとは若干動作が異なります。Gラインは通常、*@IPアドレスまたは*@ホストとして設定されますが、前者のほうが望ましいです。*@ホストオプションを使用する場合、サーバーはユーザーのDNS逆引き検索を実行し、返されたホストをGラインリスト内のホストと比較する必要があります。これにより遅延が発生し、DNSが正しい結果を返さない場合、禁止されたユーザーがネットワークに接続できてしまう可能性があります。
Zライン(またはZ:lineとも表記)はKラインに似ていますが、クライアントのIPアドレス範囲に適用され、極端な場合に使用されると考えられています。Zラインはユーザー名(identd)や解決済みホスト名をチェックする必要がないため、接続時にユーザーがデータを送信する前に適用できます。したがって、Zラインは、多数のユーザーをブロックする場合、KラインやGラインよりも効率的で、使用するリソースも少なくて済みます。
ircd-hybrid などの一部の IRC デーモンでは、これは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 以外の設定は許可されず、 IP セクションではワイルドカード(?,*) またはCIDR プレフィックス長(例: /8)を使用してサブネット全体をブロックできます。 Kライン(IRCクライアントのみに影響する)とのもう1つの違いは、IPアドレスが禁止された場合、他のサーバーを含め、何もそのIPアドレス(または、禁止マスクによってはIPアドレスの範囲)から接続できなくなることです。
サーバー管理者やネットワーク管理者の視点から見ると、ZラインをKラインやGラインよりも使用する利点の1つは、ZラインがKラインよりも帯域幅を少なく使用できることです。これは主に、Zラインがident応答やDNSルックアップを待つ必要がないためです。
K ラインや G ラインに比べて Z ラインを使用するデメリットは、ダイヤルアップやDSL接続でよく見られるような、ISP 全体や非常に動的な IP アドレスをブロックするのが難しくなることです。たとえば、ネットワーク管理者が 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ラインを共有するように設定されている場合もあります。
UnrealIRCd などの一部の IRC d では、Q 行によってニックネーム、または指定されたパターンに一致するニックネームの使用が禁止されます。これは、サービスニックネーム (「X」やNickServなど) の使用を禁止したり、非オペレーターによるIRC オペレーターニックネームの使用を禁止したりする場合が最もよく使用されます。一部の IRC デーモンは、Q 行を最初に適用したときにユーザーを切断する場合がありますが、ニックネームの変更を強制したり、Q 行の対象となるユーザーが再接続するまで何も行わないものもあります。ircd-hybrid などの他の IRC d では、代わりに「RESV」(「reserve」)コマンドを使用し、統計文字は Q のままです。「RESV」コマンドは、チャンネルの使用を禁止することもできます。
{{cite journal}}:ジャーナルを引用するには|journal=(ヘルプ){{cite journal}}:ジャーナルを引用するには|journal=(ヘルプ){{cite journal}}:ジャーナルを引用するには|journal=(ヘルプ){{cite journal}}:ジャーナルを引用するには|journal=(ヘルプ){{cite journal}}:ジャーナルを引用するには|journal=(ヘルプ)