Linux E X P R E S

Facebook

Packet Filter z OpenBSD nielen v OpenBSD

konzole.jpg

Nejeden užívateľ Linuxu sa z rôznych dôvodov obráti aj na iný Unix najmä z dôvodu chuti vyskúšať čosi nové. O OpenBSD je známe, že poskytuje ultra bezpečné prostredie. Komunita open source môže byť tímu OpenBSD vďačná aj za kód OpenSSH, ktorý uzrel svetlo sveta už v OpenBSD 2.6. Aj firewallingové možnosti OpenBSD sú vynikajúce, preto stručne popíšeme paketový filter PF bez potreby zvýrazňovať zložitejšie implementácie - tak, aby ktokoľvek mohol rýchlo začať, či už vo vlastnej inštalácii OpenBSD alebo pomocou dostupných live CD.


Firewall z trochu iného kraja

Packet Filter (PF)je uvedený i na stránkach TheGeekStuff.com ako jedno z piatich najlepších firewall riešení aj pre Linux. Cesta však neexistuje len z Linuxu do OpenBSD, ale aj naopak. OpenBSD má vo svojej poslednej verzii 4.7 nástroj newfs_ext2fs na vytváranie linuxovského systému EXT2, a nielen to - je tu pravdaže aj linuxovská emulácia, pomocou ktorej na OpenBSD zbehnete mnohé aplikácie Linuxu.

PF sa prvýkrát objavil v OpenBSD 3.0, a to už koncom roka 2001 - nahradil tak predtým používaný IPFilter, z ktorého si do istej miery ponechal syntax. PF umožňuje QoS a aj ALTQ (ALTernate Queueing framework), čo sú implementácie, pomocou ktorých sa dajú napríklad riadiť toky dát, t. j. kontrolovať ich priepustnosť (rýchlosť). PF samozrejme podporuje aj NAT (Network Address Translation) - ide teda o vyspelý firewall s jedinečnými vlastnosťami.

PF sa prvýkrát objavil mimo OpenBSD vo verzii FreeBSD 5.3 a NetBSD 3.0. Hoci má FreeBSD svoj natívny (vlastný) firewall ipfw, PF možno aktivovať bez akýchkoľvek zložitejších inštalačných procedúr ako modul jadra.

Základné použitie PF - OpenBSD

PF číta svoj konfiguračný súbor /etc/pf.conf, a to aj počas bootovania a aj v prípade, že PF spustíte ručne. V prípade, že ho spúšťate ručne, stačí zadať:

Pre aktiváciu PF: pctl -e

Pre načítanie pravidiel firewallingu zo súboru - môžete špecifikovať aj iný súbor: pfctl -f /etc/pf.conf

Pre deaktiváciu PF: pfctl -d

PF beží v jadre a pri aktivácii implementuje pravidlá firewallingu zo súboru /etc/pf.conf (môžete zadefinovať aj iný súbor - napríklad /etc/pf-pokus.conf). PF je v OpenBSD už automaticky aktivovaný.

Pre PF existuje aj niekoľko grafických nástrojov - PFPro je GUI pre vytváranie vašich pravidielPre PF existuje aj niekoľko grafických nástrojov - PFPro je GUI pre vytváranie vašich pravidiel

Základné použitie PF - FreeBSD

Do jadra treba načítať modul PF príkazom kldload pf a potom budete pracovať rovnako ako v OpenBSD pomocou pfctl.

PF a Linux

pf4lin

Okrem portu pf4lin sa mi žiaľ nepodarilo nájsť už nič lepšie pre Linux. Tento port vychádza zo zdrojových súborov PF z roku 2001 a je určený pre linuxovské jadro 2.6.3, na modernejších systémoch Linux sa mi ho nepodarilo skompilovať. Je to stále, ako uvádza stránka projektu, experimentálny port. Ak sa kompilácia predsa len podarí, vygeneruje sa modul PF, ktorý užívateľ načíta do linuxovského jadra pomocou load.sh z balíčku pf4lin. Potom pomocou vygenerovaného binárneho príkazu pfctl možno tento firewall spustiť rovnako ako v OpenBSD a aj s rovnakým konfiguračným súborom (/etc/pf.conf).

Pre Linux je samozrejme možné nasadiť aj softvérové riešenia (router, firewall) na báze PF (OpenBSD, FreeBSD, NetBSD) ako live CD či jednodisketové distribúcie na počítači, ktorý bude slúžiť ako firewall.

Súbor /etc/pf.conf - Pravidlá v skratke

PF je príliš obsiahla problematika, ktorá by sa zmestila i do samostatnej knihy, čo v tomto prípade nie je možné urobiť, preto si priblížime iba základ - východiskový bod, z ktorého neskôr každý užívateľ môže pokračovať štúdiom manuálových stránok či tipov a trikov, ktorých je na internete neúrekom.

