OpenBSD tulemüür
Sisukord
Sissejuhatus
OpenBSD operatsioonisüsteemi kasutamine võrgusõlmes on tema üheks oluliseks kasutusalaks. OpenBSD tulemüüril (ruuteril) on muu hulgas sellised omadused
- liikluse filtreerimine - pf, mitmesugustele tingimustele põhinevate piirangute seadmine sh automaatselt täituvad ja tühjenevad blacklistid, synproxy
- liikluse prioritiseerimine - altq
- koormusjaotur - pf
- statistika ja andmete analüüsiks kogumise vahendid (pfctl, pftop, pfstat, pflogd, tcpdump)
- VPN - IPsec, stunnel
- redundantse tulemüüri klustri võimalus - pfsync (koos sessioonide edasiandmisega)
Käesoleva teksti mõistmiseks on abiks mõõdukas ettekujutus TCP/IP protokollist.
Ülesandepüstitus
Tulemüüri seadistamine algab sellest, et võimalikult täpselt ette kujutada, millist tulemust saavutada soovitakse. Olgu käesoleva pala kontekstis tegu sellise ülesandepüstitusega, mida iseloomustab skeem
internet | default gw, 172.16.1.18 | | fxp0, 172.16.1.17/28 __|__ | | rl0, 10.0.1.254/24 | |------ DMZ 10.0.1.0/24 ----- |_____| | | em0, 192.168.1.254/24 | | |_______ KALAKE - 192.168.1.0/24 _________
ning peavad olema täidetud sellised nõuded
- Tulemüüri kohtvõrgu ja DMZ võrguliidestel töötab nimeteenus.
- DMZ ja KALAKE võrgu arvutite vaikelüüsiks ning nimeserveriks on vastavalt 10.0.1.254 ja 192.168.1.254.
- Kohtvõrgu osast KALAKE, kus asuvad kasutajate töökohaarvutid pääseb piiramatult avalikku internetti ning DMZ võrku.
- Tulemüüris tehakse NAT'i DMZ ning KALAKE võrgus paiknevatele arvutitele.
- Avalikust internetist peab pääsema ainult DMZ võrgus töötava veebiserveri juurde.
- DMZ võrgust ei saa algatada ühendusti kuskil suunas.
Tulemüüri võrgu seadistamine
Peale tulemüüri paigaldamist, tuleks tulemüür füüsiliselt internetist lahti ühendada, seadistada käsitsi võrguseadmetele joonisel toodud aadressid, veel parem, veenduda, et eksisteerivad sellise sisuga järgnevad failid (et failidesse kirjutatud seadistused oleksid tänu nendele failidele kehtestatud, peaks peale failide muutmist arvutile tegema alglaadimise)
# cat /etc/hostname.fxp0 inet 172.16.1.17 255.255.255.240 NONE # cat /etc/hostname.rl0 inet 10.0.1.254 255.255.255.0 NONE # cat /etc/hostname.em0 inet 192.168.1.254 255.255.255.0 NONE # cat /etc/mygate 172.16.1.18 # cat /etc/resolv.conf lookup file bind 127.0.0.1 # cat /etc/sysctl.conf | grep net.inet.ip.forward net.inet.ip.forwarding=1 # 1=Permit forwarding (routing) of IPv4 packets
Seejärel ühendada külge DMZ ja KALAKE kohtvõrgust mõni arvuti ning veenduda, et kui paketifilter on välja lülitatud
# pfctl -d
siis ruuting töötab. Seda võiks kontrollida nt ping programmi abil.
Nimeserveri kasutamine
Üldiselt töötavad võrku ühendatud arvutid paremini, kui nimesüsteem töötab korrektselt. Seepärast tuleb käivitada kohalikke nimeseid ja vastavaid pöördteisendusi lahendava ning nn cache'ivas rezhiimis töötava nimeserveri. Alustuseks sobib kävitada lihtsalt vaikimisi /var/named kataloogis olevate seadistustega nimeserver
# named
ning veendumaks, et ta töötab küsida
# dig @localhost localhost
Nimeserveri kasutamise kohta on üksikasjalikum juhend toodud palas 'OpenBSD levinud teenuste seadistamine ja käivitamine'.
pfctl programmi kasutamine
PF paketifiltri tööd juhitakse programmiga pfctl, mille abil saab laadida tekstifailis kirjas olevad paketifiltri reeglid ning lisaks paketifiltri välja ja sisse lülitamitada. Tavaliselt on reeglid kirjas failiks /etc/pf.conf. Põhjalik PF paketifiltri juhend asub aadressil http://www.openbsd.org/faq/pf/index.html.
Selleks, et liiklus läbiks tulemüüri, võiks kõige lihtsamal olla süntaksiliselt korrektse /etc/pf.conf faili sisu
pass all
Reeglite laadimine ja kehtestamine toimub käsuga, nii tuleb öelda ka iga kord peale /etc/pf.conf faili muutmist muudatuste kehtestamiseks
# pfctl -f /etc/pf.conf
Vajadusel paketifiltri sisse-ning väljalülitamine toimub vastavalt käskudega
# pfctl -e # pfctl -d
PF paketifiltri kontrolli all olevate parameetrite väärtusi saab vaadata käsuga, OpenBSD v. 4.1 vastav väljund on tootud illustratsiooniks, allpool on lühidalt seda väljundit kommenteeritud
# pfctl -sa FILTER RULES: pass all flags S/SA keep state No queue in use INFO: Status: Enabled for 0 days 00:00:02 Debug: Urgent State Table Total Rate current entries 0 searches 12 6.0/s inserts 0 0.0/s removals 0 0.0/s Counters match 12 6.0/s bad-offset 0 0.0/s fragment 0 0.0/s short 0 0.0/s normalize 0 0.0/s memory 0 0.0/s bad-timestamp 0 0.0/s congestion 0 0.0/s ip-option 0 0.0/s proto-cksum 0 0.0/s state-mismatch 0 0.0/s state-insert 0 0.0/s state-limit 0 0.0/s src-limit 0 0.0/s synproxy 0 0.0/s TIMEOUTS: tcp.first 120s tcp.opening 30s tcp.established 86400s tcp.closing 900s tcp.finwait 45s tcp.closed 90s tcp.tsdiff 30s udp.first 60s udp.single 30s udp.multiple 60s icmp.first 20s icmp.error 10s other.first 60s other.single 30s other.multiple 60s frag 30s interval 10s adaptive.start 6000 states adaptive.end 12000 states src.track 0s LIMITS: states hard limit 10000 src-nodes hard limit 10000 frags hard limit 5000 tables hard limit 1000 table-entries hard limit 200000 OS FINGERPRINTS: 696 fingerprints loaded
Siinjuures tuleks tähele panna järgmisi sektsioone
- FILTER RULES - /etc/pf.conf failis sisaldub reegel kirjutati lahti 'pass all flags S/SA keep state', mis tähendab, et lisati juurde meie poolt ilmutatud kujul näitamata jäänud parameetrite vaikeväärtused
- INFO - paketifilter on sisse lülitatud olekus, 'Status: Enabled for 0 days 00:00:02'
- TIMEOUTS - mitmesugused TCP/IP protokolli alusel töötavat andmevahetust reguleerivad timeout parameetrid
- LIMITS - tulemüüri ressurssikasutusele seatud piirangud
PF paketifiltri reeglite kirjutamine
Paketifiltri reeglite failis on muude sektsioonide hulgas FILTER RULES sektsioon, mille abil abil kontrollitakse tulemüüri erinevaid võrguseadmeid läbivat liiklust ja sellest tulenevalt ka tulemüüri läbivat liiklust. Filter reegli juures on kirjas
- muster, millega iga võrguseadet läbivat TCP/IP paketti sh tema liikumise suunda võrreldakse
- tegevus - pass või block
Pakette klapitatakse reeglitega nende seadistusfailis esinemise järjekorras, kusjuures viimasena paketiga klappinud reegli juures näidatud tegevus rakendatakse. Kui paketiga ei klapi ükski reegel, siis viimane ilmutamata kujul olev reegel lubab paketi läbi.
# MACROS ext_if="fxp0" dmz_if="rl0" kalake_if="em0" # TRANSLATION RULES nat on $ext_if inet from !$ext_if -> $ext_if # REDIRECTION RULES rdr on $ext_if inet proto tcp to $ext_if port { 80, 443 } -> 10.0.1.1 # FILTER RULES # vaikimisi on igasugune liiklus keelatud block all # lubatud on igast seadmest valjuv liiklus # (piirangud rakendatakse sisenemisel, nii on alustuseks lihtsam ja piisavalt turvaline) pass out quick all # kohtvorgust sisenev suund pass in quick on $kalake_if