Firewally

Tomáš Kubina, xkubina@fi.muni.cz

Obsah

Čo je firewall a prečo ho použiť?

Firewall je hardware alebo software, ktorého úlohou je kontrolovať tok dát v sieti medzi zónami s rozdielnou dôveryhodnosťou (napr. vnútorná sieť podniku vs. Internet). Musí zamedziť takej komunikácii, ktorá je v rozpore s bezpečnostnou politikou.

Dôvod prečo chceme obmedziť prístup k rôznym službám môže byť buď zamedzenie využitia týchto služieb neoprávnenými užívateľmi alebo zamedzenie zneužitia potencionálnych chýb v programoch, ktoré tieto služby poskytujú. Spravidla by sme sa teda mali snažiť ponechať prístupné len tie služby, ktoré skutočne potrebujeme a všetko ostatné zakázať.

Typy firewallov

Paketový filter

Je najjednoduchším typom firewallu. Pracuje na princípe kontroly hlavičiek prichádzajúcich paketov, rozhoduje o ich ďalšom bytí či nebytí. Môže ich zahodiť, preposlať ďalej alebo inak spracovať. Rozhoduje na základe zdrojovej/cieľovej IP adresy/portu.

Výhody:

rýchlosť, nenáročnosť - využíva veľmi málo výkonu CPU, väčšina operácií sa vykonáva v jadre systému
prispôsobivosť - na ľubovolný typ protokolu
transparentnosť - nie je treba upravovať aplikácie
bezstavovosť - nevytvára permanentné spojenie
pomerne jednoduchá konfigurácia

Nevýhody:

sleduje iba hlavičky paketov - nevie ošetriť dáta od transportnej vrstvy vyššie
omedzené logovacie možnosti - logovanie veľmi zatažuje procesor, pri veľkom trafficu veľa logovacích údajov
nepodporuje autentizačné mechanismy - maximálne ide autentizovať pomocou IP adries
konfigurácia filtrov - na nepovolenú potrebnú službu obvykle prídete, ale na povolenú nepotrebnú službu nemusíte prísť nikdy
zneužitie nedokonalosti TCP/IP protokolu

Stavový filter

Väčšinou nadstavba paketového filtru. Dáva pozor na všetky platné tcp spojenia a ich porty, ktoré ukladá do tabuľky. V prípade, že dorazí paket, ktorý nepatrí žiadnemu platnému spojeniu uplatní sa naň činnosť definovaná politikou(zahodenie, predanie ...).

Výhody:

kontrola spojenia

Nevýhody:

náročnejšie než paketové filtre, pretože sa musia udržiavať informácie o spojeniach a kontrolovať súvislosti
funguje iba na TCP/IP

Aplikačná brána

Filtrovanie na úrovni aplikačnej vrstvy OSI modelu. Aplikačná brána sa môže rozhodovať na základe dát, ktoré idú medzi klientom a serverom, a blokovať obsah, ktorý správca systému považuje za zakázaný (určité webové stránky alebo pokusy o zneužitie známych logických chýb klientských programov).

Výhody:

autentizácia užívateľov
lepšie možnosti logovania + informácie o obsahu
umožňuje cachovanie dát

Nevýhody:

nie je transparentná, používanie sa musí nastaviť v klientskej aplikácii
náročnejšia na výkon i na pamäť
nie je univerzálna ako paketové filtre - http proxy a ftp proxy

Analyzátor paketov

Funguje podobne ako aplikačná brána, ale je pasívny a transparentný. Umožňuje pasívnu analýzu paketov a prípadné reakcie na podnety. Príklad balík Snort.

Výhody:

pasívna kontrola prenášaných dát s možnosťou definovať reakcie na potenciálny útok ( zablokovanie prijímania paketov z podozrivej IP adresy)

Nevýhody:

náročnosť na systémové prostriedky, nie je univerzálny

NAT

