Enam kui kahe võrgukaardiga aadressteisendav tulemüür
Allikas: Kuutõrvaja
Sisukord
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 | | __|__ __|__ | | | | |_____| |_____| wwww 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 määratletud sihtvõrku
Läbipaas kõigist võrkudest AVALIK võrku
- kellaaeg ntp, 123/udp
- nimeteenus, 53/udp,tcp
- süsteemsed teated smtp, 25/tcp
- ocsp, 80/tcp
Läbipääs kõigist võrkudest TOODANG võrku
- eposti teenus smtp, 172.16.1.25:25/tcp -> 192.16.100.25:25/tcp
- veebiteenus, http, 172.16.1.80:80,443/tcp -> 192.16.100.25:80,443/tcp
- eposti ja veebiserveri pöördumised avalikku võrku paistavad samadel ip aadressidelt, mille kaudu nende poole pöördumine toimub
Läbipääs kõigist võrkudest ARENDUS võrku
- TODO
Läbipääs kõigist võrkudest TEST võrku
- TODO
Läbipääs kõigist võrkudest HALDUS võrku
Tulemüürist läbipääs määratletud lähtevõrgust kõigisse võrkudesse
Läbipääs HALDUS võrgust kõigidesse võrkudesse
- TODO
Paketifiltri seadistusfaili põhimõtteskeem
Ü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 load anchor nat_to_avalik from "/etc/pf.anchor-nat_to_avalik" nat-anchor nat_to_avalik on $if_avalik # 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 load anchor rdr_to_test from "/etc/pf.anchor-rdr_to_test" rdr-anchor rdr_to_test on seadmed # koigil seadmetel RDR-teisendused pakettide halduskeskkonna serveritele jõudmiseks # reeglid rakendavad pakettidele sildi TO_HALDUS load anchor rdr_to_haldus from "/etc/pf.anchor-rdr_to_haldus" rdr-anchor rdr_to_haldus on seadmed ######### 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 # 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 konkreetsetest vorgudest kõigisse võrkudesse suunduvat liiklust # selline iseloom on nt monitooringul ja varundamisel # sildistatakse lähtevork, nt FROM_HALDUS load anchor pass_in_from_haldus_to_seadmed from "/etc/pf.anchor-pass_in_from_haldus_to_seadmed" anchor pass_in_from_haldus_to_seadmed on $if_haldus label "JShaldus_from_haldus_to_seadmed" # 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 load anchor pass_in_from_seadmed_to_avalik from "/etc/pf.anchor-pass_in_from_seadmed_to_avalik" anchor pass_in_from_seadmed_to_avalik on 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_ext inet proto udp to $ntp port 123 label "JVext_ntp" # et tulemüüri sees nimelahendus töötaks pass out on $if_ext inet proto { tcp, udp } to $dns port 53 label "JVext_to_dns" # et haldusteated saaksid välja pass out on $if_ext inet proto tcp to $smtp port 25 $tcpopts label "JVext_to_smtp" # et tulemüüri saaks tarkvara lisada pass out on $if_ext inet proto tcp to $ftp port 80 $tcpopts label "JVext_to_ftp"
Märkused
- Parema ülevaatlikkuse huvides on tulemüüri seadistusfaili sisu jagatud mitmete failide vahel, on kasutataud include ja ankru konstruktsiooni
- Praktiliselt kõige ees vaikimisi blokeeritakse kõike liiklust, mida edasised reeglida ei luba
- Selgelt on eristatud tülemüüri endasse sisenev, tulemüüri läbiv ja tulemüürist väljuv liiklus
- FILTER sektsioonis on esmalt esitatud teenuse pakkumisega seotud liiklus, sisenev ja väljuv, et vastavaid pakette saaks paketifilter kiiremini käsitleda
Paketifiltri seadistamine
Esitatud ülesande täitmiseks sobib kasutada sellist paketifiltri seadistusfaili /etc/pf.conf
######### MACROS and LISTS ######### # if_avalik = "em0" # carp_avalik = "carp0" # 192.168.102.35 if_arendus = "em1" # carp_arendus = "carp1" # 10.10.13.1 if_test = "em2" # carp_test = "carp2" # 10.10.7.1 if_toodang = "em3" # carp_toodang = "carp3" # 10.10.6.1 if_haldus = "em4" # carp_haldus = "carp4" # 10.10.5.1 dns = "192.168.96.222" # dns server ntp = "192.168.38.1" # ntp server ftp = "192.168.32.82" # ftp server ocsp = "192.168.42.42" # ocsp server serv_real_SMTP = "192.168.100.25" # smtp server, teenus serv_real_HTTP = "192.168.100.80" # http server, teenus serv_teenus_SMTP = "172.16.1.25" # smtp server, teenus serv_teenus_HTTP = "172.16.1.80" # http server, teenus icmp_types = "echoreq" tcpopts = "flags S/SA modulate state" synopts = "flags S/SAFR synproxy state" udpopts = "keep state" ######### TABLES ########## # # 10.0.1.18 - loomaaia tulemüüri ühe halduri töökohaarvuti ip aadress # 10.50.1.19 - loomaaia tulemüüri teise halduri töökohaarvuti ip aadress table <kontor> const { 192.168.10.10 } # Reserveeritud. http://www.iana.org/assignments/ipv4-address-space table <reserved> const file "/etc/pf.tbl/reserved" # Valetatud aadressid. table <spoofed> const { 10.0.0.0/8 169.254.0.0/16 172.16.0.0/12 \ 192.0.2.0/24 192.168.0.0/16 224.0.0.0/4 } # Blacklist table <blacklist> persist file "/etc/pf.tbl/blacklist" ######### OPTIONS ######### # set loginterface $if_ext set optimization aggressive set timeout tcp.established 300 set limit states 500000 set limit frags 100 set timeout tcp.first 15 set skip on lo # set skip on $if_int set timeout tcp.closed 50 ######### TRANSLATION ########## # # teisendus ligipääsuks postimasinasse rdr on $if_ext inet proto tcp to 172.16.1.25 port 25 tag TO_SMTP -> 192.168.100.25 # teisendus ligipääsuks veebiserverisse rdr on $if_ext inet proto tcp to 172.16.1.80 port { 80, 443 } tag TO_HTTPS -> 192.168.100.80 # teisendus postimasina väljapääsemiseks avalikku võrku nat pass on $if_ext tagged FROM_SMTP -> 172.16.1.25 # teisendus veebiserveri väljapääsemiskeks avalikku võrku nat pass on $if_ext tagged FROM_HTTP -> 172.16.1.80 ######### FILTER ########## # # HALDUSLIGIPÄÄS AVALIKUST VÕRGUST TULEMÜÜRI # # ssh kaugligipaas haldusest pass in quick on $if_ext inet proto tcp from <kontor> to $if_ext port 22 $tcpopts (tcp.established 1064000) label "JSext_kontor" # # VAIKIMISI ON LIIKLUS KEELATUD # # Igasugune liiklus läbi tulemüüri võrguseadmete on vaikimisi keelatud # keelatud on sissepääs, väljapääs ja igas suunas läbipääs block in on $if_ext label "ESext_vaikimisi" block out log on $if_ext label "EVext_vaikimisi" block in log on $if_int label "ESint_vaikimisi" block out log on $if_int label "EVint_vaikimisi" # # BLACKLISTITUD, SPOOFITUD ja RESERVED LIIKLUSE KEELAMINE # # Avalikust võrgust tulemüüri taha läbivale liiklusele keelu block in quick on $if_ext from <blacklist> label "ESe_blacklist" block in quick on $if_ext from <spoofed> label "ESe_spoofed" block in quick on $if_ext from <reserved> label "ESe_reserved" # # NORMAALSE LIIKLUSE LÄBIPÄÄSU LUBAMINE AVALIKUST VÕRGUST TULEMÜÜRI TAHA # # Avalikust võrgust tulemüüri taha läbiv liikluse sisenemise lubamine pass in quick on $if_ext inet tagged TO_HTTP $synopts label "JSext_http" pass in quick on $if_ext inet tagged TO_SMTP $synopts label "JSext_smtp" # Läbipääseva TO_HTTP ja TO_SMTP liikluse väljumise lubamine pass out quick on $if_int tagged TO_HTTP label "JVint_http" pass out quick on $if_int tagged TO_SMTP label "JVint_smtp" # # LÄBIPÄÄSU LUBAMINE TULEMUURI TAGANT AVALIKKU VÕRKU # et teenusserverite kellaaeg oleks õige pass in quick on $if_int inet proto udp from { $serv_HTTP, $serv_SMTP } to $ntp port 123 tag TO_NTP $udpopts label "JSint_ntp" # et teenusserveid saaks nimesid lahendada pass in quick on $if_int inet proto { tcp, udp } from { $serv_HTTP, $serv_SMTP } to $dns port 53 tag TO_DNS $udpopts label "JSint_dns" # et veebiserver saaks kontrollida kliendisertifikaatide kehtivust pass in quick on $if_int inet proto tcp from $serv_HTTP to $ocsp port 80 tag TO_OCSP $tcpopts label "JSint_ocsp" # et veebiserver saaks saata süsteemseid teateid pass in quick on $if_int inet proto tcp from $serv_HTTP to $smtp port 25 tag FROM_SMTP $tcpopts label "JSint_smtp" # et postimasin saaks kirju valja saata pass in quick on $if_int inet proto tcp from $serv_SMTP to any port 25 tag FROM_SMTP $tcpopts label "JSint_smtp" # et tagitud liiklus saaks tulemüürist välja pass out quick on $if_ext tagged FROM_SMTP label "JVext_from_stmp" pass out quick on $if_ext tagged FROM_HTTP label "JVext_from_http" pass out quick on $if_ext tagged TO_OCSP label "JVext_ocsp" pass out quick on $if_ext tagged TO_NTP label "JVext_ntp" pass out quick on $if_ext tagged TO_DNS label "JVext_dns" # # TULEMÜÜRIST ENDAST VÄLJAPÄÄS # # et tulemüüri kellaaeg oleks õige pass out on $if_ext inet proto udp to $ntp port 123 label "JVext_ntp" # et tulemüüri sees nimelahendus töötaks pass out on $if_ext inet proto { tcp, udp } to $dns port 53 label "JVext_to_dns" # et haldusteated saaksid välja pass out on $if_ext inet proto tcp to $smtp port 25 $tcpopts label "JVext_to_smtp" # et tulemüüri saaks tarkvara lisada pass out on $if_ext inet proto tcp to $ftp port 80 $tcpopts label "JVext_to_ftp"