IRCd - IRCd

IRCd , skrót od Internet Relay Chat demona , jest oprogramowanie serwera , który implementuje IRC protokół , umożliwiając ludziom rozmawiać ze sobą za pośrednictwem Internetu (wymiana tekstowych wiadomości w czasie rzeczywistym). Różni się od bota IRC, który łączy się z kanałem IRC.

Serwer nasłuchuje połączeń od klientów IRC na zestawie portów TCP . Gdy serwer jest częścią sieci IRC, utrzymuje również jedno lub więcej ustanowionych połączeń z innymi serwerami/demonami.

Termin ircd pierwotnie odnosił się tylko do jednego kawałka oprogramowania, ale ostatecznie stał się ogólnym odniesieniem do dowolnej implementacji demona IRC. Jednak oryginalna wersja jest nadal rozpowszechniana pod tą samą nazwą, a w tym artykule omówiono oba zastosowania.

Historia

Oryginalny IRCd był znany jako „ircd”, a jego autorem był Jarkko Oikarinen (WiZ na IRC) w 1988 roku. Otrzymał pomoc od wielu innych, takich jak Markku Savela (msa na IRC), który pomógł z 2,2+msa zwolnienie itp.

W swoich pierwszych wersjach IRC nie miał wielu funkcji, które są dziś uważane za oczywiste, takich jak nazwane kanały i operatorzy kanałów . Kanały były ponumerowane – na przykład kanał 4 i kanał 57 – a temat kanału opisywał rodzaj rozmowy, która miała miejsce w kanale. Jedną z zalet jest to, że dołączenie do kanału 0 powoduje, że klient opuszcza wszystkie kanały, na których jest obecnie: "CHANNEL 0" jest oryginalnym poleceniem opuszczenia bieżącego kanału.

Pierwszą poważną zmianą w IRC w wersji 2.5 było dodanie nazwanych kanałów – „+channels”. "+kanały" zostały później zastąpione przez "#kanały" w wersji 2.7, kanały numeryczne zostały całkowicie usunięte i wprowadzono bany kanałów (tryb +b).

Wokół wersji 2.7 toczył się mały, ale godny uwagi spór, który doprowadził do powstania ircu – rozwidlenia Undernet of ircd.

irc2.8 dodanej „i kanały” (te, które istnieją tylko na bieżącym serwerze, zamiast całej sieci) i! „kanały” (te, które są teoretycznie bezpieczna od cierpienia z wielu sposobów, które użytkownik może wykorzystać kanał przez " jazda a netsplit ") i jest podstawową wersją, z której pochodzą prawie wszystkie obecne implementacje.

Około 2.8 pojawiła się koncepcja nicka i opóźnienia kanału, systemu zaprojektowanego, aby pomóc w ograniczeniu nadużyć, takich jak przejęcia i jazda split. Nie zostało to uzgodnione przez większość współczesnych IRC (EFnet, DALnet, Undernet itp.) – i dlatego 2.8 zostało rozwidlone na wiele różnych demonów przy użyciu przeciwstawnej teorii znanej jako TS – lub znacznika czasu, który przechowywał unikalny znacznik czasu z każdym kanałem lub pseudonimem w sieci, aby zdecydować, który z nich jest „właściwy” do zachowania.

Sam znacznik czasu był kilkakrotnie poprawiany, aby naprawić różne problemy w jego projekcie. Najnowsze wersje takich protokołów to:

  • TS6 protokół, który jest wykorzystywany przez sieci EFNET i serwery oparte między innymi hybrydowe i Ratbox
  • protokół P10 , który jest używany przez Undernet i serwerów ircu oparty.

Podczas gdy protokoły klient-serwer są przynajmniej funkcjonalnie podobne, protokoły serwer-serwer znacznie się różnią (protokoły serwera TS5, P10 i ND/CD są niekompatybilne), co bardzo utrudnia „powiązanie” dwóch oddzielnych implementacji Serwer IRC. Istnieją pewne serwery „pomostowe”, które umożliwiają łączenie na przykład serwerów 2.10 z serwerami TS5, ale często towarzyszą im ograniczenia dotyczące tego, które części każdego protokołu mogą być używane, i nie są szeroko stosowane.

