Ruutiv mitmeharuline tulemüür
Toores. Ehk seda pala võib täiendada.
Tulemüüri ja võrgu konseptsioon
On asutus Loomaaed mil domeen zoo.tartu.ee. Asutusele on ISP poolt terve C klass IP aadresse. See on omakorda jagatud veel mitmeks eri võrguks. On kontorivõrk, on serverite võrk, on majutatud serverite võrk (mitmesugused hobiteadlaste projektid, loodusuurijate serverid ja loomade jälgimise kaamerad jms). Lisaks kõigele sellele on olemas veel NATitud sisevõrk ning kasutust leiab uus edumeelne protokoll IPV6.
Asutusel on olemas server millel piisavalt CPU jõudlust ning kokku on masinas ülesannete täitmiseks neli võrgukaarti.
Võrgu poliitika
* Serverivõrk - seest välja ühendused oleksid kõik lahti - väljast sisse kõikühendused lahti va serveritele: - temperatuur.zoo.edu.ee ja monitoorija.zoo.edu.ee
(viimased kaks on vanad legacy serverid mille portidele ei tahaks lubada välismaad)
* Kontorivõrk - Seest välja ühendused kõik lahti - väljast sisse liikuvad kõik ühendused kinni va: - kontor.zoo.edu.ee - Serverivõrk
Lisaks ei jagaks DHCP teenus edaspidi enam läpakatele ja ajutistele arvutitele väliseid IP aadresse vaid sisemisi NATitavaid aadresse.
* Majutatud võrk - sees välja kõik lahti - väljas sisse kõik lahti
Lahendus ja pf.conf faili seadistus
kasutusel võimalikult palju tabeleid kuna tabelid tõenäoliselt eraldi reeglitest kiiremad. Vaja testida ALTQ lahendust, et piirata vajadusel majutatud võrgu masinate ühenduskiirusi. Blacklist kuhu saab "halbu" aadresse lisada.
NB! Tähele tasub panna, et võrreldes tavalise ühe võrgukaardiga tulemüüriga on reeglid nö tagurpidi. Järgnevalt kirjeldaks põgusalt reegleid mis neile võrkudele saab kirjutatud. Põhimõte oleks mitte kirjutada iga masina kohta käivaid piiranguid üldisesse tulemüüri vaid jätta spetsiifilised porte piiravad reeglid edasi olema igas masinas eraldi Kesksest tulemüürist kehtestatakse üldised piirangud - või lubamised.
PS!: Reeglite süntaks on järgmine:
[pass/block(drop/return)] [in/out] [log] [quick] [on interface] [inet/inet6] \ [proto <tcp/udp/icmp/icmp6>] [from src_addr [port src_port]] [to dst_addr [port dst_port]] \ [flags tcp_flags] [state]
ext_if = "fxp0" server_if = "fxp1" kontor_if = "fxp2" majutatud_if = "fxp3"
# Optimiseerimised set optimization normal set block-policy drop set skip on lo0 set limit states 1048576 set state-policy if-bound #set state-defaults pflow # mitu erinevat remote ip aadressi saavad samaagselt state'isid pidada. #See peaks olema koos state limiidiga set limit src-nodes 30000 scrub in all scrub out all random-id max-mss 1440 # Ruuteri enda aadressid table <my_addresses> const { 193.40.45.2, 193.40.45.33, 193.40.45.77 }
# Globaalne tabel kus olevad aadressid koheselt blokeeritakse table <global_block_in_from> { 0.0.0.0/8, 10.0.0.0/8, 127.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 240.0.0.0/4, fc00::/7 }
# Blokeerime spämmarite ligipääsu postiserveritele table <smtp_block_in_from> persist
# Serverite võrgu aadressid millele ligipääs blokeeritud table <server_block_out_to> const { 193.40.45.60, 193.40.45.61 }
# Kontori aadressid millele lubatakse ligipääs väljast table <kontor_pass_out_to> const { 193.40.45.78 }
# Serverite võrk lubatakse kontorivõrgule ligi table <kontor_pass_out_from> const { 193.40.45.33/26 }
# Nat reegel kontori privaataadressidele nat on $ext_if inet from 192.168.0.0/16 to any -> ($kontor_if:0)
# IPv6 link-local on lubatud pass quick to fe80::/10 pass quick from fe80::/10
#* Sisenev võrk # pass on $ext_if all # Nende masinatega internetist me ei suhtle block in log quick on $ext_if from <global_block_in_from> label "global_block_in" # Keelame mõnedele kirjade saatmise block in log quick on $ext_if proto tcp from <smtp_block_in_from> to any port 25 label "smtp_block_in"
# Paarile serverile piirame ligipääsu block in log quick on $ext_if to <server_block_out_to> label "server_block_out" # Ruuterile piirame ligipääsu väljast block in log quick on $ext_if proto { tcp, udp } to <my_addresses> label "global_block_in" #* Serverivõrk # # - seest välja ühendused oleksid kõik lahti # - väljast sisse kõik ühendused lahti va: pass on $server_if all keep state #* Kontorivõrk # # - Seest välja ühendused kõik lahti # - väljast sisse liikuvad kõik ühendused kinni va: # - serverivõrguga liiklus block log on $kontor_if all label "blocked_kontor" pass in on $kontor_if all keep state pass out on $kontor_if from $kontor_if to $kontor_if:network pass out on $kontor_if from <kontor_pass_out_from> keep state label "kontor_pass_out" pass out on $kontor_if to <kontor_pass_out_to> keep state label "kontor_pass_out" #* Majutatud võrk # # - seest välja kõik lahti # - väljast sisse kõik lahti: pass on $majutatud_if all keep state # -- END --