FreeBSD Packet Filter tulemüüriga
Autor: Pavel Kodotšigov AK22
LÜHIDALT AJALOOST
Packet Filter (lüh. PF) on OpenBSD tulemüür, alates OpenBSD versioonist 3.0, mille on kirjutanud 2001. aasta suvel Daniel Hartmeier asendamaks Darren Reed'i kirjutatud IPFilter tulemüüri. Oma eluaja jooksul on see tulemüür väga kiirelt arenenud. Packet Filter on tihedalt seotud võrgunduses levinud NAT ning QoS tehnoloogiatega, lubamaks suuremat paindlikkust ning vastupidavust. Packet Filter on porditud FreeBSD, NetBSD ning DragonFlyBSD operatsioonisüsteemidele.
INSTALLERIMINE
Selles referaadis käisitletakse tulemüüri installerimine FreeBSD (8.1 Release) OS-l.
Kõik käsud jurukast.
su <Root password>
Kuna PF filter ei sisalda standardses (GENERIC) FreeBSD tuumas (ingl. kernel), siis tuleb kompileerida vastava tuuma PF toetusega.
Selleks, läheme alltoodud kausta (NB! 64 bit. OSi jaoks valige vastavalt /sys/amd64/conf)
cd /sys/i386/conf
Teeme „GENERIC“ tuuma konfiguratsiooni faili koopiat
cp GENERIC PF
Redigeerime loodud fail:
vi PF
Paneme uuele tuumale nime „GENERIC“ asemel - „GENERIC_PF“
ident GENERIC_PF
Ning lisame alltoodud tekst konfiguratsiooni faili lõppes (infoks: see teksti allikas saate leida siit /usr/src/sys/conf/NOTES)
# The pf packet filter consists of three devices: # The `pf' device provides /dev/pf and the firewall code itself. # The `pflog' device provides the pflog0 interface which logs packets. # The `pfsync' device provides the pfsync0 interface used for # synchronization of firewall state tables (over the net). device pf device pflog device pfsync
Alltoodud lõik pole kohustuslik (aga väga soovitav), kuna annab võimalust tulemüüri läbilaskmise kiirusega juhtida. ALTQ võimaldab pakettide järjestamist ning teisi QoS-i komponente, mis on vajalikud QoS-i edukaks teostamiseks võrgus.
# altq(9). Enable the base part of the hooks with the ALTQ option. # Individual disciplines must be built into the base system and can not be # loaded as modules at this point. ALTQ requires a stable TSC so if yours is # broken or changes with CPU throttling then you must also have the ALTQ_NOPCC # option. options ALTQ options ALTQ_CBQ # Class Based Queueing options ALTQ_RED # Random Early Detection options ALTQ_RIO # RED In/Out options ALTQ_HFSC # Hierarchical Packet Scheduler options ALTQ_CDNR # Traffic conditioner options ALTQ_PRIQ # Priority Queueing options ALTQ_NOPCC # Required if the TSC is unusable options ALTQ_DEBUG
Ärge unustage salvestada faili!
Nüüd läheme /usr/src kausta
cd /usr/src
Kompileerime
make buildkernel KERNCONF=PF
ja installime tuuma
make installkernel KERNCONF=PF
Teeme „restart“i, et täiskäivitada juba uue tuumaga ehk „GENERIC_PF „
reboot
Veendume, et tõesti töötame uue tuumaga
uname -i
peame nägema selline vastus:
GENERIC_PF
Kõigepealt kopeerime PF näidiskonfiguratsiooni fail /etc kausta:
cp /usr/share/examples/pf/pf.conf /etc/pf.conf
Seejärel redigeerime /etc/rc.conf
vi /etc/rc.conf
Lisame faili /etc/rc.conf järgmised read, et Packet Filter käivitaks arvuti käivitamisega:
pf_enable="YES" pf_rules="/etc/pf.conf"
NB! Teie arvutis peab olema vähemalt 2 võrgukaarti! Teie /etc/rc.conf fail peab sisaldama vähemalt järgmised read, sõltuvusest teie võrgu ülesehitamisest (IP aadressid ja võrgumaskid):
# Väline võrgukaart, mis vaatab internetti ifconfig_em0="inet 193.168.1.1 netmask 255.255.255.0" # Sisene võrgukaart, mis vaatab lokaalvõrgu ifconfig_fxp0="inet 192.168.2.1 netmask 255.255.255.0" # PF käivitamine pf_enable="YES" pf_rules="/etc/pf.conf"
Ja lõppes lisame /etc/sysctl.conf faili järgmised read (loe selgitus /etc/pf.conf faili alguses).
vi /etc/sysctl.conf
Lisame:
net.inet.ip.forwarding=1 net.inet6.ip6.forwarding=1
Teeme viimane restart
reboot
Sellega, esimene etapp on edukalt tehtud, alustame nüüd konfigureerida Packet Filter.
KONFIGUREERIMINE
Nüüd vaatame kuidas saab välja näha tavaline skript tulemüüri reeglitega (PF filtri alusel), sisevõrguga, mis on kujutatud alltoodud struktuurskeemil (vt. pilt).
Meil on väike sisevõrk, mis sisaldab postiserver, veebiserver ja mitu tavakasutajate arvutit ühendatud läbi tulemüüri (kasutades sisevõrgukaart) internetiga (kasutades väljavõrgukaart). Ülesanne – kaitsta see võrk maailma väljastpoolt.
NB! DNS ja DHCP serverid siin ei käsitleta, kuid eeldatakse nende olemasolu või käsitsi tavakasutajate arvutite vastav konfigureerimine
Selle skeemi jaoks on /etc/pf.conf faili sisu saab olla järgmisena:
# $FreeBSD: src/share/examples/pf/pf.conf,v 1.1.4.1.4.1 2010/06/14 02:09:06 kensmith Exp $ # $OpenBSD: pf.conf,v 1.34 2007/02/24 19:30:59 millert Exp $ # # See pf.conf(5) and /usr/share/examples/pf for syntax and examples. # Remember to set net.inet.ip.forwarding=1 and/or net.inet6.ip6.forwarding=1 # in /etc/sysctl.conf if packets are to be forwarded between interfaces. ####### OPTIONS ######### #set block-policy option - Määrab filtrite ülesanded pakettide blokeerimisel #set debug option - Määrab tagasiside taseme #set fingerprints file - Määrab avalike võtmete faili #set limit option value - Määrab PF piirangud #set loginterface interface - Määrab logiliidese, vaikimis pflogd0 #set optimization option - Määrab optimeerimise taseme #set skip on interface - Määrab ignoreeritavad võguliidesed #set state-policy option - Määrab pakettide hoidmise reeglid #set timeout option value - Määrab ooteaja set optimization aggressive set timeout tcp.established 7200 set timeout udp.multiple 2 set limit states 40000 ####### MACROS AND TABLES ######### # Tuulemüri võrgukaardid # väline ext_if="em0" # sisene int_if1="fxp0" # Välisvõrgukaardi aadress external_addr="192.168.1.1" # Sisevõrgukaardi aadress internal_addr="192.168.2.1" # Sisevõrgu aadress ja võrgu mask internal_net="192.168.2.0/24" # Serverite aadressid sisevõrgus webserver=192.168.2.2 mailserver=192.168.2.3 # Musta nimekirja IP aadressid table <blacklist> persist \ { 207.46.197.32, 84.19.166.249 } # Valetatud aadressid table <NoRouteIPs> persist \ { 127.0.0.0/8, 172.16.0.0/12, 10.0.0.0/8, 255.255.255.255 } table <SshClients> persist \ { 193.40.194.204, 193.40.194.205} ######### TRANSLATION ########## #NAT võrguaadresside tõlkimine nat on $ext_if from $internal_net to any -> $external_addr #Pordite SMTP, HTTPs, IMAPs ümbersuunamine postiserverile #välisvõrgust mail="{ 25, 443, 993 }" rdr on $ext_if proto tcp from any to $external_addr/32 port $mail -> $mailserver #sisevõrgust: nat pass on $int_if1 proto tcp from $internal_net to $mailserver port $mail -> $int_if1 rdr on $int_if1 proto tcp from $internal_net to $int_if1 port $mail -> $mailserver # Pordite HTTP, FTP ja FTP-data ümbersuunamine veebiserverile #välisvõrgust: web="{80, 20, 21}" rdr on $ext_if proto tcp from any to $external_addr/32 port $web -> $webserver #sisevõrgust: nat pass on $int_if1 proto tcp from $internal_net to $webserver port $web -> $int_if1 rdr on $int_if1 proto tcp from $internal_net to $internal_addr port $web -> $webserver rdr on $int_if1 proto tcp from $internal_net to $ext_if port $web -> $webserver ########FILTER########## # vaikimisi blokeeritakse igasugust liiglust läbi tulemüüri seadmete block in log all block out log all # Blacklistitud ja reserveeritud liikluse keelamine block in quick on $ext_if from <NoRouteIPs> to any block out quick on $ext_if from any to <NoRouteIPs> # Läbipääsu lubamine avalikust võrgust tulemüüri taha pass in on $ext_if proto tcp from any to $webserver port $web keep state pass in on $ext_if proto tcp from any to $mailserver port $mail keep state # Pingida on lubatud pass in on $ext_if inet proto icmp all icmp-type 8 code 0 keep state # Loopback liidesel traafiku lubamine pass quick on lo0 all # Läbipääsu lubamine tulemüüri tagant avalikku võrku pass in log on $int_if1 from $internal_net to any pass out log on $int_if1 from any to $internal_net # Tulemüürist endast väljapääs pass out on $ext_if proto tcp all modulate state flags S/SA pass out on $ext_if proto { udp, icmp } all keep state # SSH läbipääsu väljastpoolt lubamine ainult SshClients nimekirja järgi pass in log on $ext_if proto tcp from <SshClients> to $external_addr port ssh modulate state flags S/SA
Lisage ülaltoodud tekst /etc/pf.conf faili juurde (parandage sõltuvusest teie võrgukonfiguratsioonist) ja käivitage Packet Filter käsitsi käsurealt:
pfctl -ef /etc/rc.conf
Kui käivitamine läks ilma veata, siis Packet Filter on edukalt käivitatud, veenduda sellest saab käsuga (sellega vaadate Packet Filtri staatus ja kõik sisse laadidud reeglid)
pfctl -s all
Täpsem info pf.conf faili konfigureemisest saate lugeda siit
KASUTATUD KIRJANDUS
http://kuutorvaja.eenet.ee/wiki/Packet_Filter
Autor
Pavel Kodotšigov
AK22