Znaczące wydania oparte na 2.8 obejmowały:

  • 2.8.21+CS, opracowany przez Chrisa Behrensa ( Comstud )
  • 2,8+, zestaw łatek Tanera Halicioglu, który później stał się
    • Hybrid IRCd, pierwotnie opracowany przez Jona Lusky'ego ( Rodder ) i Diane Bruce ( Dianora ) jako 2.8/hybrid, później dołączył duży zespół programistów.
  • 2.9, 2.10, 2.11, ... kontynuuje rozwój oryginalnego kodu,

Pierwotna baza kodu była nadal rozwijana głównie do użytku w sieci IRCnet . Nowe protokoły serwer-serwer zostały wprowadzone w wersji 2.10, wydanej w 1998 roku, oraz w 2.11, wydanej po raz pierwszy w 2004 roku i aktualnej w 2007 roku. Demon ten jest używany przez IRCnet i można go znaleźć pod adresem http://www. irc.org/ftp/irc/server/ Oryginalny ircd jest wolnym oprogramowaniem na licencji GNU General Public License . Ta linia rozwojowa wyprodukowała 4 IRC RFC wydane po RFC 1459, które dokumentują wyłącznie ten protokół serwera.

2.8.21+CS i Hybrid IRCd są nadal używane w sieci EFnet , z najpopularniejszym od 2004 r. ircd-ratbox (pochodną ircd-hybrid).

Wersje boczne

Schemat wyprowadzeń i relacji dla typowych implementacji IRCd.

Niedawno napisano od podstaw kilka demonów IRC, takich jak ithildin, InspIRCd, csircd (również napisany przez Chrisa Behrensa), ConferenceRoom, Microsoft Exchange Chat Service, WeIRCd lub IRCPlus/IRCXPro.

Próby te spotkały się z mieszanym sukcesem i dużą dozą sceptycyzmu ze strony istniejącej społeczności programistów IRC. Z każdym nowym IRCd używana jest nieco inna wersja protokołu IRC, a wiele klientów IRC i botów jest zmuszonych do kompromisu w zakresie funkcji lub różnicowania ich implementacji w zależności od serwera, z którym są połączone. Są one często wdrażane w celu poprawy użyteczności, bezpieczeństwa, rozdziału uprawnień, czy łatwości integracji z usługami . Prawdopodobnie jedną z najczęstszych i widocznych różnic jest włączenie lub wyłączenie statusu operatora kanału half-op (co nie jest wymagane w RFC).

Cechy

Porty

Oficjalnie przypisane numery portów to 194 ("irc"), 529 ("irc-serv") i 994 ("ircs"). Jednak te porty znajdują się w uprzywilejowanym zakresie (0-1024), co w systemie uniksowym oznacza, że ​​demon historycznie musiałby mieć uprawnienia superużytkownika , aby je otworzyć. Z różnych względów bezpieczeństwa było to kiedyś niepożądane.

Typowe porty dla procesu IRCd to 6665 do 6669, przy czym 6667 jest historyczną wartością domyślną. Porty te mogą być otwierane przez proces bez uprawnień administratora i stały się one szeroko stosowane.

Znajomości

Uruchomienie dużego serwera IRC, który ma więcej niż kilka tysięcy jednoczesnych użytkowników, wymaga utrzymywania bardzo dużej liczby otwartych połączeń TCP przez długi czas. Bardzo niewiele ircd jest wielowątkowych, ponieważ prawie każda akcja wymaga dostępu (przynajmniej odczytu i ewentualnie modyfikacji) stanu globalnego.

