Packet Filter
Packet Filter
Sisukord
Sissejuhatus
(lüh. PF) on OpenBSD tulemüür, alates OpenBSD versioonist 3.0, mille on kirjutanud 2001. aasta suvel Daniel Hartmeier. Packet Filter kirjutati asendamaks Darren Reed'i kirjutatud IPFilter tulemüüri, kes sattus OpenBSD arendajatega konflikti, keelates oma koodi muuta. Darren Reed väitis, et tema kirjutatud tulemüür IPFilter kasutab BSD litsentsi, kuid tegelikult oli ta BSD litsentsi sõna-sõnalt kopeerinud, jättes välja vaid osa, mis lubab koodi muutmist. Tülide lahendamise asemel otsustas OpenBSD projektijuht, Theo De Raadt uue tulemüüri kasuks. 29.05.2001 eemaldati IPFilter'i kood OpenBSD lähtekoodist. Järgnevad kaks kuud oli OpenBSD operatsioonisüsteem ilma tulemüürita, Packet Filter jõudis OpenBSD lähtekoodi 24.06.2001. Paaril järgneval kuul töötasid arendajad meeletu koormusega, ning OpenBSD 3.0 versiooni valmides sisaldas see ka juba Packet Filter tulemüüri. Oma eluaja jooksul on see tulemüür väga kiirelt arenenud ning omab teiste tulemüüride ees mitmeid eeliseid. Tulemüüri reeglite süntaks on sarnane IPFilter'i omale, kuid seda on lihtsustatud kasutusmugavuse tõstmiseks. Packet Filter on tihedalt seotud võrgunduses levinud NAT ning QoS tehnoloogiatega, lubamaks suuremat paindlikkust ning vastupidavust. Packet Filter on porditud ka FreeBSD, NetBSD ning DragonFlyBSD operatsioonisüsteemidele.
Võimalused
Packet Filter on, nagu iga teinegi UNIX-i rakendus, väga paindlik. Seega arendajatel on lihtne koodi uuendada ning uusi võimalusi lisada. Packet Filter areneb väga kiiresti ning pakub palju võimalusi, mida tihtipeale leiab ainult tasulistest tulemüüridest. Siinkohal on lahti seletatud tähelepanuväärseimad võimalused.
NAT
"Network Address Translation". Privaatse või registreerimata IP-aadressi asendamine ametliku IP-aadressiga. NAT annab organisatsioonidele suurema paindlikkuse aadresside kasutamiseks oma kohtvõrkudes ja lubab kasutajatel vastavalt vajadusele ühiselt kasutada piiratud arvu registreeritud IP-aadresse. NAT’i kasutamine teeb ka raskemaks võrgu ründamise väljastpoolt, sest sisemisi IP-aadresse ei edastata üle Interneti. Võrguaadresside ümbernimetamine toimub harilikult ruuteris või tulemüüris.
QoS
"Quality of Service". Tegeleb andmeedastuskiiruste, vigade esinemise sageduste ja teiste karakteristikute mõõtmise, parandamise ja teatud määral garanteerimisega. QoS on eriti oluline laiaribalise video- ja multimeediuminfo pideva ülekande puhul. Sellise info töökindel edastamine üle avalike sidevõrkude on tavalisi protokolle kasutades raske. Interneti ressursside reserveerimise protokolli (RSVP) kasutamisel saab läbi lüüsihosti liikuvaid pakette organiseerida eelnevalt paika pandud poliitika ja reserveerimiskriteeriumide alusel.
ALTQ
"ALTernate Queueing framework for BSD UNIX". ALTQ võimaldab pakettide järjestamist ning teisi QoS-i komponente, mis on vajalikud QoS-i edukaks teostamiseks võrgus, seda kasutatakse enamasti BSD operatsioonisüsteeme kasutatavates ruuterites. ALTQ on osa FreeBSD ja NetBSD distributsioonidest ning on integreeritud Packet Filter tulemüüri.
CARP
"The Common Address Redundancy Protocol". CARP on protokoll, mis lubab samas sisevõrgus asuvatel arvutitel jagada IP-aadressite paari, peamine eesmärk on võimaldada tagavararuuteri kasutamist. Juhul, kui ruuter peaks mingil põhjusel töökõlbmatuks muutuma, näiteks riistvara vea tõttu, saab tagavararuuter tema töö kohe üle võtta, tekitamata võrgus tõrkeid ning jäädes kasutajatele märkamatuks.
=Pfsync
Pfsync on virtuaalne võrguliides, mis peegeldab Packet Filter tulemüüri tabelis tehtud muudatusi, tcpdump käsku kasutades saab seda reaalajas jälgida, samuti oskab pfsync enda muudatusi üle võrgu laiali saata ning neid ka vastu võtta, näiteks mitmete võrgus asuvate tulemüüride reeglite sünkroniseerimiseks.
Authpf
Authpf on kasutajaliides autentivatele võrgulüüsidele, autentiva võrgulüüsi kasutamiseks tuleb kasutajatel ennast tuvastada enne, kui lüüs nende võrguliikluse läbi laseb. Seda saab kasutada näiteks ainult kasutaja sessiooni ajal kehtivate tulemüürireeglite automatiseeritud loomiseks ja kustutamiseks.
Ftp-proxy
Ftp-proxy on OpenBSD implementatsioon puhverserverist FTP-protokollile, see võimaldab NAT-ruuteri taga asuvatel võrguklientidel kasutada FTP-protokolli, olles tulemüüri ja välise liikluse vahendaja, lisades ning eemaldades vajadusel Packet Filter tulemüüri reegleid.
Kasutamine
Aktiveerimine
Packet Filter tulemüüri käivitamiseks OpenBSD operatsioonisüsteemi käivitudes tuleb lisada /etc/rc.conf.local rida pf=YES, ajutiselt saab tulemüüri käivitada ning sulgeda pfctl käsu abil.
Seadistamine
Packet Filter laeb operatsioonisüsteemi käivitumisel vaikimisi reeglid /etc/pf.conf failist. See on tekstifail, mis laetakse pfctl käsuga ning sisaldab tulemüüri reegleid. Erinevatele rakendustele saab määrata ka teistes failides asuvaid reegleid, seadistusfailis olevaid tühje ridu ignoreeritakse. Seadistusfail pf.conf koosneb seitsmest osast.
Makrod
Makrod on kasutaja poolt määratud muutujad, mis kujutavad mingit hulka IP-aadresse, portide numbreid või võrguliideseid, makrod võimaldavad reegleid lihtsamini loetavaks ja kergemini hallatavaks muuta. Makrod võivad sisaldada numbreid või tähti, neid saab laiendada ka nimekirjadeks ning grupeerida, hilisemalt kasutatakse makrode muutujanimena dollarimärki. Siinkohal on välja toodud mõned näited reeglite lihtsustamiseks.
extIF = "xl0" See makro määrab välise võrguliidese xl0 nimeks extIF, see lihtsustab hilisemates reeglites välise võrguliidese kasutamist ning välistab võimaluse teiste liidestega segamini ajada. kliendid1 = "{ 192.168.0.2, 192.168.0.3 }" See makro määrab IP-aadressite hulga 192.168.0.2-192.168.0.3 ühise grupi alla, see lihtsustab hilisemates reeglites mingi hulga klientide poole pöördumist. Näiteks ühe reegliga saab kogu grupil keelata liikluse, ei pea igale kliendile eraldi reeglit tegema. kliendid1 = "{ 192.168.0.2, 192.168.0.3 }" kliendid2 = "{ 192.168.1.2, 192.168.1.3 }" kliendidKOKKU = "{" $kliendid1 $kliendid2 "}"
Need makrod määravad IP-aadressite hulgad gruppideks ning loovad ühise grupi, mis lihtsustab kõikidele klientidele ühiste reeglite kirjutamist.
Tabelid
Tabelites hoitakse IP-aadresse. Otsingud tabelitest on märksa kiiremad kui otsingud nimekirjadest, mistõttu sobivad tabelid suure hulga aadressite hoidmiseks. Tabeleid saab siduda ka ümbersuunamise ning filtrite reeglitega. Tabeleid tähistatakse nurksulgudega. Tabelitele saab lisana omistada kahte erinevat olekut - konstantne e. const ning jääv e. persist. Konstantse tabeli puhul saab tabelit muuta ainult laadimata olekus, muidu saab neid laadida ka töötades, pfctl käsu abil. Jääva olekuga tabelit hoitakse mälus ka siis, kui sellega ükski reegel seotud pole, muidu kustutatakse tabel viimase seotud reegli kustutamisel automaatselt. Tabeleid saab laadida ka tekstifailidest, kasutades file muutujat.
table <kliendid1> { 192.168.1.0/24, !192.168.1.1 }
Kliendid1 tabelist eraldatakse 192.168.1.1 aadressiga klient.
table <kliendid2> persist file "/etc/kliendid2nimekiri"
Kliendid2 tabel loetakse sisse failist /etc/kliendid2nimekiri, jäävasse olekusse.
block in on xl0 from <kliendid2>to any pass in on xl0 from <kliendid1> to any
Kliendid2 grupile keelatakse ning kliendid grupile lubatakse väline juurdepääs.
Muutujad Packet Filteri tööprotsessi muutmiseks.
set block-policy option - Määrab filtrite ülesanded pakettide blokeerimisel set debug option - Määrab tagasiside taseme set fingerprints file - Määrab avalike võtmete faili set limit option value - Määrab PF piirangud set loginterface interface - Määrab logiliidese, vaikimis pflogd0 set optimization option - Määrab optimeerimise taseme set skip on interface - Määrab ignoreeritavad võguliidesed set state-policy option - Määrab pakettide hoidmise reeglid set timeout option value - Määrab ooteaja
set loginterface dc0
Määrab logimisliideseks dc0 võrguliidese.
set skip on lo0
Määrab Io0 liidese ignoreeritavaks, sellele seadmele ei rakendata ühtegi reeglit.
Küürimine Küürimine on pakettide normaliseerimine, mille eesmärk on vältida fragmenteerunud pakettide paljunemist, keelatakse ka valede lippudega TCP-paketid. Küürimise süntaks on väga sarnane filtrite ülesehitusega ning seda on lihtne oma tulemüüri juurutada.
scrub on xl0 all reassemble tcp
Normaliseerib kõik TCP-paketid, mis läbivad xl0 võrguliidest.
Järjekorrad
Operatsioonisüsteemi valitud pakettide järjekorrast sõltub võrgu jõudlus, näiteks seades suuremat kiirust vajavad protokollid teistest ettepoole ja seega tõstes töökiirust. Pakettide järjestamise strateegiad tulenevad valitud scheduler'ist ehk plaanurist. Packet Filter toetab pakettide järjestamist klassi (CBQ) ning paketi prioriteedi (PRIQ) järgi.
altq on xl0 cbq bandwidth 2Mb queue
Määrab xl0 võrguliidesele CBQ plaanuriga 2Mb piirangu.
Tõlkimine
Võrguaadressite tõlkimine (NAT) võimaldab peita sisevõrgu kliendid ühe välise IP-aadressi taha, suurendamaks turvalisust sisevõrku sissepääsu raskendades.
nat on xl0 from 192.168.1.0/24 to any -> 192.168.2.0
Peidab kõik 192.168.1.0/24 alamvõrgust tulevad IP-aadressi 192.168.2.0 taha.
ftp-proxy vahendab NAT tulemüüri taga olevale klienti
Selleks, et NAT tulemüüri taga asuvad kliendid saaksid ftp serveritega suhelda tuleb lisada paketifiltri seadistusfaili NAT sektsiooni
nat-anchor "ftp-proxy/*" rdr-anchor "ftp-proxy/*" rdr on $intIF proto tcp from any to any port 21 -> 127.0.0.1 port 8021
ning reeglite sektsiooni
anchor "ftp-proxy/*"
ning käivitada soketil 127.0.0.1:8021 programm ftp-proxy
# ftp-proxy -r
-r võtit soovitatakse kasutada, et ka vanemad ja nö isikupärasemad kliendid toimiks. Selleks, et ftp-proxy bootimisel käivituks peab olema /etc/rc.conf.local failis rida
ftpproxy_flags="-r"
ftp-proxy vahendab NAT tulemüüri taga olevat ftp serverit
Selleks, et ftp kliendid saaksid internetist pöörduda NAT tulemüüri taga asuva ftp serveri poole, tuleb lisada paketifiltri seadistusfaili NAT sektsiooni
nat-anchor "ftp-proxy/*" rdr-anchor "ftp-proxy/*"
ning reeglite sektsiooni
pass in on $extIF inet proto tcp to $extIF port 21 \ flags S/SA keep state anchor "ftp-proxy/*"
ning käivitada programm ftp-proxy, mis kuulab tulemüüri välisel seadmel aadressil 192.168.10.200 pöördumisi ja vahendab need sisevõrgus aadressil 192.168.1.3 töötavale ftp serverile
# ftp-proxy -R 192.168.1.3 -p 21 -b 192.168.10.200
Selleks, et ftp-proxy bootimisel käivituks, peab olema /etc/rc.conf.local failis rida
ftpproxy_flags="-R 192.168.1.3 -p 21 -b 192.168.10.200"
Kui tulemüüri vahendab kummastki suunas ftp liiklust, siis töötab kaks ftp-proxy eksemplari.
Filtrid
Pakettide filtreerimine on valikuline andmete voo keelamine ja lubamine, tuginedes kindlaksmääratud filtritele. Filtrites määratakse ära, millised paketid läbi lastakse ja millised peatatakse. Saabunud paketti võrreldakse filtritega, filtrid läbitakse järjestikuliselt, viimases filtris määratud tegevus rakendatakse tööle, kui tegevust ei leita, on vaikimisi seade pakett läbi lasta.
Reeglite süntaks
Reeglite lihtsustatud süntaks :
action [direction] [log] [quick] [on interface] [af] [proto protocol] \ [from src_addr [port src_port]] [to dst_addr [port dst_port]] \ [flags tcp_flags] [state]
action - Pakettide rakendamine direction - Pakettide suund log - Logitase quick - Kui pakett vastab quick muutujaga reeglile, kontrollitakse vaid esimest reeglit interface - Võrguliides af – IP-protokolli tüübi määrang src_addr, dst_addr - Päritoluaadress ning suundaadress src_port, dst_port - Päritoluport ning suundport tcp_flags - Määrab pakettide TCP-lipud state - Pakettide hoidmise reeglid
Lisavõimalused
Packet Filter on ünsa populaarne ja leiab pidevalt uusi kasutajaid, paljud kasutajad on aga proovinud lisada Packet Filter'ile mitmeid lisavõimalusi, mis muudaksid seadistamise ning haldamise lihtsamaks, siinkohal on välja toodud lühike ülevaade kahest tuntumast lisast.
Pfw
http://www.allard.nu/pfw/ fw on veebipõhine kasutajaliides Packet Filter tulemüürile, eesmärk on olla sama efektiivne ja kasulik kui PG ning samal ajal pakkuda võimalust tulemüüri läbi veebibrauseri seadistada (lisa 2). Pfw põhineb PHP-l ning toetab perl-i mooduleid, Pfw on tasuta saadaval ning kasutab BSD-litsentsi.
Pf.vim
http://www.vim.org/scripts/script.php?script_id=341 Pf.vim on Vim-i süntaksiskript, mis kohandab Vim-i Packet Filter'i konfiguratsioonifaili pf.conf töötlemiseks, pf.vim oskab pf.conf faili sisu tüübi järgi esile tõsta ning värviliseks muuta, näiteks kõik kehtivad reeglid kuvatakse rohelises kirjas. Pf.Vim süntaksiskripti on loonud Camiel Dobbelaar aastal 2002.
Praktiline Osa. Tulemüüri seadistamine
Tulemüür väiksemale võrgule kus lubatakse mõnedele teenustele ligipääs ning tehakse ka NAT'i sisevõrgule
Tulemüüri automaatseks käivitamiseks tuli /etc/rc.conf.local faili lisada rida pf=YES, operatsioonisüsteemi käivitusskriptid laevad sellest failist käivitatavate rakendust nimekirja, tulemüüri saab ka käsitsi käsurealt käivitada.
pfctl -e -f /etc/pf.conf
Selle käsuga käivitatakse tulemüür ja laetakse reeglid /etc/pf.conf failist. Tulemüüri seadistamisel kasutas autor Vim tekstiredaktorit. Reeglid loodi sellised, et sisevõrgus olevatel klientidel on juurdepääs internetile, juurdepääs väljastpoolt sisevõrku puudub ning sisevõrgu kliendid peidetakse ühise IP-aadressi taha, sisevõrgust välja lubati http, https ja pop3 protokollide kasutamine, täielik tabel on toodud välja lisana (lisa 1). Tulemüüri reeglite kirjutamine :
extIF="rl0" intIF="xl0" lubatud="{ 80, 110, 443 }" #Võrguliidestele ning lubatud protokollidele määrati makrod, lihtsustamaks hilisemat pöördumist. set loginterface $extIF set skip on lo #Lülitati sisse välise liidese logimine ning loopack liidese ignoreerimine. scrub in all scrub out all #Lülitati sisse kõikide pakettide normaliseerimine. nat on $extIF from !($extIF) -> ($extIF:0) #Lülitati sisse NAT välisel võrguliidesel. block in pass out keep state antispoof quick for { lo $intIF } pass in on $extIF inet proto tcp from any to ($extIF) port $lubatud flags S/SA keep state #Keelati kõik sisenev liiklus peale makros $lubatud kirjeldatud portidelt, lubati võrgust väljuv liiklus ning välistati siseneval liiklusel spoof’imine. pass in inet proto icmp all keep state pass out inet proto icmp all keep state #Lubatakse võrku sisenevad ja väljuvad pingimised. #Lubati väljuv liiklus. pass quick on $intIF