Súbor /etc/pf.conf pozostáva z piatich častí: 1) makrá (macros), 2) tabuľky (tables), 3) možnosti (options), 4) radenie do fronty (queueing) a 5) filtrovacie pravidlá (filter rules).

  1. Makrá uľahčujú prácu napríklad so sieťovými zariadeniami, ktoré - pokiaľ si ich na začiatku súboru pf.conf zadefinujete, pri ich výmene zmeníte neskôr iba zopár riadkov bez potreby prepisovať všetky riadky v súbore pf.conf, ak ste tam náhodou zadali odkazy na fyzické sieťové karty ("fxp0" je názov sieťového zariadenia z prostredia OpenBSD; v prípade pf4lin použijete názov zariadenia tak, ako ho pozná Linux):

    ext_if = "fxp0" # Externá sieťová karta
    int_if = "fxp1" # Interná sieťová karta

    Namiesto sieťových zariadení môžete pravdaže ako makrá použiť aj IP adresy: host1 = "192.168.1.1"

  2. Do tabuliek možno uviesť zoznam IP adries, ktoré napríklad povolíte (alebo zakážete):

    table <goodguys> { 192.0.2.0/24 }
    table <rfc1918> const { 192.168.0.0/16, 172.16.0.0/12, \
      10.0.0.0/8 }
      table <spammers> persist
    block in on fxp0 from { <rfc1918>, <spammers> } to any
      pass in on fxp0 from <goodguys> to any
  3. V časti možnosti si nastavíte rôzne voľby pomocou príkazu set:

    set loginterface fxp0 # slúži pre nastavenie sieťovej karty, z 
      ktorej bude PF zhromažďovať štatistiku.
  4. Queueing - radenie do fronty - slúži pre kontrolu priepustnosti a stanovovanie priorít pre pohyb paketov.

  5. Filtrovacie pravidlá slúžia pre selektívne povoľovanie alebo blokovanie dátových paketov. Môžete si nimi nastaviť akúkoľvek blokovaciu politiku.

Pomocou príkazu pass out povoľujete komunikáciu s vonkajším svetom smerom od vás (aby pakety mohli odchádzať) a pomocou pass in zase povoľujete, aby pakety mohli prichádzať k vám.

Nasledovným riadkom v pf.conf takto pomocou pass out povolíte UDP (pre DNS):

pass out on $ext_if proto udp from ($ext_if) to any keep state queue (q_def1)

Pre zákaz použijete block (t. j. napríklad zakážete isté IP adresy):

block in quick on $ext_if from <blackliststatic> to any flags S/SA

<blackliststatic> je údaj z časti table (tabuľka), ktorý v koexistencii s vyššie uvedeným príkazom musíte mať tiež zadefinovaný.

Súbor /etc/pf.conf - Praktická ukážka

Pri editácii je potrebné ponechať vyššie uvedené poradie (1. macros, 2. tables, 3. options, 4. queueing, 5. filter rules). Nasledovný jednoduchý /etc/pf.conf súbor povoľuje základný prístup na internet (web, dns, ping, ssh a ftp):

Súbor /etc/pf.conf:

# Znak "#" (komentár) je tu ponechaný úmyselne, aby ste tento súbor pf.conf mohli ihneď použiť
if = "fxp0" # ak kdekoľvek neskôr v pf.conf uvediete   (premennú) $if, systém to pochopí tak, že ide o zariadenie "fxp0"
scrub in all # scrub je normalizácia paketov (poskladanie fragmentovaných paketov, ich "vyčistenie")
# Politika blokovať všetko hneď na začiatku je najrozumnejšia, pretože PF potom povolí iba to, čo mu jasne povieme:
block in all # všetko smerom k nám sa zablokuje
block out all # všetko od nás smerom von sa zablokuje
# antispoof je ochrana proti situácii, keď nejaký užívateľ falšuje zdrojovú IP adresu:
antispoof quick for $if
pass in quick on lo0 all # povoľujete komunikáciu na localhost
pass out quick on lo0 all # detto
# povolíte icmp (ping):
pass out on $if proto icmp from any to any keep state
# povolíte UDP (prístup na DNS):
pass out on $if proto udp from any to any port 53 keep state
# povolíte SSH (smerom von):
pass out on $if proto tcp from $if to any port 22 flags S/SA keep state
# povolíte prístup na internetové (www) stránky:
pass out on $if proto tcp from $if to any port 80 flags S/SA keep state
# povolíte prístup na bezpečné www stránky - https (banky atď.):
pass out on $if proto tcp from $if to any port 443 flags S/SA keep state
# povolíte prístup na ftp servery:
pass out on $if proto tcp from $if to any port { 21 , 20 } flags S/SA keep state

Vyššie uvedený súbor som pravdaže odskúšal na OpenBSD a všetko fungovalo tak, ako je uvedené v komentároch.

Ak povoľujete prístup, môžete pravdaže špecifikovať aj viac portov v jednom riadku:

pass out on $if proto tcp from $if to any port { 80 , 443 } flags S/SA keep state

Core Force je bezpečnostné a voľne dostupné riešenie s PF inkorporované do prostredia WindowsCore Force je bezpečnostné a voľne dostupné riešenie s PF inkorporované do prostredia Windows

Záver

Cieľom tohto článku nie je porovnávať PF s natívnym linuxovským riešením pre firewall - nie je správne podávať polovičaté informácie. Aby odpoveď bola nepolovičatá - jasná a adekvátna, vyžadovala by si obsiahle a časovo náročné testovanie, čo by bola asi už iná téma. V oboch komunitách (BSD vs. Linux) prevládajú niekedy názory naberajúce až formu "náboženskej zaujatosti". I keď aj na linuxovských fórach sa píše, že PF je skutočne vynikajúci a že má zrozumiteľnejšiu syntax, je to každého voľba, čo si vyberie. Sú však aj užívatelia, ktorí si túto otázku kladú opakovane (možno z dôvodu neprítomnosti viacerých solídnych porovnávacích štúdií), preto aspoň uvediem odkaz na fórum na ossnews.com, kde je táto problematika aspoň čiastočne zodpovedaná.

Diskuze (0) Nahoru