TCP Wrapper

Z Wikipedie, otevřené encyklopedie
Skočit na: Navigace, Hledání
TCP Wrapper
Vývojář Wietse Venema
Aktuální verze 7.6 (8. 4. 1997)
Operační systém UNIX
Typ softwaru bezpečnostní
Licence BSD licence
Lokalizace angličtina
Web ftp://ftp.porcupine.org/pub/security/index.html
Principiální schéma ochrany síťových služeb prostřednictvím TCP Wrapperu v UNIXových operačních systémech

TCP Wrapper je mechanismus, který umožňuje v unixových operačních systémech řídit přístup ke službám serveru na základě adresy, ze které přicházejí požadavky klienta.[1]

Vkládá se do komunikace mezi spouštěnou službu a tzv. „super-server“ inetd, který naslouchá požadavkům jím spravovaných služeb. Úkolem TCP Wrapperu je ochránit volanou síťovou službu před nepovoleným přístupem. Zavádí podporu pro vracení stavových zpráv klientovi při pokusu o připojení ke službě. Dále informuje správce operačního systému o příchozích požadavcích, které zapisuje do systémového logu.

Autorem původního kódu programu je respektovaný holandský programátor Wietse Venema, který působil na Eindhoven University of Technology. V roce 1990 totiž byla univerzita pod neustálými útoky neznámého holandského hackera, který objevil možnost jak povýšit svá oprávnění na stanicích s operačním systémem Unix a v utajení mazal často nezálohovaná vědecká data.[2]

Přestože může být TCP Wrapper provozován jako samostatný program spuštěný prostřednictvím internetového démona (inetd), dnes se nejčastěji používá jako knihovna (libwrap) připojená k libovolnému programu, která následně komunikuje s internetovým démonem (inetd). Původně byl určen pro síťové služby na bázi TCP, později UDP, nyní již existuje i implementace pro filtrování ICMP paketů (např. pingd).[3]

Vlastnosti[editovat | editovat zdroj]

Výhody[editovat | editovat zdroj]

  • zaručuje transparentnost spojení mezi klientem a chráněnou službou
  • umožňuje centralizovanou správu prostřednictvím sdílení konfiguračních souborů jednotlivými síťovými službami
  • v některých ohledech výkonnější než skutečný firewall

Nevýhody[editovat | editovat zdroj]

  • neochrání služby před vyřazením z provozu opakovaným častým připojením známým jako Denial of Service
  • neposkytuje ochranu službám zavedeným při bootování, které nadále běží na pozadí

Princip činnosti[editovat | editovat zdroj]

Při požadavku klienta na spuštění nějaké konkrétní služby, se namísto /usr/sbin/inetd (démon inetd), spouští nejprve program /usr/sbin/tcpd (samotný TCP Wrapper), který na základě definovaných pravidel rozhodne, jestli má klient ke službě přístup. Po úspěšné autorizaci předává řízení démonu inetd, který klientovi službu poskytne. Postup zpracování požadavku znázorňuje obrázek vpravo.

Konfigurace služeb pro použití TCP Wrapperu[editovat | editovat zdroj]

Jestliže chcete použít TCP Wrapper na kontrolu přístupu ke službám inetd, musíte nejprve příslušně upravit konfigurační soubor /etc/inetd.conf.

Příklad konfigurace např. pro službu FTP[editovat | editovat zdroj]

  • Původně:
ftp stream tcp nowait root /usr/sbin/in.ftpd

  • Po úpravě:
ftp stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.ftpd

  • Po aplikaci je nutné restartovat inetd nebo alespoň obnovit jeho konfiguraci příkazem:
$ /etc/init.d/inetd reload

Nastavení řízení přístupu[editovat | editovat zdroj]

Pro správnou funkci TCP Wrapperu jsou důležité 2 textové soubory: /etc/hosts.allow/etc/hosts.deny. Obsah těchto souborů určuje, které služby ze kterých adres budou povolené resp. zakázané.

Pořadí zpracování[editovat | editovat zdroj]

  1. jestliže požadavek určený dvojicí démon – adresa klienta vyhoví některému pravidlu v souboru /etc/hosts.allow, přístup bude umožněn;
  2. jestliže požadavek určený dvojicí démon – adresa klienta vyhoví některému pravidlu v souboru /etc/hosts.deny, přístup nebude umožněn;
  3. v ostatních případech je přístup implicitně povolen!

Upozornění: Jestliže by se soubory v požadovaném umístění nenacházely, byly by systémem považovány za prázdné, přičemž důsledkem jejich absence by bylo vyřazení TCP Wrapperu z činnosti a všechny požadavky na služby by tak byly automaticky schváleny!


Struktura konfiguračních souborů /etc/hosts.allow a /etc/hosts.deny[editovat | editovat zdroj]

<seznam_demonu> : <adresy_klientu> [: <volitelne1>: <volitelne2>: ...]
  • Každé pravidlo musí být na samostatném řádku.
  • Prázdné řádky nebo řádky uvozené znakem # (komentář) jsou ignorovány.
  • V poli seznam_demonu je dovoleno uvést více názvů démonů vzájemně oddělených čárkami.
  • V poli adresy_klientu je možné specifikovat klienta pomocí klauzule <uzivatelske_jmeno>@<server>.
  • Do oddělení volitelne lze dosadit ke každému pravidlu allow (povolit) nebo deny (blokovat). To umožňuje administrátorovi konsolidovat pravidla do jednoho souboru.
  • Oba soubory by měly být zakončeny prázdným řádkem. V opačném případě skončí testování posledního pravidla chybou, která bude zaznamenána do /var/log/messages nebo do /var/log/secure.

Speciální výrazy[editovat | editovat zdroj]

  • Místo jména démona můžete použít výraz ALL, který vyhovuje jménu libovolného démona.
  • Místo adresy klienta můžete použít např.:
192.168.1. – vyhoví všechny IP adresy začínající 192.168.1. (např. 192.168.1.254)

192.168.1.0/255.255.255.0 – vyhoví všechny IP adresy odpovídající zadané masce (tj. 192.168.1.0 – 192.168.1.255)

IPv6 adresu uzavřenou do [ ] (hranatých závorek)

.domena.cz – vyhoví všechny adresy končící doménou domena.cz (např. server.domena.cz)

/cestu/k/souboru – odkazuje např. na soubor s dlouhým seznamem adres klientů

  • Adresu klienta lze nahradit také následujícími výrazy:
ALL – vyhoví libovolné adrese

LOCAL – splněno pro adresy z lokální sítě

UNKNOWN – splněno pro případy, kdy nelze získat ze zadané adresy odpovídající IP adresu (kontroluje se DNS a reverzní DNS záznam) [pozn. 1]

KNOWN – přesný opak předchozího, vyhoví tedy pouze v případě, kdy lze získat IP adresu a opačně [pozn. 1]

PARANOID – nejprve zjistí reverzní záznam pro IP adresu klienta a následně pro tento záznam zjistí IP adresu. Paranoidní podmínka je splněna v případě, že se zjištěné záznamy nerovnají. To může nastat například v případě, kdy klient maskuje svoji skutečnou IP adresu nebo v případě chybného reverzního záznamu v DNS. [pozn. 1]

EXCEPT – slouží pro zápis výjimky z pravidla

Doporučení: Z hlediska bezpečnosti se doporučuje klienty identifikovat prostřednictvím IP adres namísto doménových jmen vzhledem k možnému ochromení DNS serverů.


Bezpečnostní přístupy[editovat | editovat zdroj]

a) Otevřený systém[editovat | editovat zdroj]

„Důvěřujeme téměř všem, ostatním zakážeme explicitně přístup.“ (jinými slovy: „Co není zakázané, je tedy povolené.“)
  • Obsah souboru /etc/hosts.allow:
ALL : ALL
  • Příklad obsahu souboru /etc/hosts.deny:
ipop3d : server.domena.cz 192.168.10.

b) Uzavřený systém[editovat | editovat zdroj]

„Nedůvěřujeme téměř nikomu, když někomu důvěřujeme, explicitně mu povolíme přístup.“
  • Obsah souboru /etc/hosts.deny:
ALL : ALL
  • Příklad obsahu souboru /etc/hosts.allow:
ipop3d : ALL EXCEPT PARANOID – přístup na POP3 povolen všem těm, kteří nefalšují svoji IP adresu [pozn. 1]

Testování funkčnosti TCP Wrapperu[editovat | editovat zdroj]

Pro testování funkčnosti TCP Wrapperu existují v balíčku tcp_wrappers následující dvě utility:

tcpdchk[editovat | editovat zdroj]

– umístění: /usr/sbin/tcpdchk
– zkoumá konfigurační soubory TCP Wrapperu a hlásí všechny potenciální problémy, které mohou obsahovat:

  • absence názvů cest v /etc/inetd.conf
  • služby nastavené tcpd, ale ne v /etc/inetd.conf
  • služby, které nemohou být chráněny pomocí TCP Wrapperu
  • syntaktické chyby v konfiguračních souborech tcpd nebo /etc/inetd.conf

Příklad použití[editovat | editovat zdroj]

$ tcpdchk -v # přepínač -v zajišťuje podrobný výpis

tcpdmatch[editovat | editovat zdroj]

– umístění: /usr/sbin/tcpdmatch
– testuje funkčnost zavedených pravidel
– na příkazové řádce očekává jako parametry jméno testovaného démonaadresu, ze které se připojuje klient, následně prohledá soubory s pravidly /etc/hosts.allow resp. /etc/hosts.deny a vyhodnotí přístup; výstupem programu je granted (povoleno) nebo denied (zamítnuto) spolu s řádkem, na kterém se uplatnilo pravidlo

Příklad na testování[editovat | editovat zdroj]

$ tcpdmatch in.ftpd 192.168.1.10 # testování přístupu k démonu ftpd z adresy 192.168.1.10


Více možností poskytnou manuálové stránky pro tcpdchktcpdmatch nebo trochu skrytý manuál k souborům /etc/hosts.allow/etc/hosts.deny dostupný pod 
$ man 5 hosts_access.


Odkazy[editovat | editovat zdroj]

Poznámky[editovat | editovat zdroj]

  1. a b c d Při problémech s DNS serverem není možné zjistit záznamy!

Reference[editovat | editovat zdroj]

[1] [2] [3]

  1. a b NORIS, Ivan. Deja-vix : VIXova stránka [online]. 1.9.4. vyd. [2005?], rev. 11/4/2005, [cit. 2011-11-19]. Kapitola TCP wrapper a obmedzenie prístupu. Dostupné online. (slovensky) 
  2. a b VENEMA, Wietse. TCP WRAPPER – Network monitoring, access control, and booby traps. [online]. The Netherlands: Mathematics and Computing Science at Eindhoven University of Technology, 1992, [cit. 2011-11-19]. Dostupné online. (anglicky) 
  3. a b daemon9. Linux Ping Daemon. Phrack Magazine [online]. 1998-01-26, roč. 8 [cit. 2011-11-19], article 7, Issue 52. Dostupné online.  (anglicky) 
    BEZROUKOV, Nikolai. Softpanorama [online]. c2011, rev. Last modified: November 04, 2011, [cit. 2011-11-19]. Kapitola TCP Wrappers. Dostupné online. (anglicky) 

Související články[editovat | editovat zdroj]

Externí odkazy[editovat | editovat zdroj]