NAT = network address translation, čiže preklad sieťových adries. Ide o funkciu, ktorá je často pridružená k firewallu. Vykonáva sa totiž v rovnakých sieťových vrstvách ako filtrovanie paketov. Umožňuje meniť zdrojové a cieľové IP adresy prípadne aj porty paketov prechádzajúcich firewallom. Najčastejšie sa táto technika používa na skrytie niekoľkých neverejných IP adries za jednu verejnú IP adresu. Dá sa takisto presmerovať komunikácia na iné porty alebo stroje. Táto technika čiastočne rieši nedostatok IPv4 adries a čiastočne zvyšuje bezpečnosť, pretože zvonku sú stroje s neverejnou IP adresou priamo neprístupné, čo ale na druhej strane znemožňuje použitie aplikácií na týchto strojoch.

Paketové filtre v Linuxe

Linuxové jadro obsahuje paketový filter od verzie 1.1. Bol v ňom použitý najprv ipfw zo systému BSD a na linux platformu ho portoval Alan Cox.

Vo verzii 2.0 pribudol užívateľský nástroj ipfwadm pre nastavovanie filtrovacích pravidiel. ipfwadm umožnoval iba nastaviť zoznam pravidiel, ktoré popisovali, ktorých paketov sa pravidlo týká a čo s takým paketom sa má urobiť.

Vo verzii 2.2 pribudli naviac ipchains (prepísané ipfw), ktoré umožňovali naviac prácu s inými protokolmi než TCP, UDP a ICMP, umožňovali reťaziť pravidlá.

S jadrom 2.4 prišla opät zmena v podobe netfilter/iptables, ktoré sa používajú až dodnes (2.6). Kód iptables bol napísaný od nuly. Pridáva vlastnosť stavového filtra, má prepracovanejší NAT, vylepšenie reťazenia pravidiel.

Netfilter

Netfilter je názov projektu a zároveň názov celej sady kernel modulov a user-space programov umožňujúcich manipuláciu s paketmi. Iptables je názov user-space programu, ktorým sa celý firewall konfiguruje.

Schéma ako prechádza paket Netfiltrom:

netfilter


Pakety putujú Netfilterom pevne danou cestou a dajú sa kontrolovať v piatich rôznych fázach:

PREROUTING
Nové, prichádzajúce pakety, ktoré ešte neprešli smerovaním. Je u nich možné zmeniť cieľovú IP adresu a port. Po smerovaní pokračujú buď do INPUT alebo do FORWARD.

INPUT
Prijaté pakety, ktoré prešli smerovaním a sú určené nejakej lokálnej službe. Dá sa určiť rozhranie, z ktorého prišli. Pokiaľ pravidlá dovoľujú, budú predané žiadanej aplikácii.

OUTPUT
Lokálne vytvorené odchádzajúce pakety, ktoré ešte neprešli smerovaním. Dá sa zistiť, ktorým rozhraním budu zrejme odoslané. Po smerovaní pokračujú do POSTROUTING.

FORWARD
Pakety, ktoré prešli smerovaním a sú určené inému počítaču. Mali by sa poslať ďalej. Je známe vstupné a výstupné rozhranie. Pokiaľ je preposlanie schválené, pokračujú do POSTROUTING. Preposielanie sa musí povoliť priamo v jadre.

POSTROUTING
Pakety, ktoré prešli smerovaním a opustia počítač. Miesto pre zmenu zdrojovej IP adresy.

Iptables

Iptables sú nástroj ako nastaviť Netfilter. Určujú pravidlá, na základe ktorých Netfiler pracuje s paketmi. Iptables operujú s tromi tabuľkami. Každé pravidlo je v niektorej tabuľke a je k nemu zároveň priradená akcia, ktorá sa vykoná s paketom, ak splňuje pravidlo. Ak sa nenájde žiadne pravidlo, tak sa vykoná implicitná akcia s paketom.

Tabuľky:

filter - slúži k filtrovaniu paketov. Prechádzajú cez ňu všetky pakety. Implicitne obsahuje tieto reťazce pravidiel:
INPUT - všetky pakety určené pre tento systém
OUTPUT - všetky pakety vytvorené týmto systémom
FORWARD - všetky pakety, ktoré tento systém smeruje

