Network News Transfer Protocol
NNTP (Network News Transfer Protocol) je vinformatice přenosový protokol pro síťové diskuzní skupiny (též Usenet NetNews), které byly používány zejména v počátcích Internetu. Příspěvky diskuzních skupin jsou uloženy na mnohaserverech, mezi kterými se příspěvky synchronizují. Servery tvoří distribuovanou síť, která využívá NNTP protokol ke vzájemné komunikaci.
Popis
Původně byla distribuce příspěvků zajišťována pomocí UUCP, které používalo pro přenosy telefonní linky (tj. vytáčené připojení pomocí modemů), kterými byly přenášeny jednotlivé soubory se zprávami typicky v nočních hodinách. Uživatelé si pak zprávy četli z lokálních disků. Příspěvky se ukládaly na disk a opět v nočních hodinách distribuovaly na další Usenet servery.
Po přechodu na interaktivní spojení pomocí protokolu TCP byla metoda výměny souborů (příspěvků) pomocí UUCP nahrazena protokolem NNTP, který umožňuje uživatelům číst a psát do diskusních skupin v reálném čase. Klient se z libovolného místa v počítačové síti spojuje pomocí NNTP protokolu se serverem, který uchovává příspěvky na svém diskovém prostoru. NNTP umožňuje interaktivní přenos článků s takřka nulovým zpožděním, čímž je omezena potřeba replikace článků na mnoha místech současně.
Komunikace se serverem
Ke komunikaci se serverem, ukládání, čtení a předávání článků slouží klientům různé příkazy. Protokol NNTP umožňuje také aktivní a pasivní způsob přenosu příspěvků, kterému se také hovorově říká „pushing“ (tlačení) a „pulling“ (tažení). Při tlačení klient zadá příkaz IHAVE <varmsig> a následně se dozví, zda se již článek na serveruvyskytuje, či nikoli. Tlačení však díky neustálému vyhledávání, zda již článek není v historii značně zatěžuje systém serveru.
Naproti tomu tažení zadané příkazem NEWNEWS zašle uživateli seznam všech dostupných článků a ten si následně vybere ty články, které ještě nevlastní. Problémem tažení je však autorizace osob a tudíž se server musí ujistit, zda neposílá neautorizovaným uživatelům tajné dokumenty, nebo jim nepřístupné články.
Zabezpečenou variantou NNTP je protokol NNTPS, který komunikaci šifrujepomocí SSL. Server standardně naslouchá na TCP portu 119, při zabezpečeném spojení pak na portu 563. Protokol je definován v RFC 977.
Příklad komunikace mezi klientem a serverem
Klient (C) se připojí k serveru (S), komunikaci zahajuje server uvítací zprávou začínající kódem 200 nebo 201. Komunikace probíhá na textové úrovni. Každý řádek je ukončen znaky CR-LF. Maximální délka řádku zasílanému serveru je 510 znaků (512 i s CR-LF). Příspěvek se skládá z hlavičky a těla (u příkazu<ARTICLE> je server oddělí jedním prázdným řádkem). Za každým příspěvkem zašle server jednu tečku na samostatném řádku. Jestliže se v těle příspěvku vyskytuje řádek začínající tečkou, je tato tečka zdvojena.
<otevření spojení>
S: 200 news.fit.vutbr.cz InterNetNews NNRP server INN 2.2.2 13-Dec-1999 ready (posting ok).
C: GROUP linux.kernel
S: 211 4923 395068 399990 linux.kernel
C: ARTICLE
S: 220 395068 <74yTD-8pz-9@gated-at.bofh.it> article
<server posílá tělo prvního příspěvku>
S: .
C: NEXT
S: 223 395069 <74yTE-8pz-13@gated-at.bofh.it> Article retrieved; request text separately.
C: ARTICLE
S: 220 395069 <74yTE-8pz-13@gated-at.bofh.it> article
<server posílá tělo druhého příspěvku>
S: .
C: QUIT
S: 205 .
Problém NNTP
Celkový problém protokolu NNTP je umožnění informovanému klientovi vložit do sítě články s falešnou specifikací odesílatele, které se označuje jako falšování news (news faking). Stejný problém se týká protokolu SMTP (Simple Mail Transfer Protocol). Avšak rozšíření protokolu NNTP umožňuje u některých příkazů vyžadovat autentizaci uživatele, čímž se možnost vytváření falešných zpráv částečně omezí.
Software
Nejpoužívanějším balíkem protokolu NNTP je v současnosti démon NNTP, jehož původními autory jsou Phil Lapsley a Stan Barber, kteří ho původně vytvořili, aby jeho prostřednictvím přiblížili detaily RFC 977.
Mezi jinými balíky, kdy máme na výběr mezi balíky binárních souborů, nebo různé programy pro instalaci můžeme použít také balík nazvaný „InterNet News“ (INN). Autorem INN je Rich Salz a tento balík umožňuje jak přenos NNTP, tak i starší UUCP-news. Tento balík je spíš navržen pro větší systémové servery.
Instalace serveru
Server NNTP se nazývá nntpd a lze ho zkompilovat dvěma různými způsoby, které závisí na očekávaném zatížení systému news. Z důvodu žádných neexistujících již zkompilovaných verzí se veškerá konfigurace provádí skrze makro, které je definováno v souboru common/conf.h
1. Systém nntpd je nakonfigurován jako samostatný server, který se spouští při zavádění systému z rc.inet2.
2. Systém nntpd je nakonfigurován jako démon řízený inetd.
Omezení přístupu k NNTP:
Přístup ke zdrojům NNTP je řízen souborem nntp_access, který je uložen v adresáři /usr/lib/news.
Řádky v tomto souboru specifikují přístupová práva přidělená vzdáleným hostitelům. Každý řádek má následující formát:
site read|xfer|both|no post|no [!exceptgroup]
Jakmile se klient připojí na NNTP-port, pokusí se server nntpd pomocí zpětného překladu IP adresy získat doménové jméno klienta. Doménové jméno a jeho IP adresa jsou porovnávány s polem site každého záznamu v takovém pořadí, v jakém jsou uvedeny v souboru. Shoda může být buď částečná, nebo úplná. V případě úplné shody ji použije, kdežto v případě částečné shody ji použije jen pokud se nenajde žádná další částečná shoda. Záznamy s obecnější specifikací adres jsou uváděny na začátku souboru, protože případné shody jsou pozdějšími přesnějšími záznamy potlačeny.