Enam kui kahe võrgukaardiga aadressteisendav tulemüür

Allikas: Kuutõrvaja
Redaktsioon seisuga 7. juuni 2009, kell 12:33 kasutajalt Imre (arutelu | kaastöö) (Paketifiltri seadistusfaili põhimõtteskeem)

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"