Erinevus lehekülje "Kahe võrgukaardiga aadressteisendav tulemüür" redaktsioonide vahel

Allikas: Kuutõrvaja
(Paketifiltri seadistamine)
(Paketifiltri seadistamine)
109. rida: 109. rida:
 
   # teisendus ligipääsuks veebiserverisse
 
   # 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
 
   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
 
   # teisendus postimasina väljapääsemiseks avalikku võrku
 
   nat pass on $if_ext tagged FROM_SMTP -> 172.16.1.25
 
   nat pass on $if_ext tagged FROM_SMTP -> 172.16.1.25
 
   nat pass on $if_ext tagged TO_NTP -> 172.16.1.25
 
   nat pass on $if_ext tagged TO_NTP -> 172.16.1.25
 
   nat pass on $if_ext tagged TO_DNS -> 172.16.1.25
 
   nat pass on $if_ext tagged TO_DNS -> 172.16.1.25
 
+
 
 
   # teisendus veebiserveri väljapääsemiskeks avalikku võrku
 
   # teisendus veebiserveri väljapääsemiskeks avalikku võrku
 
   nat pass on $if_ext tagged TO_OCSP -> 172.16.1.80
 
   nat pass on $if_ext tagged TO_OCSP -> 172.16.1.80
 
   nat pass on $if_ext tagged TO_NTP -> 172.16.1.80
 
   nat pass on $if_ext tagged TO_NTP -> 172.16.1.80
 
   nat pass on $if_ext tagged TO_DNS -> 172.16.1.80
 
   nat pass on $if_ext tagged TO_DNS -> 172.16.1.80
 
+
 
 
   ######### FILTER ##########
 
   ######### FILTER ##########
 
   #
 
   #

Redaktsioon: 14. juuni 2009, kell 13:53

Eesmärk

Olgu eesmärgiks ühendada tulemüüri abil internetiga privaatseid aadresse kasutav serverite võrgusegment

                  internet
 
                     |
                     |   em0, 172.16.1.17/30
                   __|__  
                  |     | 
                  |     |
                  |_____|
                     |
                     |   em1, 192.168.100.254/24
                     |
                     |
                     |_______ SERVERID - 192.168.100.0/24 _________

ning peavad olema täidetud sellised nõuded

  • Sissepääs tulemüüri
 - haldusligipääs ssh, 22/tcp
  • 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
  • Läbipääs avalikust võrgust SERVERID 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äbipaas SERVERID võrgust avalikku võrku
 - kellaaeg ntp, 123/udp
 - nimeteenus, 53/udp,tcp
 - süsteemsed teated smtp, 25/tcp
 - ocsp, 80/tcp

Tulemüüri seadistamine

Esitatud ülesande täitmiseks peab tulemüüris

  • seadistamine sobivalt võrguseadmed
  • lülitama sisse ip pakettide ruutimise
  • käivitama ssh serveri
  • käivitama ntp serveri (mida kasutatakse lokaalselt)

Paketifiltri seadistamine

Esitatud ülesande täitmiseks sobib kasutada sellist paketifiltri seadistusfaili /etc/pf.conf

 ######### MACROS and LISTS #########
 #
 if_ext = "em0"     # 172.16.1.17
 if_int = "em1"     # 192.168.100.254
 
 dns         = "10.0.1.13"         # dns server
 ntp         = "10.0.1.14"         # ntp server
 ftp         = "10.0.1.15"         # ftp server
 ocsp        = "10.0.1.16"         # ocsp server
 smtp        = "10.0.1.17"         # smtp 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 { 10.0.1.18, 10.50.1.19 }
 
 # 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
 nat pass on $if_ext tagged TO_NTP -> 172.16.1.25
 nat pass on $if_ext tagged TO_DNS -> 172.16.1.25
 
 # teisendus veebiserveri väljapääsemiskeks avalikku võrku
 nat pass on $if_ext tagged TO_OCSP -> 172.16.1.80
 nat pass on $if_ext tagged TO_NTP -> 172.16.1.80
 nat pass on $if_ext tagged TO_DNS -> 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 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"

Kaalutlused reeglite kirjutamisel

