Kahe võrgukaardiga ruutiv tulemüür: erinevus redaktsioonide vahel
Allikas: Kuutõrvaja
Mine navigeerimisribaleMine otsikasti
Uus lehekülg: ===Eesmärk=== Olgu eesmärgiks ühendada tulemüüri abil internetiga avalikke aadresse kasutatav serverite võrgusegment internet 2 Mbit/s download | def... |
|||
| (ei näidata sama kasutaja 43 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 | ||
| 22. rida: | 22. rida: | ||
* Sissepääs tulemüüri | * Sissepääs tulemüüri | ||
- | - haldusligipääs ssh, 22/tcp | ||
* Väljapääs tulemüürist | * Väljapääs tulemüürist | ||
- ntp | - 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 | * Läbipääs avalikust võrgust SERVERID võrku | ||
- smtp | - eposti teenus smtp, 25/tcp | ||
- | - veebiteenus, http, 80,443/tcp | ||
* Läbipaas SERVERID võrgust avalikku võrku | * Läbipaas SERVERID võrgust avalikku võrku | ||
- ntp, ocsp, dns | - 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 | ||
Viimane redaktsioon: 25. detsember 2009, kell 18:02
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