W rezultacie najlepsze platformy dla ircd to te, które oferują wydajne mechanizmy obsługi ogromnej liczby połączeń w jednym wątku. Linux oferuje tę możliwość w postaci epoll , w wersjach jądra nowszych niż 2.4.x. FreeBSD (od 4.1) i OpenBSD (od 2.9) oferuje kqueue . Solaris ma /dev/poll od wersji 7, a od wersji 10 ma IOCP (porty zakończenia I/O). Windows obsługuje IOCP od Windows NT 3.5. Różnica, jaką dają te nowe interfejsy, może być dramatyczna. Programiści IRCU wspomnieli o zwiększeniu praktycznej pojemności serwera z 10 000 do 20 000 użytkowników.

TLS (Zabezpieczenia warstwy transportowej)

Niektóre IRCd obsługują Transport Layer Security lub TLS, dla tych, którzy tego nie robią, nadal można używać SSL przez Stunnel . Nieoficjalnym, ale najczęściej używanym portem dla połączeń TLS IRCd jest 6697 . Ostatnio, jako ulepszenie bezpieczeństwa i ulepszenie użyteczności, różni autorzy klientów i serwerów rozpoczęli opracowywanie standardu znanego jako standard STARTTLS, który pozwala na współistnienie połączeń TLS i zwykłego tekstu na tym samym porcie TCP.

IPv4 i IPv6

Demony IRC obsługują IPv4 , a niektóre obsługują również IPv6 . Ogólnie rzecz biorąc, różnica między połączeniami IPv6 i IPv4 z IRC jest czysto akademicka, a usługa działa w podobny sposób za pośrednictwem obu protokołów.

Grupowanie

Duże sieci IRC składają się z wielu serwerów do celów skalowania poziomego . Istnieje kilka rozszerzeń protokołu IRC do tych celów.

IRCX

IRCX (Internet Relay Chat eXtensions) to rozszerzenie protokołu IRC opracowanego przez Microsoft

P10

P10 protokół jest rozszerzeniem Internet Relay Chat protokołu dla serwera do komunikacji między serwerami opracowanych przez Coder Komitetu Undernet do wykorzystania w ich oprogramowaniu serwera ircu. Jest podobny do protokołów IRCX i EFnet TS5 /TS6 i implementuje znaczniki czasu nicków i kanałów w celu obsługi odpowiednio kolizji nicków i przełączania kanałów netsplit. Inne IRCd, które wykorzystują to rozszerzenie protokołu, to uważaj na ircd .

TS6

TS6 protokół jest rozszerzeniem Internet Relay Chat protokołu dla serwera do komunikacji między serwerami opracowanych pierwotnie przez twórców IRCD-ratbox. Została rozszerzona o różne oprogramowanie IRC i posiada funkcję, dzięki której właściwe implementacje TS6 mogą łączyć się ze sobą za pomocą negocjacji funkcji — nawet jeśli funkcje są odmienne.

Konfiguracja

Jupe

Juping serwera, kanału lub pseudonimu odnosi się do praktyki blokowania wspomnianego kanału lub pseudonimu na serwerze lub sieci lub wspomnianego serwera w sieci. Jednym z możliwych wyjaśnień, w jaki sposób powstał ten termin, jest to, że nosi imię opery o imieniu Jupiter, który przejął kontrolę nad pseudonimem NickServ w EFnet . EFnet nie oferuje usług takich jak NickServ; Jupiter przejął kontrolę nad pseudonimem, ponieważ (wśród innych operatorów) nie wierzył, że pseudonimy powinny być własnością. Obecnie EFnet obsługuje pseudonimy jupe, które są używane jako usługi w innych sieciach.

Pseudonim lub serwer jupe wykorzystuje fakt, że niektóre identyfikatory są unikalne; za pomocą identyfikatora uzyskuje się wyłączną blokadę, która uniemożliwia innym użytkownikom korzystanie z niego.

