Erinevus lehekülje "Kahe võrgukaardiga ruutiv tulemüür" redaktsioonide vahel
Allikas: Kuutõrvaja
(→Eesmärk) |
(→Eesmärk) |
||
(ei näidata sama kasutaja 41 vahepealset redaktsiooni) | |||
1. rida: | 1. rida: | ||
===Eesmärk=== | ===Eesmärk=== | ||
− | Olgu eesmärgiks ühendada tulemüüri abil internetiga avalikke aadresse | + | Olgu eesmärgiks ühendada tulemüüri abil internetiga avalikke aadresse kasutav serverite võrgusegment 192.168.100.0/24 |
internet | internet | ||
− | + | ... | |
− | + | . | |
− | + | | | |
| em0, 172.16.1.17/30 | | em0, 172.16.1.17/30 | ||
__|__ | __|__ | ||
16. rida: | 16. rida: | ||
| | | | ||
| | | | ||
− | + | --|------- serverid - 192.168.100.0/24 ------- | |
ning peavad olema täidetud sellised nõuded | ning peavad olema täidetud sellised nõuded | ||
29. rida: | 29. rida: | ||
- nimeteenus, 53/udp,tcp | - nimeteenus, 53/udp,tcp | ||
- süsteemsed teated smtp, 25/tcp | - süsteemsed teated smtp, 25/tcp | ||
+ | - tarkvara paigaldamine ftp serverist, 80/tcp | ||
* Läbipääs avalikust võrgust SERVERID võrku | * Läbipääs avalikust võrgust SERVERID võrku | ||
41. rida: | 42. rida: | ||
- süsteemsed teated smtp, 25/tcp | - süsteemsed teated smtp, 25/tcp | ||
- ocsp, 80/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_SMTP = "192.168.100.25" # smtp server, teenus | ||
+ | serv_HTTP = "192.168.100.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 | ||
+ | |||
+ | ######### 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_from_kontor_to_tm" | ||
+ | |||
+ | # | ||
+ | # 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 "ESext_blacklist" | ||
+ | block in quick on $if_ext from <spoofed> label "ESext_spoofed" | ||
+ | block in quick on $if_ext from <reserved> label "ESext_reserved" | ||
+ | # | ||
+ | # LÄBIPÄÄSU LUBAMINE AVALIKUST VÕRGUST TULEMÜÜRI TAHA | ||
+ | # | ||
+ | # Avalikust võrgust tulemüüri taha läbipääseva liikluse sisenemise lubamine | ||
+ | pass in quick on $if_ext inet proto tcp to $serv_HTTP port { 80, 443 } tag TO_HTTP_SERVERID $synopts label "JSext_to_http_serverid" | ||
+ | pass in quick on $if_ext inet proto tcp to $serv_SMTP port 25 tag TO_SMTP_SERVERID $synopts label "JSext_to_smtp_serverid" | ||
+ | |||
+ | # Läbipääseva TO_HTTP_SERVERID ja TO_SMTP_SERVERID liikluse väljumise lubamine | ||
+ | pass out quick on $if_int tagged TO_HTTP_SERVERID label "JVint_to_http_serverid" | ||
+ | pass out quick on $if_int tagged TO_SMTP_SERVERID label "JVint_to_smtp_serverid" | ||
+ | |||
+ | # | ||
+ | # LÄBIPÄÄSU LUBAMINE TULEMÜÜRI 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_AVALIK $udpopts \ | ||
+ | label "JSint_from_serverid_to_ntp_avalik" | ||
+ | # 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_AVALIK $udpopts \ | ||
+ | label "JSint_from_serverid_to_dns_avalik" | ||
+ | # 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_AVALIK $tcpopts \ | ||
+ | label "JSint_from_serverid_to_ocsp_avalik" | ||
+ | # et veebiserver saaks saata süsteemseid teateid | ||
+ | pass in quick on $if_int inet proto tcp from $serv_HTTP to $smtp port 25 tag TO_SMTP_AVALIK $tcpopts \ | ||
+ | label "JSint_from_serverid_to_smtp_avalik" | ||
+ | # et postimasin saaks kirju valja saata | ||
+ | pass in quick on $if_int inet proto tcp from $serv_SMTP to any port 25 tag TO_SMTP_AVALIK $tcpopts \ | ||
+ | label "JSint_from_serverid_to_smtp_avalik" | ||
+ | |||
+ | # et tagitud liiklus saaks tulemüürist välja | ||
+ | pass out quick on $if_ext tagged TO_OCSP_AVALIK label "JVext_from_serverid_to_ocsp_avalik" | ||
+ | pass out quick on $if_ext tagged TO_NTP_AVALIK label "JVext_from_serverid_to_ntp_avalik" | ||
+ | pass out quick on $if_ext tagged TO_SMTP_AVALIK label "JVext_from_serverid_to_stmp_avalik" | ||
+ | pass out quick on $if_ext tagged TO_DNS_AVALIK label "JVext_from_serverid_dns_avalik" | ||
+ | |||
+ | # | ||
+ | # 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_from_tm_to_ntp_avalik" | ||
+ | # et tulemüüri sees nimelahendus töötaks | ||
+ | pass out on $if_ext inet proto { tcp, udp } to $dns port 53 label "JVext_from_tm_to_dns_avalik" | ||
+ | # et haldusteated saaksid välja | ||
+ | pass out on $if_ext inet proto tcp to $smtp port 25 $tcpopts label "JVext_from_tm_to_smtp_avalik" | ||
+ | # et tulemüüri saaks tarkvara lisada | ||
+ | pass out on $if_ext inet proto tcp to $ftp port 80 $tcpopts label "JVext_from_to_ftp_avalik" | ||
+ | |||
+ | ===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 eristada 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 põhimõtteliselt efektiivsust) | ||
+ | * suhteliselt alul kehtestatakse nö vaikimisi poliitika (ingl. k. default policy) - 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 | ||
+ | |||
+ | ===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 |
Viimane redaktsioon: 25. detsember 2009, kell 21:02
Sisukord
Eesmärk
Olgu eesmärgiks ühendada tulemüüri abil internetiga avalikke aadresse kasutav serverite võrgusegment 192.168.100.0/24
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, 25/tcp - veebiteenus, http, 80,443/tcp
- 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_SMTP = "192.168.100.25" # smtp server, teenus serv_HTTP = "192.168.100.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 ######### 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_from_kontor_to_tm" # # 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 "ESext_blacklist" block in quick on $if_ext from <spoofed> label "ESext_spoofed" block in quick on $if_ext from <reserved> label "ESext_reserved" # # LÄBIPÄÄSU LUBAMINE AVALIKUST VÕRGUST TULEMÜÜRI TAHA # # Avalikust võrgust tulemüüri taha läbipääseva liikluse sisenemise lubamine pass in quick on $if_ext inet proto tcp to $serv_HTTP port { 80, 443 } tag TO_HTTP_SERVERID $synopts label "JSext_to_http_serverid" pass in quick on $if_ext inet proto tcp to $serv_SMTP port 25 tag TO_SMTP_SERVERID $synopts label "JSext_to_smtp_serverid" # Läbipääseva TO_HTTP_SERVERID ja TO_SMTP_SERVERID liikluse väljumise lubamine pass out quick on $if_int tagged TO_HTTP_SERVERID label "JVint_to_http_serverid" pass out quick on $if_int tagged TO_SMTP_SERVERID label "JVint_to_smtp_serverid" # # LÄBIPÄÄSU LUBAMINE TULEMÜÜRI 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_AVALIK $udpopts \ label "JSint_from_serverid_to_ntp_avalik" # 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_AVALIK $udpopts \ label "JSint_from_serverid_to_dns_avalik" # 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_AVALIK $tcpopts \ label "JSint_from_serverid_to_ocsp_avalik" # et veebiserver saaks saata süsteemseid teateid pass in quick on $if_int inet proto tcp from $serv_HTTP to $smtp port 25 tag TO_SMTP_AVALIK $tcpopts \ label "JSint_from_serverid_to_smtp_avalik" # et postimasin saaks kirju valja saata pass in quick on $if_int inet proto tcp from $serv_SMTP to any port 25 tag TO_SMTP_AVALIK $tcpopts \ label "JSint_from_serverid_to_smtp_avalik" # et tagitud liiklus saaks tulemüürist välja pass out quick on $if_ext tagged TO_OCSP_AVALIK label "JVext_from_serverid_to_ocsp_avalik" pass out quick on $if_ext tagged TO_NTP_AVALIK label "JVext_from_serverid_to_ntp_avalik" pass out quick on $if_ext tagged TO_SMTP_AVALIK label "JVext_from_serverid_to_stmp_avalik" pass out quick on $if_ext tagged TO_DNS_AVALIK label "JVext_from_serverid_dns_avalik" # # 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_from_tm_to_ntp_avalik" # et tulemüüri sees nimelahendus töötaks pass out on $if_ext inet proto { tcp, udp } to $dns port 53 label "JVext_from_tm_to_dns_avalik" # et haldusteated saaksid välja pass out on $if_ext inet proto tcp to $smtp port 25 $tcpopts label "JVext_from_tm_to_smtp_avalik" # et tulemüüri saaks tarkvara lisada pass out on $if_ext inet proto tcp to $ftp port 80 $tcpopts label "JVext_from_to_ftp_avalik"
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 eristada 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 põhimõtteliselt efektiivsust)
- suhteliselt alul kehtestatakse nö vaikimisi poliitika (ingl. k. default policy) - 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
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