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.
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í ICMPpaketů (např. pingd).[3]
Vlastnosti
Výhody
zaručuje transparentnost spojení mezi klientem a chráněnou službou
v některých ohledech výkonnější než skutečný firewall
Nevýhody
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
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
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.
Po aplikaci je nutné restartovat inetd nebo alespoň obnovit jeho konfiguraci příkazem:
$ /etc/init.d/inetdreload
Nastavení řízení přístupu
Pro správnou funkci TCP Wrapperu jsou důležité 2 textové soubory: /etc/hosts.allow a /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í
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;
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;
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
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
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:
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
a) Otevřený systém
„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
„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]
– 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í
$ tcpdchk-v# přepínač -v zajišťuje podrobný výpis
tcpdmatch
– 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émona a adresu, 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í
$ tcpdmatchin.ftpd192.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 tcpdchk a tcpdmatch nebo trochu skrytý manuál k souborům /etc/hosts.allow a /etc/hosts.deny dostupný pod
$ man5hosts_access.
Odkazy
Poznámky
↑ abcdPři problémech s DNS serverem není možné zjistit záznamy!
↑ ab
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)
↑ abdaemon9. Linux Ping Daemon. Article 7, Issue 52. Phrack Magazine [online]. 1998-01-26 [cit. 2011-11-19]. Roč. 8. Dostupné v archivu pořízeném dne 2011-09-28. (anglicky)
BEZROUKOV, Nikolai. Softpanorama [online]. C2011, rev. Last modified: November 04, 2011 [cit. 2011-11-19]. Kapitola TCP Wrappers. Dostupné online. (anglicky)