Oficjalnie sankcjonowane jupe mogą również wykorzystywać usługi lub opcje konfiguracji serwera, aby wymusić jupe, na przykład gdy zhakowany serwer jest juped, aby zapobiec uszkodzeniu sieci.

W praktyce operatorzy IRC używają teraz konfiguracji jupe, aby administracyjnie uniemożliwić dostęp do kanałów lub pseudonimów. Kanał jupe odnosi się do specyficznego dla serwera bana na kanał, co oznacza, że ​​nie można dołączyć do określonego kanału po połączeniu z określonym serwerem, ale inne serwery mogą zezwolić użytkownikowi na dołączenie do kanału. Jest to sposób na zablokowanie dostępu do problematycznych kanałów.

O-line

Linia O (często pisana również jako O:line ; na IRCds, które obsługują operatory lokalne, te O-linie są nazywane o:lines z małą literą O), skrócone z Operator Line i wyprowadzone z linii opartej na plik konfiguracyjny oryginalnego IRCd, to linia kodu w pliku konfiguracyjnym demona IRC, która określa, którzy użytkownicy mogą zostać operatorami IRC i jakie uprawnienia uzyskują po wykonaniu tej czynności. Nazwa pochodzi od prefiksu używanego dla linii w oryginalnym IRCd, dużej litery O. Linia O określa nazwę użytkownika, hasło, flagi operatora i ograniczenia maski hosta dla konkretnego operatora. Serwer może mieć wiele linii O w zależności od potrzeb administracyjnych serwera i sieci.

Flagi operatora są używane do opisywania uprawnień, które operator otrzymuje. Podczas gdy niektórzy operatorzy IRC mogą odpowiadać za routing w sieci, inni mogą odpowiadać za nadużycia w sieci, co powoduje, że ich zapotrzebowanie na pewne uprawnienia jest inne. Dostępne flagi operatora różnią się znacznie w zależności od używanego demona IRC. Ogólnie rzecz biorąc, bardziej bogate w funkcje demony IRC mają zwykle więcej flag operatora, a bardziej tradycyjne demony IRC mają ich mniej.

O-line można również ustawić tak, aby tylko użytkownicy określonej maski hosta lub adresu IP mogli uzyskać status operatora IRC przy użyciu tej linii O-line. Korzystanie z masek hostów i adresów IP w linii O wymaga, aby adres IP pozostał taki sam, ale zapewnia dodatkowe bezpieczeństwo.

Linia K

Kiedy użytkownik jest k-line (skrót od kill line ), użytkownik zostaje zbanowany z danego serwera, na określony czas lub na stałe. Gdy użytkownik zostanie zbanowany, nie może wrócić na ten serwer. Jest to zapisywane jako wiersz w pliku konfiguracyjnym demona IRC serwera poprzedzony literą „K”, stąd „K-line”.

Niektóre demony IRC, w tym ircd-hybrid i jego potomkowie, mogą być skonfigurowane do propagacji linii K do niektórych lub wszystkich innych serwerów w sieci. W takiej konfiguracji linie K są praktycznie globalnymi zakazami podobnymi do linii G.

Chociaż dokładny powód rozłączenia różni się w zależności od przypadku, zwykłe przyczyny dotyczą pewnego aspektu klienta lub użytkownika, przeciwko któremu zostało wydane.

Zachowanie użytkownika
K-linie mogą być podawane z powodu niewłaściwego zachowania użytkownika, takiego jak „zderzanie się z pseudonimami”, tryb „hacking”, zalewanie wielu kanałów, nękanie innych użytkowników za pomocą funkcji prywatnych wiadomości , „ spamowanie ” itp. lub w przypadek starszych sieci bez znaczników czasu, split ride , których nie można skorygować za pomocą samych uprawnień operatora kanału .
Oprogramowanie klienckie
Niektóre demony IRC mogą być skonfigurowane do skanowania w poszukiwaniu wirusów lub innych luk w klientach łączących się z nimi i będą reagować na różne sposoby w zależności od wyniku. Nieaktualne i niezabezpieczone oprogramowanie klienckie może być blokowane na przykład w celu ochrony innych użytkowników sieci przed lukami w zabezpieczeniach. Niektóre sieci rozłączają klientów działających na/za pośrednictwem otwartych serwerów proxy lub z niezabezpieczonym serwerem internetowym.
Lokalizacja geograficzna
Sieć IRC obsługująca wiele serwerów w różnych lokalizacjach będzie próbowała zmniejszyć odległość między klientem a serwerem. Często osiąga się to poprzez odłączenie (i/lub zablokowanie) klientów z odległych lokalizacji na rzecz lokalnych.

