Copyright © 1997 RNDr. Libor Dostalek
 
 

Wrapper

V operačním systému typu UNIX se používá celá řada serverů: telnetd pro protokol TELNET, ftpd pro protokol FTP atd. Tyto servery se zpravidla nespouští trvale po startu systému. Po startu systému se spouští tzv. superserver inetd, který očekává požadavky (naslouchá) na portech jednotlivých serverů. Přijde-li na nějaký port požadavek, pak pro vyřízení požadavku spustí příslušný server. Pro jaký port má spouštět jaký server má uvedeno na jednotlivých řádkách souboru /etc/inetd.conf.

 Příklad řádku souboru /etc/inetd.conf pro spouštění serveru telnetd má tvar:

...
telnet  stream  tcp     nowait  root    /usr/sbin/telnetd       telnetd
...
Kde telnet specifikuje číslo portu podle souboru /etc/services, stream specifikuje typ socketu (stream nebo dgram), tcp specifikuje protokol podle souboru /etc/protocols, nowait určuje že se nemá čekat na uvolnění socketu, root specifikuje uživatele pod jehož UID se server spouští a konečně následuje jméno programu (serveru) a parametry. Jako server se tedy spouští program /usr/sbin/telnetd.

 Jako ochranu serverů spuštěných na našem počítači můžeme použít wrapper. Wrapper je program umožňující jednoduché ověření totožnosti klienta. Původní wrapper byl napsán na Eindhoven University of Technology a autorem je Wietse Venema. Program se jmenuje tcpd. Dnes existuje více podobných programů a hovorově se oznašují jako wrappery.

Superserver inetd má ve svém konfiguračním souboru napsáno, pro jaký port má spouštět který server. Použije-li se wrapper, pak v témže konfiguračním souboru se místo jména serveru specifikuje wrapper a teprve parametrem wrapperu je název serveru.

 Řádek souboru /etc/inetd.conf pro spouštění serveru telnetd má tvar:

...
telnet  stream  tcp     nowait  root    /usr/sbin/tcpd      telnetd
...
Nejprve je superserverem spouštěn wrapper (např. wrapper tcpd), který autentizuje klienta. V případě, že výsledek autentizace je kladný, tak je spuštěn příslušný server.

Existují i superservery, které integrují činnost wrapperu a superserveru. Pak pochopitelně není třeba dvou po sobě volaných programů. Přínos wrapperu je ale právě v jednoduchosti jeho nasazení. V operačním systému typu UNIX není třeba žádných změn kromě přeložení wrapperu a jednoduché opravy souboru /etc/inetd.conf.

 Na předchozím obrázku jsem záměrně kromě programů telnetd a ftpd uvedl program telnetxd. Program realizující proxy pro protokol TELNET se často jmenuje telnetxd. Proxy se z hlediska operačního systému i klienta jeví jako server, který podobně jako ostatní servery očekávajá požadavky na určeném portu.

 Proxy je tedy také možné spouštět pomocí superserveru inetd. Před spuštěním proxy je také možné spouštět wrapper a provádět autentizaci klienta. Pomocí wrapperu je možné určovat kdo může používat jakou proxy a kdo ne.

 Použili-li jsme proxy k tomu abychom umožnili klientům vnitřní sítě přístup do Internetu, pak wrappem můžeme omezit přístup do Internetu jen pro vybrané uživatele.

Ještě zajímavější je opačná úvaha. Před kým chráníme servery vnitřní sítě? Před vlastními zaměstnanci ne - chráníme je před ostatními uživateli Internetu. Jenže co když vyjede náš zaměstnanec na služební cestu, tj. už není na vnitřní síti, ale v Internetu. Před ním není třeba chránit naše servery. A naopak jemu by se hodilo např. si vybrat poštu na serveru vnitřní sítě.

K ochraně vnitřní sítě se nabízí použít proxy v kombinaci s wrapperem. Na rozdíl od použití filtrace, oprávnění k průchodu proxy (oprávnění k použití proxy) nemusí záviset na tom, zda-li klient je z vnitřní sítě. Použít proxy může každý, kdo se autentizuje. Spustíme tedy proxy tak, aby skrze ní mohly klienti vnitřní sítě do Internetu a klienti Internetu na servery vnitřní sítě a ochranu provedeme wrapperem (nikoliv filtrací). Jenže s takovýmto rozhodnutím musíme být velice opatrní.

Rozdíl mezi jednoduchým wrapperem jako je program tcpd a wrappery používajícími např. heslo na jedno použití nebo asymetrické kryptografie je v činnosti klienta.

Program tcpd žádné další akce od klienta nepožadoval. Klienta si prověřil sám na základě jeho IP-adresy nebo identifikačním protokolem. Uživatel v případě, že byl kladně autentizován, tak ani nevěděl, že ve hře je nějaký wrapper. Pouze v případě, že jej wrapper odmítnul, tak o tom mohl přemýšlet, ale ničím nemohl do činnosti wrapperu zasáhnout - neměl k dispozici žádný příkaz. Výhodou takovéhoto transparentního řešení je skutečnost, že není třeba žádné programy upravovat ani učit uživatele nějaké nové autentizační dialogy.

 Např. v případě hesel na jedno použití wrapper s uživatelem komunikuje tzv. autentizačním dialogem. Vyšle uživateli (klientovi) autentizační dotaz a klient mu odpoví jednorázovým heslem. Wrapper si heslo zkontroluje a je-li správné, pak spustí příslušný server.

 Problém je tedy v tom, že uživatel se musí naučit autentizační dialog s wrapperem. To není na překážku např. pro řádkové klienty ftp a telnet. Ale už ftp realizované v oknech či klienti protokolu POP3 by museli být upraveni, aby vykonali tento dialog. Autentizační dialog lze i automatizovat, tj. uživatel není autentizačním dialogem zatěžován. Pro takový případ se používajá hardware označovaný jako čipová karta, avšak klienti musí umět využit čipovou kartu, tj. musí být rovněž upraveni.

 V praxi se setkáváme s použitím wrapperů pro přístup z Internetu do Intranetu právě nejčastěji pro řádkové příkazy ftp a telnet.