nat - slúži k nastavovaniu pravidiel pre NAT službu v paketoch. Tabuľkou prechádza iba prvý paket z každého spojenia, výsledné rozhodnutie sa aplikuje na všetky ostatné pakety tohto spojenia. Má tieto reťazce pravidiel:
PREROUTING - vyhodnocuje sa pred tým, než je urobené smerovacie rozhodnutie. DNAT.
POSTROUTING - po smerovacom rozhodnutí. SNAT.
OUT - lokálne generované pakety

mangle - nastavovanie atribútov paketov (quality of service, ...) Obsahuje všetky reťazce pravidiel

Akcie:

ACCEPT - paket je prijatý (doručený aplikácii)
DROP - paket je zahodený
REJECT - paket je zahodený a odosielateľovi je doručená správa, že paket sa nedá doručiť
DNAT - prepíše cieľovú adresu paketu na adresu definovanú voľbou --to-destination. Táto akcie je platná iba v tabuľke NAT v reťazci PREROUTING.
SNAT - prepíše zdrojovú adresu paketu na adresu definovanú voľbou --to-source. Platné v tabuľke NAT v reťazci POSTROUTING.
MASQUERADE - platné iba v tabuľke NAT v reťazci POSTROUTING.

Príklady parametrov iptables:

K nastaveniu policy nám slúži parameter -P.
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

Parametre pre prácu s pravidlami:
-N -vytvorí novú skupinu pravidiel
-I -vloží nové pravidlo na zadané miesto
-R -nahradí pravidlo na danom mieste
-D -odstráni pravidlo na danom mieste
-A -pridá nové pravidlo

Parametre špecifikujúce podmienky:
-s -zdrojová adresa napr: -s 192.168.0.1
-d -cieľová adresa
-i -vstupné zariadenie napr: -i eth1
-o -výstupné zariadenie
-p -protokol napr: -p TCP
-sport -port zdrojovej adresy
-dport -port cieľovej adresy napr: --dport 80

Parameter špecifikujúci akciu je -j napr:
-j ACCEPT
-j DROP

Príklady na konkrétne pravidlá pre iptables

# Zahodí všetky pakety, ktoré prišli z IP adresy 192.168.0.1 cez interface eth0 a sú z protokolu TCP.
$ iptables -A INPUT -p TCP -i eth0 -s 192.168.0.1 -j DROP

# Vymaže druhé pravidlo z tabuľky filter z reťazca FORWARD
$ iptables -t filter -D FORWARD 2

# Presmeruje všetky spojenia na port 8080 na 10.0.40.2:80
$ iptables -t nat -A PREROUTING -p tcp -m tcp --dport 8080 -j DNAT --to-destination 10.0.40.2:80

# Ak sa v reťazci OUTPUT objaví TCP segment, ktorý bude mať v úmysle opustiť počítač cez rozhranie eth1 a jeho odosielateľom bude 192.168.0.1 port 3000
# a príjemcom port 25 adresy 192.168.0.2, tak ho zahodí.
$ iptables -A OUTPUT -i eth1 -p TCP -s 192.168.0.1 --sport 3000 --d 192.168.0.2 --dport 25 -j DROP

NAT

$ iptables -t nat -A POSTROUTING -s 192.168.1.0/255.255.255.0 -o eth1 -j SNAT --to-source 213.81.158.226

ICMP

$ iptables -A INPUT -p ICMP -i eth0 --icmp-type 0 -j ACCEPT
$ iptables -A INPUT -p ICMP -i eth0 --icmp-type 3 -j ACCEPT
$ iptables -A INPUT -p ICMP -i eth0 --icmp-type 8 -j ACCEPT
$ iptables -A INPUT -p ICMP -i eth0 --icmp-type 11 -j ACCEPT

Príklad na stavový filter:

iptables -P FORWARD DROP
iptables -A FORWARD -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth1 -j ACCEPT

Spoofing:

iptables -N spoofing
iptables -A spoofing -s 192.168.0.0/16 -j DROP
iptables -A spoofing -s 172.16.0.0/12 -j DROP
iptables -A spoofing -s 10.0.0.0/8 -j DROP

iptables -A INPUT -i eth0 -j spoofing
iptables -A FORWARD -i eth0 -j spoofing

Literatúra