Firewally, bezpečnost

Tomáš Hofman, 143156 at mail dot muni dot cz


Obsah


Účel firewallů

Základní úkol firewallu je oddělovat zóny s rozdílnou úrovní důvěryhodnosti. Jako příklad lze uvést internet, což je prostředí s nulovou úrovní důvěryhodnosti a podnikovou síť, kde je úroveň důvěryhodnosti vysoká. Firewall by měl ochránit služby které chceme poskytovat jen uživatelům v podnikové síti před použitím použitím zvenčí (z internetu).

Důvod proč chceme omezit přístup k různým službám může být jednak zamezení využítí těchto služeb neoprávněnými uživateli a jednak zamezenení zneužití potencionálních chyb v programech které tyto služby poskytují. Zpravidla bychom se tedy měli snažit ponechat přístupné jen ty služby, které opravdu potřebujeme a vše ostatní zakázat.


Něco z historie

První firewally se objevily koncem 80-tých let, tedy v dobách, kdy byl internet poměrně novou technologií. Důvodem jejich vzniku byla potřeba reagovat na množství závažných bezpečnostních nedostatků tehdejších systémů.

Za první rozsáhlý útok na internetovou bezpečnost je často považován počítačový červ známý jako Morris Worm, napsaný v roce 1988 studentem Cornell University R. T. Morrisem. Červ využíval bezpečnostních chyb v programech sendmail, finger a rsh/rexec. Původně nebyl napsán aby působil škodu, ale za účelem změřit "velikost" internetu. Avšak v důsledku toho že virus napadal i již napadené stroje, začal napadené stroje příliš zatěžovat a to nakonec vedlo k jejich výpadku. Podle oficiálních statistik bylo celkově napadeno asi 6000 unixových systémů a vznikla škoda okolo 10 až 100 milionů dolarů.


Typy firewallů

Firewally pracující na síťové vrstvě

Pracují jako paketové filtry rozhodnující které pakety propustí a které zablokují na základě pravidel zadaných administrátorem.

Mohou se rozhodovat na základě:

Mohou se dále rozdělit na stavové a bezstavové. Stavové filtry se mohou rozhodovat i na základě stavu spojení - např. zda paket patří k již vytvořenému spojení, nebo spojení teprve otevírá - což výrazně zjednodušuje konfiguraci.

Výhodou paketových filtrů je především vysoká rychlost, slušná úroveň zabezpečení a relativně snadná konfigurace, což snižuje riziko chybného nastavení administrátorem.

Příkladem paketového filtru jsou iptables v linuxu.

Firewally pracující na aplikační vrstvě

Označovány také jako aplikační brány, nebo proxy firewally. Komunikace skrz aplikační bránu probíhá ve dvou krocích - nejdříve se klient připojí k bráně, a ta na základě jeho požadavku otevře nové spojení s cílovým serverem. Data která brána obdrží od serveru potom pošle zpět klientovi (pokud usoudí že jejich obsah je nezávadný).

Aplikační brány se mohou rozhodovat na základě inspekce dat, které proudí mezi klientem a serverem a blokovat obsah který správce systému považuje za závadný (určité webové stránky, viry, nebo pokusy o zneužití známých logických chyb klientských programů).

Výhodou aplikačních bran je vyšší úroveň zabezpečení, než jaké lze dosáhnout u paketových filtrů, ale je to za cenu větších nároků na HW firewallu a nižší rychlosti práce.

Aplikační firewally

Fungují a úrovni operačního systému. Mohou např. odepřít jednotlivým aplikacím přístup k síti, nebo jim zakázat spouštění jiných aplikací. Případně lze s jejich pomocí povolit spouštění pouze aplikací které jsou v inventáři povolených aplikací. Aplikační firewally jsou vývojově nejnovějším typem firewallů (z těch jmenovaných) a jsou z nich asi nejméně rozšířené.


NAT

NAT - Network Address Translation, neboli překlad adres slouží ke změnám zdrojových (SNAT - Source NAT) a cílových (DNAT - Destination NAT) adres v hlavíčkách paketů.

Překlad adres se nám může hodit například pokud máme síť kterou chceme připojit k internetu, ale nemáme k dispozici takový rozsah adres abychom mohli dát každému počítači vlastní adresu.

Výhoda pro administrátora je v tom že počítače skryté za NATem nejsou z internetu přímo přístupné, takže se na ně hůř útočí. Z toho ale pramení i nevýhoda NATu - nelze navázat spojení z internetu se strojem schovaným za natem, což znemožňuje použití některých aplikací na těchto strojích.


Paketové filtry v linuxu

První paketový filtr se objevil v jádrech řady 1.1. Byl založen na ipfw z BSD a na linux portován Alanem Coxem v roce 1994. V linuxu 2.0 přibyla utilita ipfwadm pro nastavování filtrovacích pravidel. ipfwadm umožňoval zatím jen nastavit seznam pravidel ve kterých se popisovalo kterých paketů se pravidlo týká a co s takovým paketem dělat.

V roce 1998 v linuxu 2.2 byl vytvořen nástroj ipchains (autorem Rusty Russell). ipchains přinesly rozšíření o řetězce pravidel (chains).

V linuxu 2.3 byli bezstavové ipchains nahrazeny novým stavovým paketovým filtrem netfilter a jeho administračním nástrojem iptables který se používá dnes. Autorem je také Rusty Russell. Oproti ipchains přibyly v iptables tabulky, do ktetých se řetězce pravidel dělí.


netfilter

netfilter obsahuje tři defaultní tabulky a každá z tabulek obsahuje nějaké předdefinované řetězce pravidel (chains). Všechny řetězce jsou implicitně prázdné. Administrátor má možnost vytvářet další "uživatelské" řetězce, ale většinou si vystačíme s těmi předdefinovanými. Předdefinované řetězce mají definovaný implicitní cíl (policy target), který určuje co se stane s paketem který nebude vyhovovat žádnému pravidlu v řetězci. U uživatelských řetězců policy target definovat nelze.

Implicitní tabulky

Cíle

Pravidla v řetězcích se skládají jednak z kritérii podle kterých se rozhodne zda se má pravidlo na daný paket aplikovat a jednak z cíle, který určí co se má z paketem udělat, pokud vyhovuje kritériím. Cílem mohou být uživatelem definované řetězce, nebo jedna z následujících hodnot (výčet není kompletní):

Pokud jako cíl použijeme uživatelem definovaný řetězec, ale paket nebude vyhovovat žádnému pravidlu v tomto řetězci, bude vyhodnocování pokračovat následujícím pravidlem v původním řetězcí.


iptables

Program sloužící pro konfiguraci netfilteru.

Kritéria pravidel:


Příklady nastavení

# načtení potřebných modulů, pokud je nemáme zakompilované
# v jádře (tyto umožní iptables chovat se jako stavový filtr)
modprobe ip_conntrack
modprobe ip_conntrack_ftp

# implicitní cíl - odmítnutí paketu
iptables -P INPUT REJECT
# příjímat pakety z již otevřených spojení
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# přijímat vše z loopback rozhraní
iptables -A INPUT -i lo -j ACCEPT
# povolit ftp a ssh
iptables -A INPUT -m multiports -dports ftp,ssh -j ACCEPT

# NAT
modprobe iptable_nat
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Zdroje