Reeglite kirjutamisel sh järjestamisel on kasutatud selliseid kaalutlusi

  • järjestada paketifiltri sisu sektsioonide kaupa ja kasutada kommentaare, et reeglid oleksid loetavamad
  • kasutada muutujaid selleks, et kirjutatud reeglid oleksid üldisemad ja loetavamad
  • on püütud esistada erinevaid liiklusi, tulemüüri endasse suunatud liikluse sissepääs, tulemüürist endast lähtuva liikluse väljapääs, tulemüürist läbipääs
  • kõige algul kehtestada halduseks vajalik ligipääs, quick (kuigi tulemüüri reeglite töötamise mõttes vähendab see efektiivsust põhimõtteliselt)
  • suhteliselt alul kehtestatakse vaikimisi nö poliitika - igasugune liiklus on keelatud, ilma quick'ita
  • võimalikult algul blokeerida ilmselt sobimatud paketid, quick (valetatud, mitte kasutuses olevad ja blacklistis olevad aadressid); kuna paketifiltri reegleid kontrollitakse järjest, siis sobimatute pakettide osas tehakse nii otsus suhteliselt vara
  • kasutatakse TAG'isid, et tulemüüri läbivat liiklust hõlpsamini ja paremini kontrollida ja et vastavaid reegleid oleks vähem
  • pass ja block reeglite juures on reeglina kasutatud labeleid, et seadistusfaili loetavus oleks parem ning parem oleks orienteerud pfctl, systat ja pftop väljundis; label on sellise struktuuriga, nt
 JSext_http - J (jah) S (sisse) ext (väline seade) http (liikluse iseloomustus)
  • tulemüüri taga olevatele serveritele juurdepääsuks kasutataks synproxit
  • välisseadmelt sisenevat blokeeritud liiklust ei logita tulemüüri töötamise efektiivsust silmas pidades
  • logitakse väljuvat blokeeritud liiklust mõlemal seadmel ning serverite poolt sisenevat blokeeritud liiklust, et anomaaliaid avastada (nt serverist pöördub pahalane isanda poole vms)
  • kasutatud tabelitele vastavaid faile hoitakse koos kataloogis /etc/pf.tbl, et /etc kataloogi mitte risustada ebastandardsete failidega

Siltide kasutamise selgitus

Siltide kasutamise abil saab väga efektiivselt kontrollida tulemüüri läbivat liiklust. Tulemüüri läbivale paketile rakendatakse erinevaid reegleid sellises järjekorras, vasakul on kirjas võimalik teisendus või pass reegel ning paremal kommentaar, mida reegli abil sooritada saab

                 liiklus
                     
                    |
    RDR             |    <---- dst teisendamisel lisatakse silt 
                    |          nt 'rdr on $if_ext inet proto tcp to 172.16.1.25 port 25 tag TO_SMTP -> 192.168.100.25'
                    |          
                    |
    PASS IN         |    ----> kasutatakse paketi sisselubamisel RDR-teisendusel omistatud silti
                    |          pf.conf:
                    |          nt 'pass in quick on $if_ext inet tagged TO_SMTP $synopts label "JSext_smtp"'
                    |
                    |    <---- tulemüüri ilma RDR-teisenduseta pakettidele lisatakse silt 
                    |          nt '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"'
                    |
                    |
    NAT             |    ----> silti kasutatakse tulemüürist väljuva paketi src teisendamiseks
                    |          
                    |          
                    |
    PASS OUT        |    ----> TAGi kontrollides lubatakse pakett välja
                    |          pf.conf:
                    |          nt 'pass out quick on vorguseade tagged TO_vorgunimi'
                    |          nt 'pass out quick on seadmed tagged FROM_vorgunimi'
                    v

Paketifiltri töö jälgimine

  • Paketifiltri töö abstraktsel tasemel jälgimiseks sobib kasutada systat ning pftop programme, tähelepanu tuleks pöörata nt sellele kui palju pakette või baite liigub mingite reeglite (labelite) alusel tulemüürist läbi.
  • Peale paketifiltri seadistuse kehtestamist on mõttekas jälgida mida paketifilter logib öeldes nt
 # tcpdump -nei pflog0