TCP Wrapper
Author
Albert FloresPrincipiá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.
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. +more Ú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.
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ř. +more pingd).
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. +more 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. +moredeny. 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. +moredeny, 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
: [: : : . ] * Každé pravidlo musí být na samostatném řádku. +more * 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 @. * 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: :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)
:KNOWN - přesný opak předchozího, vyhoví tedy pouze v případě, kdy lze získat IP adresu a opačně
: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í. +more 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.
: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. +moreallow: :ipop3d : ALL EXCEPT PARANOID - přístup na POP3 povolen všem těm, kteří nefalšují svoji IP adresu.
Testování funkčnosti TCP Wrapperu
Pro testování funkčnosti TCP Wrapperu existují v balíčku [ftp://ftp. porcupine. +moreorg/pub/security/tcp_wrappers_7. 6. tar. gz 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. +moreconf * 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. +more /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
Více možností poskytnou manuálové stránky pro #tcpdchk|tcpdchk a #tcpdmatch|tcpdmatch nebo trochu skrytý manuál k souborům /etc/hosts. allow a /etc/hosts. +moredeny dostupný pod $ man 5 hosts_access.
Odkazy
Poznámky
Reference
Související články
Inetd * Firewall * Denial of Service * Hosts soubor
Externí odkazy
[ftp://ftp. porcupine. +moreorg/pub/security/index. html Wietse's tools and papers] (anglicky) * [url=https://web. archive. org/web/20111204053517/http://www. centos. org/docs/5/html/Deployment_Guide-en-US/ch-tcpwrappers. html]TCP Wrappers and xinetd[/url] - dokumentace pro CentOS (anglicky).
Kategorie:BSD Kategorie:Bezpečnostní_software Kategorie:Síťový software Kategorie:Software pro Unix Kategorie:Svobodný software