Firewall - zariadenie proti šíreniu ohňa

Michal Beňo, xbeno@fi.muni.cz

Obsah

Motivácia

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.

  • Hardwarové / Softwarové
  • Rozdelenie Firewallow

    Firewally je možné rozdeliť podľa viacerých kritérií:
    1. paketový filter (Packet Filter)
    2. stavový firewall (Stateful inspection firewall)
    3. aplikačné proxy (Application proxy firewall gateway)
    4. analyzátor paketov
    5. NAT (Network Address Translation)

    Paketový filter (Packet Filter)

    Je nejjednoduchším typom firewallu. Pracuje na princípe kontroly hlavičiek prochádzajúcích paketov a rozhoduje o ich daľšom bytí či nebytí. Môže ich zahodiť, preposlať ďalej, alebo inak zpracovať.

    Paketový filter má radu výhod:

    rýchlosť,nenáročnosť
    využívá velmi málo výkonu CPU, väčšina operácií sa vykonáva jadre systému
    přispôsobivosť
    na ľubovolný typ protokolu
    transparentnosť
    nie je treba upravovoať aplikácie
    bezstavovosť
    nevytvára permanentné spojenie

    Ale taktiež radu nevýhod:

    sleduje iba hlavičky paketov
    nevie ošetřiť data od transportnej vrstvy výššie
    omedzené logovacie možnosti
    logovanie veľmi zaťažuje procesor
    nepodporuje autentizačné mechanismy
    maximálně ide autentizovať pomocou IP adries
    konfigurácia filtrov
    na nepovolenú potrebú službu obvykle prídete, ale na povolenú nepotrebnoú službu nemusíte prísť nikdy
    zneužitíe nedokonalosti TCP/IP protokolu

    Stavový firewall (Stateful inspection firewall)

    Väčšinou nadstavba paketového filtru. Dáva pozor na všetky platné tcp spojenia a ich porty, ktoré ukládá do tabuľky. V případe, že dorazí paket, ktorý neodpovedá žiadnemu platnému spojeniu uplatní sa nan činnost definovaná politikou(zahodenie, predanie ...).
    Nevýhoda: funguje iba na TCP/IP

    Aplikačné proxy (Application proxy firewall gateway)

    Je brána, ktorá prevádza kontrolu na aplikačnej vrstve. Všetky pakety procházajúce zo siete musía prejsť touto bránou.

    Výhody

    možnosti autentizácie
    je možné používať autentizačné mechanismy pre každého užívateľa zvlášť
    logovacie možnosti
    všetky požiadavky prechádzajúce cez proxy. Dajú se lahko kontrolovať a podrobne logovat

    Nevýhody

    úprava aplikácií
    tak aby se pripojovali cez proxy
    náročnost na výkon
    nutnosť mať pre každú službu/aplikáciu vlastný proxy, stojí niečo z výkonu stroja na ktoromm běží, obvykle sa jednotlivé aplikačné proxy umiestňujú na samostatné stroje v demilitarizované zóne

    Analyzátor paketov

    Výstupom sú väčšinou logovacie, varovné alebo chybové správy. Môže rovnako blokovať prístup k portom(prevencia proti port scanom). Mezi analyzátory paketov patrí napríklad snort alebo portsentry.

    NAT

    Network adress translation je prepisovanie zdrojovej alebo cieľovej adresy (príp. aj portov) v IP paketoch pri ich prechode cez router alebo firewall. Väčšinou sa používa, aby sa stroje v privátnej sieti (192.168.x.x, 10.x.x.x a pod.) mohli pripojiť k Internetu pomocou jedinej verejnej IP adresy. Čiastočne sa takto rieši nedostatok verejných IP adries. Nevýhodou je, že takéto riešenie poskytuje len jednosmernú konektivitu, a to zvnútra privátnej siete von (čo ale zas v určitých prostrediach poskytuje vyššiu bezpečnosť).

    Cesta paketov

                 ________                         _____         _________
                /        \                       /     \       /         \
    príchádza-->|PREROUTING|-->[smrrovacie]---->|FORWARD|---->|POSTROUTING|--> odchádzajúce
    pakety      \________/    [rozhodnutie]      \_____/       \_________/     pakety
                                 |                                 ^
                                 v                    ____         |
                                _|_                  /    \        |
                               /   \                |OUTPUT|-->[smerovacíe ]
                              |INPUT|                \____/    [rozhodnutie]
                               \___/                   ^
                                 |                     |
                                 `--> lokálny proces --'
    
    

    Firewally v Linuxe

    V kerneli rady 2.0 2.0 sa používal ipfwadm. Ipfwadm obsahovalo štyri moduly (input, output, forward a accounting), v ktorých boli jednotlivé pravidlá, podľa ktorých sa riadil tok dát. Keďže ipfwadm neumožňovalo pracovať s jednotlivými fragmentami paketov a inými protokolmi ako TCP, UDP a ICMP, v jadre rady 2.2 bol prepísaný a nahradený ipchains. Okrem toho má ipchains jednoduchšiu konfiguráciu a umožňuje reťaziť pravidlá.

    Problém s ipchains je v tom, že je to stále bezstavový firewall. Toto rieši netfilter/iptables, ktorý je v jadre prítomný od verzie 2.4. netfilter má tiež prepracovanejší NAT subsystém a vylepšil mechanizmus reťazení pravidiel tým, že reťazce pravidiel sú uložené v tabuľkách.

    V BSD systémoch je situácia jednoduchšia. V OpenBSD sa používa PF (Packet Filter), v minulosti sa používal IPFilter Darrena Reeda, ktorý bol ale nahradený kvôli licenčným problémom. Vo FreeBSD systémoch sa dnes používa ipfw (ipfirewall).

    Netfilter/iptables

    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. Ako iptables sa tiež často označuje celý balík netfilter/iptables.

    Konfigurácia jadra

    Aby sme mohli používať iptables, musí byť v jadre zakompilovaná podpora pre netfilter, a to buď priamo v jadre alebo ako moduly. Hlavný modul má názov ip_tables a na ňom závisia ostatné moduly (napr. ip_conntrack, ipt_state, iptable_filter...).

    Networking -->
        Networking options -->
           [*] Network packet filtering (replaces ipchains) -->
               IP: Netfilter Configuration -->
                    <M> Connection tracking (required for masq/NAT) 
                        (+ moduly, ktoré potrebujeme)
                    <M> IP tables support (required for filtering/masq/NAT)  
                        (+ moduly, ktoré potrebujeme)

    Ako funguje iptables

    Riadenie toku paketov prebieha v sieťovej vrstve na úrovni jadra. V jadre sú uložené tabuľky (tables) filter, nat, mangle a raw. Každá tabuľka obsahuje reťazce pravidiel (chains), ktoré sú buď preddefinované, alebo užívatelom definované. Preddefinované reťazce má každá tabuľka svoje (napr. INPUT, OUTPUT, FORWARD v tabuľke filter, PREROUTING, OUTPUT, POSTROUTING v tabuľke nat). Okrem nich si užívateľ môže definovať svoje vlastné reťazce pravidiel, ktoré môže volať z preddefinovaných podobne ako subrutinu v programe. Každý reťazec obsahuje zoznam pravidiel (rules), ktoré určujú, čo sa bude s paketmi robiť.

    Každý paket, ktorý chce byť odoslaný alebo prijatý z/na sieťové rozhranie počítača, musí prejsť cez proces overovania v príslušnej tabuľke a reťazci pravidiel. Pravidlá sa vyberajú sekvenčne v poradí, v akom sa nachádzajú v tabuľke. Ak paket vyhovie nejakému pravidlu, ďalej sa nepokračuje a vykoná sa definovaná operácia (target), napr. prijatie/zahodenie paketu. Ak paket nevyhovie žiadnemu pravidlu v reťazci, vykoná sa implicitná operácia, ktorú má každý reťazec definovanú (policy).

    Konfigurácia

    Netfilter/iptables nemajú žiadny konfiguračný súbor v tradičnom zmysle. Na konfiguráciu slúži program iptables, pomocou ktorého sa manipuluje s pravidlami jednotlivých tabuliek. Pri používaní programu iptables sa ako parameter uvádza tabuľka a reťazec pravidiel, s ktorými chceme pracovať, typ operácie a špecifikácia pravidla.

    Niektoré parametre programu iptables
    -t tabuľka, s ktorou budeme pracovať
    -A pridanie pravidla na koniec reťazca
    -D zmazanie pravidla z reťazca
    -F vymazanie všetkých pravidiel v tabuľke alebo reťazci
    -P nastaví politiku reťazca (čo sa má urobiť, ak paket nevyhovie žiadnemu pravidlu)
    -L vypíše obsah tabuľky
    -N vytvorí nový užívateľom definovaný reťazec pravidiel
    -s zdrojová IP adresa paketu
    -d cieľová IP adresa paketu
    -i zdrojové sieťové rozhranie (eth0,...)
    -o cieľové sieťové rozhranie
    -p protokol (z /etc/procotols)
    -m použije sa rozširujúci modul, ktorý môže mať vlastné parametre
    -j čo sa má s paketom urobiť, ak vyhovie tomuto pravidlu (napr. ACCEPT, DROP, užívateľom definovaný reťazec pravidiel)
    ...

    Príklady tabuliek a reťazcov pravidiel:

    Tabuľka filter  
    INPUT pravidlá v tomto reťazci pravidiel sa vyhodnocujú na paketoch prichádzajúcich pre tento počítač.
    OUTPUT pravidlá v tomto reťazci sa vyhodnocujú na paketoch odchádzajúcich z tohto počítača.
    FORWARD pravidlá v tomto reťazci sa vyhodnocujú na paketoch, ktoré prechádzajú cez tento počítač.
    Tabuľka nat  
    OUTPUTlokálne generované pakety
    PREROUTINGprichádzajúce pakety
    POSTROUTINGodchádzajúce pakety

    Každé pravidlo musí špecifikovať, čo sa má s paketom urobiť, ak vyhovie jeho podmienkam.

    Príklady operácii  
    ACCEPT paket sa pustí ďalej
    DROP paket sa zahodí
    REJECT paket sa zahodí a odosielatelovi sa o tom pošle správa (vo forme ICMP paketu)
    DNAT platný len v tabuľke nat, modifikuje cieľovú adresu a port, na ktorý sa paket ďalej odošle, podľa parametru --to-destination
    SNAT platný len v tabuľke nat, modifikuje zdrojovú adresu paketu podľa parametru --to-source
    MASQUERADE platný len v tabuľke nat. Podobne ako SNAT mení zdrojovú adresu a port paketu, ale IP adresu nastaví na adresu firewallu a port podľa parametru --to-ports. Používa sa pri dynamicky prideľovaných IP adresách (dialup).
    REDIRECT platný len v tabuľke nat. Mení cieľovú IP adresu na adresu firewallu a port podľa parametru --to-ports.
    RETURN v užívatekskom reťazci, zastaví sa prehľadávanie aktuálneho reťazca a pokračuje sa ďalším pravidlom vo volajúcom reťazci.

    Detailná dokumentácia je v iptables(8).

    Príklady nastavenia, použitia

    Mať zapnutú ochranu pred IP spoofingom (falšovanie zdrojové IP adresy). To znamená, že blokuje príchodzie pakety z takých adries, ktoré by mali podľa routovacej tabulky (route) príjsť z iného rozhrania.

    echo "1" > /proc/sys/net/ipv4/conf/eth0/rp_filter
    
    Pri konfigurovaní silného firewallu, je dobré nastavit implicitnú politiky a explicitne povolovať výnimky. Implicitné politiky sa vytvárajú len pre vstavané reťazce ( INPUT, OUTPUT, FORWARD ).
    iptables -P INPUT DROP    # všechny příchozí pakety budeme zahazovat
    iptables -P OUTPUT ACCEPT # všechny odchozí pakety budeme pouštět
    iptables -P FORWARD DROP  # všechny přeposílané pakety budeme zahazovat
    
    všetky prichádzajúce pakety, ktoré sú súčasťou, alebo nejako súvisí s už vytvorenými spojeniami povolit.
    iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    

    Nezabudnúť povolit loopback (zpetné rozhranie lo )

    iptables -A INPUT -i lo -j ACCEPT
    
    Ďalej povoliť príchodzie spojenia, podľa gusta. Z alphi nezabudnúť povoliť forwardovanie.

    Ďalšie príklady konfigurácie:

    # Zahodí všetky pakety z 10.0.0.1 do 10.0.40.2
    $ iptables -t filter -A FORWARD -s 10.0.0.1 -d 10.0.40.2 -j DROP
    
    # Zobrazí tabuľku filter
    $ iptables -t filter -L
    
    # Vloží na začiatok reťazca pravidlo o prepúšťaní ICMP paketov
    $ iptables -t filter -I FORWARD 1 -p icmp -j ACCEPT
    
    # Vymaže druhé pravidlo z tabuľky filter z reťazca FORWARD 
    $ iptables -t filter -D FORWARD 2
    
    # Povolí http protokol
    $ iptables -t filter -I FORWARD 2 -s 10.0.0.1 -d 10.0.50.2 -p tcp -m \
    state --state NEW,ESTABLISHED -m tcp --dport http -j ACCEPT
    
    # 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.50.2:80

    Aby sme tieto príkazy nemuseli písať stále dokola, existujú programy iptables-save a iptables-restore. iptables-save vypíše obsah všetkých tabuliek vo formáte prepínačov programu iptables. Výstup tohoto programu sa dá použiť ako vstup programu iptables-restore, ktorý podľa tohoto súboru nastaví iptables.

    Nevýhoda tohoto prístupu je, že ak máme napr. 200 podobných pravidiel, ktoré sa líšia len v nejakom jednom čísle, tak vo výstupe programu iptables-save bude 200 podobných riadkov. Preto je niekedy lepšie napísať si vlastný skript (napr. v bashi), ktorý bude volať program iptables. Takýto skript môže obsahovať rôzne cykly a podmienky, takže tento spôsob konfigurácie je oveľa flexibilnejší.

    Odkazy