Istnieje wiele innych „linii” sieciowych związanych z linią K. Nowoczesne demony IRC pozwolą również operatorom IRC ustawić te linie podczas normalnej pracy, gdzie dostęp do pliku konfiguracyjnego serwera nie jest rutynowo potrzebny.

Linia G

G-liniowy lub globalna linia kill (również napisany G: linia ) jest globalną sieć zakaz stosuje się do użytkownika; termin pochodzi z Undernet, ale w DALnet zastosowano podobną koncepcję znaną jako AKill .

Linie G są czasami przechowywane w pliku konfiguracyjnym IRCd, chociaż niektóre sieci obsługujące linie K za pośrednictwem usług IRC wolą przechowywać je w plikach konfiguracyjnych swoich usług. Za każdym razem, gdy osoba z G-line próbuje połączyć się z siecią IRC, usługi lub demon IRC automatycznie rozłączają klienta, często wyświetlając komunikat wyjaśniający powód zakazu.

Linie G to wariant linii K, które działają w bardzo podobny sposób, z wyjątkiem tego, że linie K rozłączają tylko klientów na jednym serwerze sieci. Linie G są zwykle stosowane do użytkownika, który otrzymał linię K na jednym serwerze, ale nadal nadużywa sieci, łącząc się za pośrednictwem innego serwera. Linie G są często uważane za środek ekstremalny, który należy stosować tylko w przypadku powtarzających się nadużyć, gdy podejmowano rozległe próby przekonywania obraźliwego użytkownika. Dlatego też, zwłaszcza w większych sieciach, często tylko globalni operatorzy IRC o bardzo wysokich rangach mogą je ustawiać, podczas gdy linie K, które w większości uważane są za sprawę lokalną, pozostawia się operatorom pojedynczego serwera w sieci.

Linie G również działają nieco inaczej niż linie K. G-linie są zazwyczaj ustawione jako *@IPaddress lub *@host, przy czym pierwsza z nich jest lepszą opcją. Jeśli użyto opcji *@host, serwer musi przeprowadzić odwrotne wyszukiwanie DNS na użytkowniku, a następnie porównać zwrócony host z hostami na liście G-line. Powoduje to opóźnienie, a jeśli DNS nie zwraca poprawnych wyników, zbanowany użytkownik może nadal uzyskać dostęp do sieci.

Linia Z

Linia Z lub linia zap (również zapisywana Z:line ) jest podobna do linii K, ale jest stosowana do zakresu adresów IP klienta i jest uważana za używaną w ekstremalnych przypadkach. Ponieważ linia Z nie musi sprawdzać nazw użytkowników (identd) ani rozwiązanych nazw hostów, można ją zastosować do użytkownika przed wysłaniem jakichkolwiek danych po połączeniu. Dlatego linia Z jest bardziej wydajna i zużywa mniej zasobów niż linia K lub linia G podczas blokowania dużej liczby użytkowników.

W niektórych daemonów IRC jak IRCD hybrydowego, to jest nazywany linii D (odmowa linii) lub X-Line .

Linie Z są czasami przechowywane w pliku konfiguracyjnym IRCd, chociaż niektóre sieci obsługujące linie za pośrednictwem usług IRC wolą przechowywać je w plikach konfiguracyjnych swoich usług. Za każdym razem, gdy osoba z linią Z próbuje połączyć się z siecią IRC, usługi lub demon IRC automatycznie rozłączają klienta, często wyświetlając komunikat wyjaśniający powód zakazu.

Linie Z są odmianą linii K, które działają w bardzo podobny sposób. Większość linii Z jest „przyznawana” osobom, które nadużywają sieci jako całości (w mniejszych sieciach są one częściej wydawane za pojedyncze incydenty).

Linie Z działają również nieco inaczej niż linie K. Linie Z są zwykle ustawione jako *@IP lub *@host, przy czym pierwsza jest lepszą opcją. Linie Z nie czekają na odpowiedź ident od łączącego się użytkownika, ale natychmiast zamykają gniazdo po porównaniu adresu IP użytkownika z listą linii Z i znalezieniu dopasowania. Jeśli użyto opcji *@host, serwer musi przeprowadzić odwrotne wyszukiwanie DNS na użytkowniku, a następnie porównać zwrócony host z hostami na liście Z-line. Może to powodować opóźnienia lub jeśli DNS nie zwraca poprawnie, zbanowani użytkownicy mogą nadal uzyskać dostęp do sieci. W rzeczywistości opcja *@host jest całkowicie sprzeczna z intencjami używania linii Z, dlatego niektóre programy IRCd nie zezwalają na nic innego niż *@IP, z symbolami wieloznacznymi (?,*) lub długościami prefiksów CIDR ( np. /8 ) zezwala w sekcji IP na blokowanie całych podsieci. Kolejną różnicą w stosunku do linii K (które dotyczą tylko klientów IRC) jest to, że jeśli adres IP jest zbanowany, nic, nawet inne serwery, nie mogą się połączyć z tego adresu IP (lub zakresu adresów IP, w zależności od banmaski).

Jedną z zalet używania linii Z w porównaniu z liniami K i G, z punktu widzenia administratora serwera lub sieci, jest to, że linia Z zużywa mniej przepustowości niż linia K, głównie dlatego, że nie czeka na odpowiedź ident lub DNS spojrzeć w górę.

Wadą korzystania z linii Z zamiast linii K lub G jest to, że trudniej jest zablokować całych dostawców usług internetowych i bardzo dynamiczne adresy IP, typowe dla niektórych połączeń dialup i DSL . Na przykład, jeśli administrator sieci chce zablokować wszystkie usługi ISP example.com (z hipotetycznymi zakresami adresów IP 68.0.0.0 – 68.255.255.255 i 37.0.0.0 – 38.255.255.255), linia G może użyć *@*example .com, podczas gdy linia Z wymagałaby *@37.*.*.*, *@38.*.*.* i *@68.*.*.*, aby osiągnąć to samo.

Linie Z mogą być również globalne, w takim przypadku nazywane są liniami GZ . Linie GZ działają w taki sam sposób jak linie Z, z tym wyjątkiem, że propagują się na każdy serwer w sieci. Niektóre demony IRC mogą być również skonfigurowane do współdzielenia linii Z z innymi serwerami.

Linia Q

Na niektórych IRCd, takich jak UnrealIRCd, linia Q zabrania pseudonimu lub jakiegokolwiek pseudonimu pasującego do danego wzorca. Jest to najczęściej używane w celu zakazania korzystania z pseudonimów usług (takich jak „X” lub NickServ ) lub zakazania używania pseudonimów operatorów IRC przez osoby niebędące operatorami. Niektóre demony IRC mogą rozłączać użytkowników podczas początkowego stosowania Q-line, podczas gdy inne wymuszają zmianę pseudonimu lub nic nie robią, dopóki użytkownik objęty Q-line nie połączy się ponownie. Inne IRCd, takie jak ircd-hybrid, używają zamiast tego polecenia 'RESV' ("reserve"), z literą statystyk pozostającą jako Q. Komenda 'RESV' może również zabronić używania kanału.

Zobacz też

Bibliografia

Zewnętrzne linki