Enam kui kahe võrgukaardiga aadressteisendav tulemüür
Eesmärk
Olgu eesmärgiks ühendada tulemüüri abil internetiga mitu privaatseid aadresse kasutavate serverite võrgusegmenti
internet (AVALIK) www .13.90 | | | smtp | em0, 192.168.102.35/28 | .13.200 __|__ | | | | | | em1 | | em4 -|---|- ARENDUS 10.10.13.1/24 ---| |---------------- HALDUS 10.10.5.1/24---|----------|--- | | | | -|---|- TEST 10.10.7./24 --------|_____| __|__ __|__ | | em2 | em3 | | | | | | | |_____| |_____| | .7.200 | varundus monitooring | smtp | .5.19 .5.10 | | www '------- TOODANG - 10.10.6.1/24 --|---------|----- .7.90 | | __|__ __|__ | | | | |_____| |_____| www smtp .6.90 .6.200
- AVALIK - avalik võrk st internet, kust pöörduvad kliendid, sh arendajad
- ARENDUS - arendusvõrk, toimub teenuste arendus
- TEST - testvõrk, toimub teenuste testimine
- TOODANG - toodanguvõrk, toimub avalike teenuste pakkumine
- HALDUS - haldusvõrk, toimub haldus, nt monitooring ja varundamine
Peavad olema täidetud sellised nõuded
Tulemüür on liikluse lähte või sihtpunkt
Sissepääs tulemüüri
- haldusligipääs ssh, 22/tcp, piiratud ip aadressidelt
Väljapääs tulemüürist
- kellaaeg ntp, 123/udp
- nimeteenus, 53/udp,tcp
- süsteemsed teated smtp, 25/tcp
- tarkvara paigaldamine ftp serverist, 80/tcp
Tulemüürist läbipääs kõigist võrkudest kõigisse võrkudesse
- icmp - et saaks ping abil mugavalt kontrollida arvutite olemasolu
Tulemüürist läbipääs kõigist võrkudest määratletud sihtvõrku
Läbipaas kõigist võrkudest AVALIK võrku
- kellaaeg ntp, 192.168.38.1:123/udp
- nimeteenus, 192.168.96.222:53/udp,tcp
- süsteemsed teated smtp, 192.168.32.85:25/tcp
- ocsp, 192.168.42.42:80/tcp
Läbipääs kõigist võrkudest TOODANG võrku
- www, 192.168.102.35:80,443/tcp -> 10.10.6.90:80,443/tcp
- smtp, 192.168.102.35:25/tcp -> 10.10.6.200:25/tcp
Läbipääs kõigist võrkudest ARENDUS võrku
- www, 192.168.102.36:80,443/tcp -> 10.10.13.90:80,443/tcp
- smtp, 192.168.102.36:25/tcp -> 10.10.13.200:25/tcp
Läbipääs kõigist võrkudest TEST võrku
- www, 192.168.102.37:80,443/tcp -> 10.10.7.90:80,443/tcp
- smtp, 192.168.102.37:25/tcp -> 10.10.7.200:25/tcp
Tulemüürist läbipääs määratletud lähtevõrgust kõigisse võrkudesse
Läbipääs HALDUS võrgust kõigidesse võrkudesse
- üle ssh rsync 10.10.5.19 -> *:22/tcp
- nagios 10.10.5.10 -> *:5666/tcp
Paketifiltri seadistusfaili põhimõtteskeem
Paketifiltri kirjutamisel tuleb teha tavaliselt kopromiss täpsuse ja üldisuse vahel. Nii võiks tekkida piisavalt turvaline tulemüür ja mille keerukus võimaldab teda veel hallata.
Enam kui kahe võrgukaardiga aadressteisendav tulemüür on suhteliselt üldine ja keerukas juhtum, mille lahendamisel tuleks silmas pidada, et kui mitte päris kõikvõimalikke juhtumeid arvesse võttes ja jäädes nö praktiliseks, võiks liikluse jaotada nelja gruppi
- lubatud siseneda kõigist seadmetest ja väljuda kõigist seadmetest - icmp ping, ping võiks võrkude vahel lahti jääda, et saaks kõikjalt kõike kontrollida; kuivõrd tulemüüri taga olevad võrgud kasutavad privaatseid aadresse ja ping'ile rdr-teisendusi mitte rakendades avalikust võrgust servereid pingida ei saa
- lubatud siseneda kõigist seadmetest ja väljuda konkreetsest seadmest - tundub mõistlik, et kui nt avalikust võrgust on lubatud kasutada toodangu võrgu teenuseid, siis võiks lubada neid kasutada ka kõigist muudest võrkudest (arendus, test ja halduse); seda tehes saab kirjutada üldisema st vähemat hulka reegleid sisaldava paketifiltri seadistusfaili
- lubatud siseneda konkreetsest seadmest ja väljuda kõigist seadmetest - sellise iseloomuga on nt monitooringu ja varundamisega seotud liiklust, ühest võrgust saab ligi kõigis võrkudes olevate arvutite poole; sellesse kategooriasse võiks minna kõik mitte avalike teenustega seotud reeglid, piirates konkreetsest seadmest sisenemist annab täiesti rahuldava turvalisuse
- lubatud siseneda ühest konkreetsest seadmest ja väljuda teisest konkreetsest seadmest - sellistel reeglitel on kõige suurem täpsus, kuid nende kasutamine muudab paketifiltri seadistusfaili kiiresti suureks, selliseid reegleid tuleks võimalusel vältida
Ülesande lahendamiseks sobib kasutada sellise ülesehitusega paketifiltri seadistusfaili
# MACROS and LISTS include "/etc/pf.macros-and-lists" # TABLES include "/etc/pf.tables" # OPTIONS include "/etc/pf.options" ######### TRANSLATION ########## # # et kõigist privaatsetest võrkudest avalikku vorku minevatel pakettidel oleks sobivad avalikud src aadressid # reeglid kasutavad pakettidel olevaid silte nat-anchor nat_to_avalik on $if_avalik load anchor nat_to_avalik from "/etc/pf.anchor-nat_to_avalik" # et toodangu vorgust saaks arvutid iseenda poole pöörduda avalike teenuste ip aadressidega nat on $if_toodang from $carp_toodang:network:0 tagged TO_TOODANG -> $carp_toodang:0 # et arenduse vorgust saaks arvutid iseenda poole pöörduda avalike teenuste ip aadressidega nat on $if_arendus from $carp_arendus:network:0 tagged TO_ARENDUS -> $carp_arendus:0 # et testi vorgust saaks arvutid iseenda poole pöörduda avalike teenuste ip aadressidega nat on $if_test from $carp_test:network:0 tagged TO_TEST -> $carp_test:0 # koigil seadmetel RDR-teisendused pakettide toodangukeskkonna serveritele jõudmiseks # reeglid rakendavad pakettidele sildi TO_TOODANG rdr-anchor rdr_to_toodang on seadmed load anchor rdr_to_toodang from "/etc/pf.anchor-rdr_to_toodang" # koigil seadmetel RDR-teisendused pakettide arenduskeskkonna serveritele jõudmiseks # reeglid rakendavad pakettidele sildi TO_ARENDUS rdr-anchor rdr_to_arendus on seadmed load anchor rdr_to_arendus from "/etc/pf.anchor-rdr_to_arendus" # koigil seadmetel RDR-teisendused pakettide testkeskkonna serveritele jõudmiseks # reeglid rakendavad pakettidele sildi TO_TEST rdr-anchor rdr_to_test on seadmed load anchor rdr_to_test from "/etc/pf.anchor-rdr_to_test" # koigil seadmetel RDR-teisendused pakettide halduskeskkonna serveritele jõudmiseks # reeglid rakendavad pakettidele sildi TO_HALDUS rdr-anchor rdr_to_haldus on seadmed load anchor rdr_to_haldus from "/etc/pf.anchor-rdr_to_haldus" ######### FILTER ########## # TULEMÜÜRI ENDASSE SISSEPÄÄS # # ssh kaugligipaas tulemüüri endasse, tulemüüri haldamiseks pass in quick on $if_avalik inet proto tcp from <kontor> to $if_avalik port 22 label "JSavalik_from_kontor" # vaikimisi blokeeritakse igasugust liiglust läbi tulemüüri seadmete block all # pingida on lubatud piiramatult pass quick on seadmed inet proto icmp icmp-type echoreq label "JSVsmd_proto_icmp" # TULEMÜÜRIST LÄBIPÄÄS # # lubatakse sisse RDR-teisendusest saadud siltidega pakette pass in quick on seadmed tagged TO_TOODANG label "JSsmd_to_toodang" pass in quick on seadmed tagged TO_ARENDUS label "JSsmd_to_arendus" pass in quick on seadmed tagged TO_TEST label "JSsmd_to_test" pass in quick on seadmed tagged TO_HALDUS label "JSsmd_to_haldus" # lubatakse välja RDR teisendusest ja PASS_IN_FROM_SEADMED_TO_VORK ankrutest saadud TO_* tagidega # liiklust kontreetsetest seadmetest pass out quick on $if_toodang tagged TO_TOODANG label "JVtoodang" pass out quick on $if_arendus tagged TO_ARENDUS label "JVarendus" pass out quick on $if_test tagged TO_TEST label "JVtest" pass out quick on $if_haldus tagged TO_HALDUS label "JVhaldus" pass out quick on $if_avalik tagged TO_AVALIK label "JVavalik" # lubatakse sisse ja sildistatakse kõigist võrkudest konkreetsesse võrku suunduvat liiklust # selline iseloom on koigist vorkudest avalikku vorku mineval liiklusel, nt ntp ja ocsp teenus # rakendadakse silt TO_AVALIK anchor pass_in_from_seadmed_to_avalik on seadmed load anchor pass_in_from_seadmed_to_avalik from "/etc/pf.anchor-pass_in_from_seadmed_to_avalik" # lubatakse sisse ja sildistatakse konkreetsetest vorgudest kõigisse võrkudesse suunduvat liiklust # selline iseloom on nt monitooringul ja varundamisel; selle abil saab rangemalt piirata ka vorkude # kaupa avalikku internetti pääsemist erineval määral # sildistatakse lähtevork, nt FROM_HALDUS anchor pass_in_from_haldus_to_seadmed on $if_haldus label "JShaldus_from_haldus_to_seadmed" load anchor pass_in_from_haldus_to_seadmed from "/etc/pf.anchor-pass_in_from_haldus_to_seadmed" # kõigist seadmetest lubatakse välja FROM_* siltidega liiklust pass out quick on seadmed tagged FROM_HALDUS label "JVsmd_from_haldus_to_seadmed" # # TULEMÜÜRIST ENDAST VÄLJAPÄÄS # # et tulemüüri kellaaeg oleks õige pass out on $if_avalik inet proto udp to $ntp port 123 label "JVavalik_ntp" # et tulemüüri sees nimelahendus töötaks pass out on $if_avalik inet proto { tcp, udp } to $dns port 53 label "JVavalik_to_dns" # et haldusteated saaksid välja pass out on $if_avalik inet proto tcp to $smtp port 25 $tcpopts label "JVavalik_to_smtp" # et tulemüüri saaks tarkvara lisada pass out on $if_avalik inet proto tcp to $ftp port 80 $tcpopts label "JVavalik_to_ftp" # tulemüürist endast on ei ole küll põhimõtteliselt vaja saada kõigisse arvutitesse pöörduda, # aga praktiliselt on see võimalus hea pass out quick on $if_arendus inet from $if_arendus to $if_arendus:network:0 label "JVarendus_from_tulemuur_ise_to_arendus" pass out quick on $if_test inet from $if_test to $if_test:network:0 label "JVtest_from_tulemuur_ise_to_test" pass out quick on $if_haldus inet from $if_haldus to $if_haldus:network:0 label "JVhaldus_from_tulemuur_ise_to_haldus"
Märkused
- Parema ülevaatlikkuse huvides on tulemüüri seadistusfaili sisu jagatud mitmete failide vahel, on kasutatud lihtsalt include direktiivi ning põhi-ja alamreeglihulki (ingl.k. main ruleset ja sub ruleset) ankru konstruktsiooni abil
- Praktiliselt kõige ees vaikimisi blokeeritakse kõike liiklust, mida edasised reeglida ei luba; blokeerimise võib olla mõttekas teha igal seadmel eraldi, mis võimaldab paremini valikuliselt nt logida ja probleemidega tegeleda
- Kasutatakse kõiki tulemüüri em seadmeid sisaldavat seadmete gruppi 'seadmed', et reegleid saaks esitada ülevaatlikumalt.
- Ankru kasutamisel tuleb ankur enne seada (anchor ...) ja pärast laadida (load anchor ..)
- Toodangu, arenduse ja testkeskkondadest saavad tänu NAT-teisendusele arvutid pöörduda oma võrgu sh iseenda poole oma avaliku teenuse aadressiga (src aadressiks kujuneb sel juhul tulemüüri vastava priv võrgu poolse seadme .1 aadress)
- Tulemüüris töötavad ennekõike pakette sisse lubavad reeglid kuigi tulemüüri läbivat paketti kontrollitakse ka enne väljumist; sel põhjusel võiks kirjutada nt kahe sisemise võrgu vahel liiklust FROM_* siltidega st 'pass_in_from_haldus_to_seadmed' moodi reeglitega; pass_in_from_seadmed_to_avalik moodi reegleid tuleks kasutada ainult põhjendatud vajadusel, sest see reegel on ohtlik kuna ta rakendub kõigil seadmetel.
- Vajadusel võib lisada pass_in_from_yksvork_to_teine_vork ankruid, seejuures peab arvestama tasakaaluga tulemüüri töötamise efektiivsuse ja tulemüüri hallatavuse seisukohta - suurema arvu ja lühemate ankrutega töötab tulemüür tõenäoliselt kiiremini kuid reeglibaasi haldamine on tõenäoliselt tülikam.
- Selgelt on eristatud tulemüüri endasse sisenev, tulemüüri läbiv ja tulemüürist endast väljuv liiklus
- FILTER sektsioonis on esmalt esitatud teenuse pakkumisega seotud liiklus, sisenev ja väljuv, et vastavaid pakette saaks paketifilter kiiremini käsitleda
Include failid
Eelmises punktis esitatud pf.conf failis kasutatakse paketifiltri seadistuste hoidmist mitmes erinevas failis selleks, et pf.conf oleks ülevaatlikum. Osad ühendatakse kokku include ning anchor directiivide abil ja vastavaid faile hoitakse kataloogis /etc/tbl, et nad ei risustaks /etc kataloogi.
/etc/tbl/pf.macros-and-lists
Failis /etc/tbl/pf.macros-and-lists on kirjeldatud paketifiltris kasutatud muutujad ja nimekirjad (ingl. k. list)
# OPTIONS tcpopts="flags S/SA modulate state" synopts="flags S/SAFR synproxy state" udpopts="keep state" icmp_types="echoreq" # VORGUSEADMED if_avalik="em0" if_arendus="em1" if_test="em2" if_toodang="em3" if_haldus="em4" carp_avalik="carp0" carp_arendus="carp1" carp_test="carp2" carp_toodang="carp3" carp_haldus="carp4"
/etc/tbl/pf.tables
Failis /etc/tbl/pf.tables on kirjeldatud paketifiltris kasutatavad tabelid
# spoofed table <spoofed> persist const { 10.0.0.0/8 172.16.0.0/12 169.254.0.0/16 192.168.0.0/16 224.0.0.0/4 } # Reserveeritud http://www.iana.org/assignments/ipv4-address-space table <reserved> persist const file "/etc/tbl/pf.table.reserved"
/etc/tbl/pf.options
Failis /etc/tbl/pf.options on kirjeldatud paketifiltri nn optionid
set state-defaults pflow set limit states 20000 set limit src-nodes 15000 set block-policy return set loginterface $if_avalik set skip on lo
Ankrud
Paketifiltris seadistusfailis kasutatakse lisaks include direktiivile ankruid parema üldisuse eesmärgil. Ankru failinimi sisaldab ankru nime, nt ankur nat_to_avalik on kirjeldatud failis /etc/tbl/pf.anchor-nat_to_avalik. Kuna alamreeglihulgad ei näe peareeglifailis kirjeldatud muutujate ja nimekirjade kirjeldusi tuleb pf.macros-and-lists faili iga ankru juures includeda.
/etc/pf.anchor-rdr_to_toodang
Ankru rdr_to_toodang abil teisendatakse tülemüüri taga oleva serveri poole minevate pakettide dst aadress serveri privaatseks aadressiks ja lisatakse silt TO_TOODANG
include "/etc/tbl/pf.macros-and-lists" rdr inet proto tcp to 192.168.102.35 port { 80, 443 } tag TO_TOODANG -> 10.0.6.90 rdr inet proto tcp to 192.168.102.35 port 25 tag TO_TOODANG -> 10.0.6.200
/etc/pf.anchor-pass_in_from_seadmed_to_avalik
Ankru pass_in_from_seadmed_to_avalik abil lubatakse kõigist seadmetest tulemüüri sisenenud liiklust avalikku võrku ja lisatakse silt TO_AVALIK
include "/etc/tbl/pf.macros-and-lists" pass in quick inet proto udp to 192.168.38.1 port 123 tag TO_AVALIK label "JSsmd_from_seadmed_to_avalik_ntp" pass in quick inet proto { tcp, udp } to 192.168.96.222 port 53 tag TO_AVALIK label "JSsmd_from_seadmed_to_avalik_dns" pass in quick inet proto tcp to 192.168.32.85 port 25 tag TO_AVALIK label "JSsmd_from_seadmed_to_avalik_smtp" pass in quick inet proto tcp to 192.168.42.42 port 80 tag TO_AVALIK label "JSsmd_from_seadmed_to_avalik_ocsp"
/etc/pf.anchor-nat_to_avalik
Ankru nat_to_avalik abil teisendataks tulemüüri taga olevatest serveritest avalikku võrku pöördumisel pakettide scr aadressid avalikuks aadressiks, tulemüüri avaliku seadme aadressiks
include "/etc/tbl/pf.macros-and-lists" nat inet tagged FROM_HALDUS -> $carp_avalik nat inet tagged TO_AVALIK -> $carp_avalik
kus
- FROM_* sildid on pakettidele lisanud /etc/pf.anchor-pass_in_from_haldus_to_seadmed reeglid
- TO_AVALIK sildid on pakettidele lisanud /etc/pf.anchor-pass_in_from_seadmed_to_avalik reeglid
/etc/pf.anchor-pass_in_from_haldus_to_seadmed
Ankru pass_in_from_haldus_to_seadmed abil lubatakse konkreetsest seadmest sisse kõikidesse võrkudesse edasi lubatav liiklus ja lisatakse FROM_* sildid
include "/etc/tbl/pf.macros-and-lists" pass in quick inet proto tcp from 10.0.5.19 to { 10.0.0.0/8 } port 22 tag FROM_HALDUS pass in quick inet proto tcp from 10.0.5.10 to { 10.0.0.0/8 } port 5666 tag FROM_HALDUS