Další komplexnějiší možnosti autentizace klientů v kombinaci s proxy přináší SOCKS, kterým budeme věnovat samostatnou kapitolu.
 
 

tcpd

Program tcpd je velice užitečným doplňkem našich serverů. Umisťujete-li nějaký server na Internet a nepoužíváte jinou metodu autentizace klientů, pak určitě zvolte alespň program tcpd.

Klient prokazuje svoji totožnost na základě své IP-adresy, případě jména svého počítače. Tj. v databázi programu tcpd jsou uvedeny IP-adresy nebo jména počítačů (případně skupin počítačů) jimž je přístup povolen. V případě, že je uvedeno jméno počítače, pak se vezme z příchozího IP-datagramu adresa odesilatele a provede se na ní reverzní překlad DNS. Takto získané jméno se porovnává s databází programu tcpd.

 Pochopitelně, že autentizace na základě IP-adresy odesilatele není příliš dokonalá, ale v některých případech může stačit. Např. jste-li nuceni používat TFTP-server, pak jste vděční i za takovouto autentizaci.
 
 

Identifikační protokol (RFC-1413)

Kromě autentizace na základě IP-adresy odesilatele je možné autentizaci rozšířit o zpětné prověření uživatele na počítači klineta. Pro zpětné ověření se používá identifikační protokol specifikovaný v RFC-1413. Tento protokol se zpětně dotazuje počítače klienta, zdali nějaký jeho uživatel spojení požadoval.

 Na počítači klienta musí být spuštěn server pro zpětné ověřování. Wrapper při zpětném ověřování vystupuje v roli klienta. Identifikační protokol podle RFC-1413 používá zpravidla port 113.

Princip autentizačního protokolu snadno pochopíte na následující demonstraci.

Instalujete-li na vašem serveru wrapper tcpd, pak si můžete ověřit, zda-li na klientském počítači běží server identifikačního protokolu.

Z klientského počítače provedete např.

$ telnet        server.firma.cz
Na tomto počítači (klient.firma.cz) navazujete spojení s počítačem server.firma.cz. Abyste mohli navazovat spojení, musel vám být operačním systémem počítače klient.firma.cz přidělen port. Předpokládejme, že vám byl přidělen port 1500.

Spojení tedy navazuje počítač klinent.firma.cz na portu 1500 se serverem server.firma.cz na portu 23 (23 je standardní port pro telnet).

 Nyní na počítači server.firma.cz můžete zpětně ověřit, zda-li nějaký uživatel počítače klient.firama.cz navazuje spojení:

$ telnet         klient.firma.cz        11323,1500
Na portu 113 zpětně ověřujete, zda-li nějaký klient z počítače klient.firma.cz navazuje spojení na portu 1500 se serverem na portu 23 (předpokládejme, že pro tento příkaz telnet byl operačním systémem počítače server.firma.cz přidělen port 2500).

Pokud na počítači klient.firma.cz na portu 113 běži server pro identifikační protokol, pak obdržíte buď kladnou odpověď:

23, 1500 : USERID : UNIX : dostalek
tj. toto spojeni navazuje uživatel dostalek. Nebo obdržíte zápornou odpověď:
23, 1500 : ERROR : chybová hláška
Tj. žádný uživatel takové spojení z počítače klient.firma.cz nenavazuje, tj. jedná se o napadení typu "address spoofing attack".

Na následujícím obrázku je příklad identifikačního protokolu podle RFC-1413 rekapitulován.


 
 

Konfigurační databáze programu tcpd

Konfigurační databáze se zpravidla skládá ze dvou souborů: /etc/hosts.allow a /etc/hosts.deny. V prvním souboru se specifikují počítače (případně jejich uživatelé), kteří mají přístup povolen a v druhém ti, kteří mají přístup odepřen.

Soubory se interpertují po jednotlivých řádcích. Každý řádek má následující syntaxi:

server : klienti [ : příkaz]
Jelikož program tcpd autentizuje klienty pro více serverů, tak se prvním parametrem idetifkuje příslušný server (proces). Např. telnetd, ftpd, rshd, rlogind ,... . Slovo ALL vyjadřuje všechny servery.

Druhým parametrem (klienti) specifikujeme klienty. Ke specifikaci se použije:

Posledním volitelným parametrem je příkaz, který se provede jsou-li předchozí dva prametry kladně vyhodnoceny. Tato volba je praktická při zakazování přístupu, kdy jako příkaz je možné provést příkaz finger na počítač klient.firma.cz a výsledek si poslat mailem, abychom měli přehle o vzniklé situaci.

 Příklad:
/etc/hosts.denny:
ALL: ALL
/etc/hosts.allow:
telnet: info.pvt.net, .pvtnet.cz

ALL: .net

Umožňuje spouštět server telnet pro klienty z počítače info.pvt.net a všech počítačů patřících do domeny pvtnet.cz. Všem počítačům z domény net je umožněn přístup na všechny servery.

Testovací programy

K programu tcpd patří dva testovací programy: