Mitme välisühendusega tulemüür

Allikas: Kuutõrvaja

Eesmärk

Olgu eesmärgiks ühendada ühe tulemüüri abil internetiga kaks privaateset võrku, kusjuures üks privaatne võrk kasutab ühte ja teine teist nö välisühendust

  ..........................     TEENUSEPAKKUJA
     |                                             VÕRK     ............................
   __|__                                                                             |
  |     |                                                                            |
  |  R1 | teenusepakkuja ruuter                                                      |
  |_____|                                                                          __|__
     |    gw - 192.168.102.33                                                     |     |
     |                                                                            |  R2 |
     |                                                                            |_____| teenusepakkuja ruuter
     |                                                                               |
     |   internet (AVALIK_TOODANG)                                                   | gw - 192.168.103.25
    -|-------------------------------|-                                              |
       192.168.102.32/28             |                 internet (AVALIK_KOHTVORK)    |
                                     |          -|-----------------------------------|--
                                     |           |           192.168.103.24/29
                                     |           |
             192.168.102.34 - em0   _|___________|_  em1 - 192.168.103.26
                                   |               | 
                                   |               |
                                   |               |
                                   |               |
                                   |_______________|
                   10.0.6.1 - em2    |   |   |   |    em3  - 172.16.2.1
                                     |   |   |   |   
                                     |   |   |   |   KOHTVORK - 172.16.2.0/24
                                     |   |   |  -|--------------------|------------|--
        TOODANG - 10.0.6.0/24        |   |   |                        |            |
    -------|---------|---------------|-  |   |                      __|__        __|__
           |         |                   |   |                     |     |      |     |
         __|__     __|__                 |   |                     |_____|      |_____|
        |     |   |     |                |   |                  intraneti www   töökohaarvuti
        |_____|   |_____|                |   |                   172.16.2.143   172.16.2.200
          www      smtp                  |   |
        .6.90      .6.200                |   |
                                         |   |
                                         |   |       TEST - 10.0.7.0/24
                                         |  -|-----------------------------------------
         ARENDUS - 10.0.13.0/24          |  
    -------------------------------------|-  

Mitme välisühenduse puhul lisanduvad nö tavalise tulemüüri seadistamisele lisaks sellised küsimused

  • millisest sisemisest võrgust lähtuvad paketid väljuvad millise avaliku interneti poolse võrguseadme kaudu
  • kas pöördudes kohtvõrgust toodangu teenuse poole vastava avaliku aadressiga käib liiklus otse läbi tulemüüri või ringiga läbi avaliku interneti

Olgu antud juhul otsustatud, et läbi tulemüüri toimub liiklus selliselt

  • TOODANG - toodanguvõrk, kus asuvad avalikke teenuseid pakkuvad serverid
  • AVALIK_TOODANG - internetist serverite poole pöördumine ja serveritest internetti pöördumine ruuditakse läbi selle võrgu ja teenusepakkuja R1 ruuteri
  • KOHTVORK - töötajate töökohaarvutite ja kohtvõrgu serverite võrk
  • AVALIK_KOHTVORK - kohtvõrgust internetti pöördumine ja internetist kohtvõrgu serverite poole pöördumine ruuditakse läbi selle võrgu ja teenusepakkuja R2 ruuteri

Tulemüür on liikluse lähte või sihtpunkt

Sissepääs tulemüüri, R1 kaudu

  • haldusligipääs ssh, 22/tcp, piiratud ip aadressidelt

Väljapääs tulemüürist, R1 kaudu

  • kellaaeg ntp, 123/udp
  • nimeteenus, 53/udp,tcp
  • süsteemsed teated smtp, 25/tcp
  • tarkvara paigaldamine ftp serverist, 80/tcp

Tulemüüri vaikelüüs on R1, 192.168.102.33.

Tulemüürist läbipääs

Läbipaas TOODANG võrgust AVALIK võrku (ja R1 ruuteri kaudu internetti)

  • 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 AVALIK võrgust (ja R1 ruuteri kaudu internetist) TOODANG võrku

  • www, 192.168.102.35:80,443/tcp -> 10.0.6.90:80,443/tcp
  • smtp, 192.168.102.35:25/tcp -> 10.0.6.200:25/tcp

Läbipääs KOHTVORK võrgust AVALIK_KOHTVORK võrku (ja R2 ruuteri kaudu internetti)

  • 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 AVALIK_KOHTVORK võrgust (ja R2 ruuteri kaudu internetist) KOHTVORK võrku

  • intraneti www, 192.168.103.26:443/tcp -> 172.16.2.143:443/tcp

Läbipääs KOHVORK võrgust otse tulemüüri kaudu TOODANG võrgu teenustele ning TOODANG teenuste keskkonnale haldusligipääs

  • www, 172.16.2.0/24 -> 192.168.102.35:80,443/tcp -> 10.0.6.90:80,443/tcp
  • smtp, 172.16.2.0/24 -> 192.168.102.35:25/tcp -> 10.0.6.200:25/tcp
  • ssh, 172.16.2.0/24 -> 10.0.6.0/24:22/tcp

Paketifiltri seadistusfail pf.conf

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.

Kahe välisühendusega aadressteisendava tulemüüri puhul tuleks tähelepanu pöörata sellistele asjaoludele

  • tulemüür kasutab ühte ruutingutabelit ja tulemüüril endale on seadistatud iseenesest üks vaikelüüs teenusepakkuja ruuteri R1 kaudu
  • teenusepakkuja R2 kaudu käivat liiklust ruuditakse paketifiltri abil
  • kohtvõrgust saab kasutada avalikke teenuseid otse st vastav liiklus ei käib ringiga läbi teenusepakkuja võrgu (KOHTVORK -> R2 -> R1 -> TOODANG)
  • tulemüüri enda haldus toimub läbi avaliku võrgu ruuteri R1 kaudu

Ülesande lahendamiseks sobib kasutada sellise ülesehitusega paketifiltri seadistusfaili

 # MACROS and LISTS
 include "/etc/pf/pf.macros-and-lists"
 
 # TABLES
 include "/etc/pf/pf.tables"
 
 # OPTIONS
 include "/etc/pf/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/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
 
 # 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/pf.anchor-rdr_to_toodang"
 
 # 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/pf.anchor-rdr_to_test"
 
 # 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/pf.anchor-rdr_to_arendus"
 
 # koigil seadmetel RDR-teisendused pakettide kohtvorgu serveritele jõudmiseks
 # reeglid rakendavad pakettidele sildi TO_KOHTVORK
 rdr-anchor rdr_to_kohtvork on $if_avalik_kohtvork
 load anchor rdr_to_kohtvork from "/etc/pf/pf.anchor-rdr_to_kohtvork"
 
 ######### 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"
   
 # lubatakse sisse RDR-teisendusest saadud siltidega pakette
 pass in quick on seadmed tagged TO_TEST label "JSsmd_to_test"
 
 # lubatakse sisse RDR-teisendusest saadud siltidega pakette
 pass in quick on seadmed tagged TO_ARENDUS label "JSsmd_to_arendus"
 
 # lubatakse sisse RDR-teisendusest saadud siltidega pakette
 pass in quick on $if_avalik_kohtvork tagged TO_KOHTVORK label "JSsmd_to_kohtvork"
 
 # 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_test tagged TO_TOODANG label "JVtest"
 pass out quick on $if_arendus tagged TO_TOODANG label "JVarendus"
 pass out quick on $if_kohtvork reply-to ($if_kohtvork_avalik 192.168.103.25) tagged TO_KOHTVORK label "JVkohtvork"
 pass out quick on $if_avalik_toodang tagged TO_AVALIK_TOODANG label "JVavalik_toodang"
 pass out quick on $if_avalik_kohtvork tagged TO_AVALIK_KOHTVORK label "JVavalik_kohtvork"
   
 # 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_TOODANG
 anchor pass_in_from_seadmed_to_avalik on seadmed
 load anchor pass_in_from_seadmed_to_avalik_toodang from "/etc/pf.anchor-pass_in_from_seadmed_to_avalik"
 
 anchor pass_in_from_seadmed_to_avalik on seadmed
 load anchor pass_in_from_seadmed_to_avalik_test from "/etc/pf.anchor-pass_in_from_seadmed_to_avalik"
 
 anchor pass_in_from_seadmed_to_avalik on seadmed
 load anchor pass_in_from_seadmed_to_avalik_arendus 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_KOHTVORK
 anchor pass_in_from_kohtvork_to_seadmed on $if_kohtvork label "JShaldus_from_kohtvork_to_seadmed"
 load anchor pass_in_from_kohtvork_to_seadmed from "/etc/pf.anchor-pass_in_from_kohtvork_to_seadmed"
 
 # kõigist seadmetest lubatakse välja FROM_* siltidega liiklust
 pass out quick on seadmed tagged FROM_KOHTVORK label "JVsmd_from_kohtvork_to_seadmed"
 
 #
 # TULEMÜÜRIST ENDAST VÄLJAPÄÄS
 #
 # et tulemüüri kellaaeg oleks õige
 pass out on $if_avalik_toodang inet proto udp to $ntp port 123 label "JVavalik_toodang to ntp"
 # et tulemüüri sees nimelahendus töötaks
 pass out on $if_avalik_toodang inet proto { tcp, udp } to $dns port 53 label "JVavalik_toodang to dns"
 # et haldusteated saaksid välja
 pass out on $if_avalik_toodang inet proto tcp to $smtp port 25 $tcpopts label "JVavalik_toodang to smtp"
 # et tulemüüri saaks tarkvara lisada
 pass out on $if_avalik_toodang inet proto tcp to $ftp port 80 $tcpopts label "JVavalik_toodang 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"

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/pf, et nad ei risustaks /etc kataloogi.

/etc/pf/pf.macros-and-lists

Failis /etc/pf/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_toodang="em0"
 if_avalik_kohtvork="em1"
 if_toodang="em2"
 if_kohtvork="em3"
 
 carp_avalik_toodang="carp0"
 carp_avalik_kohtvork="carp1"
 carp_toodang="carp2"
 carp_kohtvork="carp3"

/etc/pf/pf.tables

Failis /etc/pf/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/pf/pf.table.reserved"

/etc/pf/pf.options

Failis /etc/pf/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/pf/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/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/pf/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/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/pf/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/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/pf/pf.macros-and-lists"
 
 nat inet tagged FROM_HALDUS -> $carp_avalik
 nat inet tagged TO_AVALIK -> $carp_avalik

kus

  • FROM_HALDUS 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/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/pf/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