TCP Wrapper
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]
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 |
Některá data mohou pocházet z datové položky. |
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
Výhody
- 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
- 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
.
Příklad konfigurace např. pro službu FTP
- 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
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!
Struktura konfiguračních souborů /etc/hosts.allow
a /etc/hosts.deny
/etc/hosts.allow
a /etc/hosts.deny
<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) nebodeny
(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:
ALL
– vyhoví libovolné adreseLOCAL
– 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
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.
Testování funkčnosti TCP Wrapperu
Pro testování funkčnosti TCP Wrapperu existují v balíčku tcp_wrappers následující dvě utility:
tcpdchk
– 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í
$ tcpdmatch in.ftpd 192.168.1.10 # testování přístupu k démonu ftpd z adresy 192.168.1.10
/etc/hosts.allow
a /etc/hosts.deny
dostupný pod $ man 5 hosts_access.
Odkazy
Poznámky
- Při problémech s DNS serverem není možné zjistit záznamy!
Reference
- 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)
- 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)
- daemon9. 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)
Související články
- Inetd
- Firewall
- Denial of Service
- Hosts soubor
Externí odkazy
- Wietse's tools and papers (anglicky)
- TCP Wrappers and xinetd – dokumentace pro CentOS (anglicky)